Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Луноход-3
program Lunohod; { На Луне находится луноход. Луноход управляется с Земли. Он должен понимать команды: движение, поворот, подготовка, эксперимент, стоп. Команды имеют свои двоичные коды: 1000 - начать движение (drive) 0100 - начать вращение (rotate) 0010 - подготовка экспериментальной установки (их может быть 4 штуки) (prepare) 0001 - начать эксперимент (бурение, спектрометрия,..) (experiment) 0000 - остановить выполнение любой команды. Кроме того, команды имеют параметры: движение имеет 4 скорости; вращение - постоянная угловая скорость; экспериментальная установка - одна из четырёх. Можно сделать 4 скорости вращения, тогда будет одна эксприментальная установка. Можно сделать и то, и другое, но в этом случае нужно будет больше одного байта. Команды передаются с Земли в принимающее устройство Лунохода. Команды формируются с помощью пульта управления. Пульт - это набор из 8 кнопок, имеющих два состояния: нажато и не нажато. Кнопкам соответствуют разряды: 7 6 5 4 3 2 1 0 Если нажата кнопка 3, то разряд 3 устанавливается в 1, если был 0, и наоборот. Разряд 3 - это команда начать (с первой скоростью) движение, если он = 1 или прекратить движение, если он = 0. Десятичный эквивалент команды - число 8. Одновременно значение каждого разряда участвует в логике поведения лунохода. Например, если разряд 3 установлен в 1, то экспериментальное бурение невозможно. Или, если идёт бурение, то прежде чем начать движение, необходимо отключить бурение и установить сверло в штатную позицию. Разряды 7 и 6 - определяют скорость движения. Разряды 5 и 4 определяют тип эксперимента. Так как разряды объединены в пары, то возможны 4 состояния: 4 скорости движения, 4 эксперимента. Логические связки. Если есть движение, то бурение невозможно, вращение невозможно, подготовка невозможна. Если есть вращение, то бурение невозможно, движение невозможно, подготовка ВОЗМОЖНА. Если есть бурение, то движение невозможно, вращение невозможно, подготовка невозможна. Если есть подготовка, то движение невозможно, вращение ВОЗМОЖНО, бурение ВОЗМОЖНО. Работа программы. На вход подаётся сигнал. Сигнал обрабатывается анализатором (оператором if) Из памяти выбирается код команды и преобразуется в управляющую инструкцию. Луноход выполняет действие. Управляющая инструкция моделируется функцией или процедурой. } const move = 8; move1 = 64 + 8; move2 = 128 + 0 + 8; move3 = 128 + 64 + 8; const rotate = 4; const prepare = 2; const test = 1; function receive ( var s : integer ) : integer; begin readln (s); if s <> 0 then receive := s else receive := 0 end; procedure drive (var x : integer); begin if x <> 0 then begin if x = move then write('MOVE ') else if x = move1 then write('MOVE move ') else if x = move2 then write('MOVE move MOVE ') else if x = move3 then write('MOVE move MOVE move ') end; writeln; end; procedure twist (var x : integer); begin if x = 4 then write ('Rotate '); writeln; end; procedure setting (var x : integer); begin end; procedure experiment (var x : integer); begin end; var signal, m, r, p, e : integer; begin m := 0; r := 0; p := 0; e := 0; while receive ( signal ) <> 0 do begin if((signal = move) or (signal = move1) or (signal = move2) or (signal = move3)) then if (r = 0) and (p = 0) and (e = 0) then begin drive(signal); // функция движения m := 1 // луноход в движении end else begin if r = 1 then begin writeln ('Аппарат вращается.'); writeln ('Что делать: остановить вращение "0", или нет "4"?'); if receive (signal) = 0 then begin r := 0; writeln ('Вращение остановлено'); end else begin r := 1; writeln ('Вращение продолжается'); end end; if p = 1 then writeln ('Setup in process.'); if e = 1 then writeln ('Experiment in process.'); p := 0; e := 0; twist (r); setting (p); experiment (e); end else if signal = rotate then begin m := 0; e := 0; r := 1; twist (signal); // функция вращения end else if signal = prepare then writeln ('PREPARE') // здесь будет функция подготовки приборов else if signal = test then writeln ('TEST') // здесь будет функция экперимента else writeln ('ERROR'); end; writeln ('STOP'); end.
run
|
edit
|
history
|
help
0
Pokemon2
Apaja
MARCOS PAULO VALE DA MATA 600623116
AreaTriangulo.pas
Квартира из уч. Грицановой с местоположением квартиры на этаже
sorting_direct_choise_optimized
test 1 avant que theo huart etaigne mon ordi
formato_real
Calculatrice 1.0
08 Ariketa