«Техника-молодежи» 1987 №6, с.52-53

РАБОТА
БЕЗ ОСТАНОВА

Как-то раз наш клуб проводил товарищескую встречу с командой раздела «Человек и компьютер» из журнала «Наука и жизнь». Встреча эта, надо сказать, состоялась на выезде, в гостях, на «чужом поле», без привычной поддержки родных стен и болельщиков. Стоит ли удивляться, что наши ворота не остались в неприкосновенности, молодой форвард соперника Алексей Бойко, обманув бдительность защиты серией хитрых финтов (игры КЭИ, дескать, не только электронны, но и весьма неплохи, нестандартные приемы нестандартны и т.д.), вышел с голкппером один на один и нанес решающий удар в ближний угол «Не понимаю только, почему вы игнорируете динамические игры?»

Последующий диалог, хотя и являл собою «игру в одни ворота» (к сожалению, даже не электронную), все-таки заслуживает того, чтобы быть частично воспроизведенным.

— Какие-какие?

— Динамические. В реальном масштабе времени.

— На компьютере?

— На ПМК.

— А как смотреть результат?

— В режиме мерцания.

— А как вводить воздействие?

— Переключателем Р-Г...

И так далее в том же духе. Словом, команда КЭИ потерпела первое за два сезона чувствительное поражение.

Можно ли было его избежать? Несомненно. Вот, например, какое письмо поступило в наш адрес буквально несколько дней спустя от Дария Аксельрода из Ленинграда. «Хочу сообщить, что веду исследования в неизвестной для КЭИ области динамичных игр. При помощи переключателя Р-ГРД-Г можно направлять ход вычислении по трем ветвям: например, взять косинус от ста и сравнить результат с нулем. И если в процессе игры нас интересует не очень много величин, то их индикацию можно осуществить во время счета, удерживая каждую в регистре X несколькими стрелками вверх. Обе эти идеи не новы, вторую, например, я почерпнул из книги «Микрокалькуляторы в игpax и задачах». Но их обьедииение может дать интересные игры. Сначала я написал программу «Посадка на Луну». Играющий вводит силу тяги, а машинка рассчитывает, сколько остается топлива, какова высота лунолета, его ускорение, скорость, причем делает это непрерывно, высвечивая изменения высоты и скорости корабля через две секунды, пока играющий не захочет изменить положение дел, переключит Р-ГРД-Г и введет новую силу тяги. Потом я написал программу «Автомобиль», где машинка работает уже беспрерывно. Вы можете поворачивать направо, налево, ехать прямо, пока не попадаете в заданную точку, где машинка сообщает о финише. Эти программы не привожу, так как они не очень удачны и КЭИ без труда сможет их воссоздать».

Что можно сказать? Спасибо за доверие, Дарий. Вот, например, программа «Лунолет-Д», реконструированная по твоему исчерпывающему описанию:


00.ИПА 01.↑ 02.↑ 03.↑ 04.↑ 05.ИПВ 06.↑ 07.↑ 08.↑
09.↑ 10.ИПД 11.Fx≠0 12.35 13.ИПС 14.Fcos 15.Fx≠0
16.21 17.↑ 18.Fx2 19.F√ 20.÷ 21.1 22.+ 23.Fx2
24.ИП0 25.× 26.- 27.FВх 28.XY 29.Fx<0 30.33 31.+
32.0 33.ПД 34.Fo 35.ИП0 36.- 37.+ 38.ПВ 39.+ 40.2
41.÷ 42.ИПА 43.+ 44.ПА 45.Kx<0C 46.2 47.× 48.XY
49.ИПВ 50.- 51.× 52.ИПВ 53.Fx2 54.+ 55.F√ 56.П1
57.0 58.ПА 59.+ 60./-/ 61.ПВ 62.1 63.3 64.+ 65.Fx<0
66.69 67.FВх 68.П1 69.ИП1 70.5 71.× 72.F10x 73.Fx2
74.Fx2 75.Fx2 76.↑ 77.ИПД 78.ИПВ 79.С/П

