Первое знакомство с Каллисто
Состояние интерпретации Каллисто очень похоже на режим автоматической работы ПМК. Владельцам «Электроники МК-161» и предыдущих моделей советских калькуляторов будет легко освоить работу на Каллисто в режиме диалога. Известные с детства команды ПМК теперь набираются на алфавитно-цифровой клавиатуре и выполняются сразу же по нажатию клавиши Ввод .
Каллисто использует обратную польскую запись — ту же самую, которую использовали советские ПМК. Мнемоника операций также бережно сохранена. Поэтому при изучении Каллисто можно взять любую советскую книгу по ПМК, которая у вас под рукой.
Для этой статьи выбрана замечательная книга Игоря Данилова «Секреты программируемого микрокалькулятора», основывающаяся на авторском цикле статей про «Электронику Б3-34» в журнале «Техника — молодёжи». Я отобрал несколько упражнений из этой книги так, чтобы заострить внимание на различиях между Каллисто и языком МК, но рекомендую выполнить самостоятельно все задачи — из этой или другой книги по ПМК.
Для тех, у кого нет накладной клавиатуры, приведены нажатия клавиш в их заводской маркировке. Накладная алфавитно-цифровая клавиатура («оверлей») существенно облегчает диалог с Каллисто — нажимаемые клавиши больше не кажутся «абракадаброй», буквы на индикаторе появляются в строгом соответствии с надписями на накладной клавиатуре.
Ввод радиуса электрона (стр. 6)[править]
Порядок числа вводится после английской буквы E, пробелов внутри числа быть не должно. Если вы ошиблись клавишей, последний введённый символ можно удалить клавишей Сx .
2,817938E-18
Нажимаем на клавиши: 2 , 8 1 7 9 3 8 Р-ГРД-Г ИП P − 1 8
Чтобы очистить строку ввода, нажмите друг за другом две клавиши F Сx и все введённые символы исчезнут. Если после ввода числа нажать Ввод , Каллисто положит его на стек. В следующем упражнении нам потребуется эта клавиша, а сейчас важно научиться редактировать вводимую строку. Проверьте, овладели ли вы тремя важными навыками оператора Каллисто:
- переключение с цифровой раскладки клавиатуры на латинскую (и обратно)
- удаление последнего введённого символа
- удаление всех введённых символов
Умножение 2 на 2 (стр. 8)[править]
В Каллисто числа отделяются друг от друга пробелом (клавиша ВП в Каллисто расшифровывается, как «Ввод Пробела»), поэтому слово ↑ не потребуется. Более того, ↑ будет ошибкой, т.к. лишний раз занесёт в стек число 2. Точка в конце вводится клавишей /−/ , которая находится справа от запятой. Эта точка обеспечивает вывод результата на индикатор, без точки результат так и останется лежать в стеке.
2 2 × .
Нажимаем на клавиши: 2 ВП 2 ВП × ВП /−/ Ввод
Не забываем ввести пробелы до и после знака × — именно по пробелам Каллисто различает вводимые слова. Если не ввести пробел между × и . , эти два коротких, но разных слова слипнутся в одно экзотическое слово из двух символов ×. . Такого слова Каллисто не знает (хотя позже вы сможете его выдумать и научить Каллисто новому слову) и выдаст сообщение об ошибке.
Результата потребуется ждать несколько секунд. Каллисто распознаёт введённые команды (слева направо) и тут же выполняет их, одну за другой. Когда все команды выполнены, Каллисто пишет "ok", приглашая оператора ввести следующую строчку.
Само умножение выполняется быстро, но в словаре сотни слов, а выполнять столько сравнений пока что для «Электроники» экстремально. К счастью, распознавание слов производится только один раз, на этапе их ввода. В памяти «Электроники» (шитом коде) слова хранятся, как уже распознанные адреса-токены. Этот трюк, придуманный Чаком Муром в начале 1970'х годов, позволит выполнять ваши «откомпилированные» команды значительно быстрее, чем их выполняли советские ПМК.
Ещё один способ умножить 2 на 2 приведён в той же книге на той же странице 8. Здесь ↑ играет важную роль, задавая второй сомножитель:
2 ↑ × .
Нажимаем на клавиши: 2 ВП В↑ ВП × ВП /−/ Ввод
Задача 1 (стр. 10-11)[править]
В Каллисто промежуточные результаты на экране не видны. Чтобы их вывести, нужно в интересующем вас месте явно указать два слова ↑ (стрелка вверх) и . (точка).
Как и в прошлом примере, мы ставим точку в конце для вывода результата, а ↑ между числами не требуется:
16592 16478 − 0,04 × 4 0,42 × + .
Нажимаем на клавиши:
1 6 5 9 2 ВП 1 6 4 7 8 ВП − ВП 0 , 0 4 ВП × ВП 4 ВП 0 , 4 2 ВП × ВП + ВП /−/ Ввод
Ответ из книжки 6,24.
Задача 3 (стр. 11-14)[править]
Можно использовать слова П и ИП для хранения переменных в регистрах «Электроники МК-161», как в примере для калькулятора. Надо лишь помнить, что часть регистров используется Каллисто и если их менять неумело, легко вызвать сбой в работе транслятора. Давайте сразу начнём с переменных-величин VALUE. Каллисто сама подберёт для них подходящие регистры. Обращаются же к переменными-величинам по имени — это значительно удобней, чем запоминать номера регистров.
При создании переменной-величины VALUE её начальное значение берётся из стека. На ПМК при записи в регистр число из стека не исчезает. Поскольку решение разрабатывалось для ПМК, перед VALUE мы используем ↑. Это приводит к тому, что копия заносимого в величину значения останется в стеке (как в ПМК) и может использоваться в последующих вычислениях «по цепочке».
Слово \ означает начало комментария. Каллисто комментарии игнорирует, поэтому вводить их необязательно. Также для удвоения использовано удобное слово 2×.
DEGREES \ значение угла дано в градусах 13,24 \ значение a ↑ VALUE a \ заносим его в величину a X² \ вычисляем a² 18,46 \ вводим b ↑ VALUE b \ заносим копию в величину b X² \ вычисляем b² + \ получаем сумму a²+b² 50 \ вводим угол φ (аргумент косинуса) COS \ вычисляем cos φ a \ вызываем величину a в стек × \ вычисляем a cos φ b \ вызываем содержимое величины b в стек × \ вычисляем произведение ba cos φ 2× \ все умножения закончены, на вершине стека значение 2ba cos φ − \ на вершине стека сейчас находится a²+b² − 2ba cos φ √ \ извлекаем квадратный корень из содержимого вершины стека . \ значение c — на экране. Если все операции выполнены правильно, c = 14,207788
При вводе решения нам придётся несколько раз переключаться на латинскую клавиатуру (клавиша Р-ГРД-Г ) и возвращаться обратно на цифровую (клавиша P ). Мы это уже делали в самом начале, вводя радиус электрона. Нажимаем на клавиши:
Р-ГРД-Г K ИП БП × ИП ИП 1 Ввод
В↑ ВП Р-ГРД-Г ↔ ШГ← − 3 ИП ВП ШГ← Ввод
В↑ ВП Р-ГРД-Г ↔ ШГ← − 3 ИП ВП В/О Ввод
Задача 4 (стр. 15-17)[править]
Путешествие чисел по «бесконечному» стеку Каллисто немного отличается от исходного, но в целом последовательность операций сохранена.
DEGREES \ нам придётся вычислять значения тригонометрических функций, аргументы которых заданы в градусах 40 ↑ \ вводим в стек и дублируем значение угла α, выраженное в градусах COS \ косинус угла α ↑ VALUE cosa \ вычисленное значение cos α отправлено на хранение в переменную cosa ↔ SIN ↑ VALUE sina \ теперь в стеке и переменной sina находится значение sin α 0,11 \ вводим значение k × \ произведение k sin α получено. Нужно сложить его с cos α + \ знаменатель обеих формул вычислен 0,35 \ вводим массу бруска m. Её надо разделить на полученный знаменатель. ↔ \ теперь всё встало на свои места и можно провести деление ÷ \ на экране видим величину, обозначенную в наших формулах буквой z ↑ VALUE z \ записали результат деления в переменную z. Все промежуточные вычисления закончены. \ Можно приступать к вычислениям величин T и N по двум последним формулам. 0,11 \ вновь вводим значение k 9,8 \ в стек введена величина g, всё готово для получения произведения kg × \ произведение на вершине стека, его можно вывести командой ↑ . 0,3 \ записали в стек ускорение a + \ величина a+kg, на которую надо умножить коэффициент z, готова × \ одна из двух требуемых величин — сила натяжения нити T — вычислена . \ выводим её на экран. Приступим к вычислениям по последней формуле: 9,8 \ опять вводим ускорение свободного падения в стек cosa × \ извлекаем содержимое переменной cosa (там хранится cos α) и умножаем его на g 0,3 sina × \ делаем тоже с величинами a и sin α − \ из первого произведения вычитаем второе \ получена величина g cos α − a sin α, которую осталось умножить на z z × . \ на экране теперь последний результат — сила давления N в Ньютонах.
Всё. Расчёт закончен. Если действия выполнены правильно, то ответ таков: T= 5,7639603E-1, N= 3,0594998 (На ПМК вычисления происходили с меньшей точностью, поэтому там T= 5,7639597E-1)
Нажатия клавиш:
Р-ГРД-Г K ИП БП × ИП ИП 1 Ввод
P В↑ ВП Р-ГРД-Г ↔ ШГ← − 3 ИП ВП С/П 5 1 ШГ← Ввод
P ↔ ВП Р-ГРД-Г 1 7 4 ВП P В↑ ВП Р-ГРД-Г ↔ ШГ← − 3 ИП ВП 1 7 4 ШГ← Ввод
В↑ ВП Р-ГРД-Г ↔ ШГ← − 3 ИП ВП /−/ Ввод
0 , 3 ВП Р-ГРД-Г 1 7 4 ШГ← ВП P × ВП
Р-ГРД-Г /−/ ВП P × ВП /−/ Ввод
Если вы поняли, как Каллисто работает в состоянии интерпретации, читайте следующую статью: «Простые программы на Каллисто».
Ссылки[править]
- tinyurl.com/Callisto161-1 — короткий адрес этой страницы (через зарубежный сайт)