Играть в эту игру чрезвычайно просто. В регистр 0 вводится ускорение силы тяжести на планете в м/с (лучше задавать его целым числом), в регистр Д начальный запас топлива в кг, в регистр А начальная высота в м, в регистр В начальная вертикальная скорость в м/с (знак «минус» соответствует снижению). В регистр С закладываем число 100 «Рычагом управления» служит переключатель Р-Г. Позиция Г соответствует выключению двигателя, промежуточное положение (ГРД) — малой тяге, Р — полной. Малая тяга в точности уравновешивает силу гравитации, а полная в четыре раза больше. Расход топлива численно равен реактивному ускорению.

Игра начинается командой В/О С/П. На индикаторе мерцает текущая высота полета (это обеспечивают команды 00–04), затем ее сменяет скорость (05–09), на мгновение проблескивает наличный запас топлива (10), и начинаются вычисления. Прежде всего производится проверка, не опустели ли бакн (11–12). Если да, то ракетный блок пропускается, и управление передается сразу на адрес 35, в блок расчета новых скорости и высоты полета. Если же топливо еще есть, фрагмент 13–20 анализирует положение переключателя Р-Г: если тот установлен в позицию Р, на выходе блока имеем 1, если в позицию Г, то -1, промежуточная же позиция дает 0 (кстати, владельцы МК-61 и МК-52 могут заменить шесть команд 15–20 одной единственной KЗН). Затем на основании полученной информации ПМК определяет реактивное ускорение и расход топлива, новые скорость и высоту полета. Делается это примерно как и в предшествовавших космических программах, причем шаг по времени взят равным одной секунде. При анализе программы надо помнить, что в верхних регистрах стека находятся скорость и топливо введенные туда командами 05–10. Команда по адресу 45 сравнивает новую высоту полета с нулем. Если высота положительна (еще летим), то управление передается на адрес 00, и все повторяется. Полный цикл вычислений занимает секунд 15, а при пустых баках еще меньше. Если же высота отрицательна, задействуется блок прилунения (46–79). Сначала определяется посадочная скорость (46–61), затем она анализируется с помощью «сверхчисел». При скорости, не превышающей 2,5 м/с (посадка на «отлично»), она просто выводится на индикатор и вычисления останавливаются. Если скорость посадки лежит в диапазоне 2,5–5 м/с («хорошо»), на индикаторе появляется ЕГГОГ. Нажимаем С/П, на индикаторе скорость. В обоих случаях в регистр Y выводится оставшийся запас топлива. При дальнейшем увеличении посадочной скорости ПМК выдает ЗГГОГа: его надо сбросить (Сх), а скорость и топливо смотреть в соответствующих регистрах (ИПВ и ИПД). Затем наступает очередь серьезных аварийных ситуаций. При прилунении со скоростью 7,5–10 м/с на индикаторе появляется испорченный фрагмент программы; «ремонт» корабля в этом случае можно произвести по методике, изложенной в № 3 за этот год: FПРГ ШГ влево Сх С/П FАВТ FПРГ ШГ влево ШГ влево, после чего вписать две команды вместо Сх С/П, перейти в режим АВТ и делать следующую попытку. Очень «коварно» ведет себя ПМК, если скорость лежит в диапазоне 10–12,5 м/с. На индикаторе как ни в чем не бывало зажигается ее величина, в регистре Y находится остаток топлива. Однако попытка продолжить полеты не удается: в регистр С заслан «хвост» ОС-оборотня, поэтому переключатель Р-Г не работает — у лунолета вышел из строя двигатель. Чтобы его исправить, придется снова заслать 100 в регистр С. А при скорости свыше 12,5 м/с вас ждет худшее — Тьма...

В качестве примера можно предложить такой комплект исходных данных: 2 П0 50 ПД 500 ПА 0 ПВ 100 ПС. Задача — сесть с оценкой «хорошо» (по крайней мере, никому из администрации КЭИ заработать «отлично» в этом варианте не удалось).


«Техника-молодежи» 1987 №6, с.52-53