Первое знакомство с Каллисто

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

Состояние интерпретации Каллисто очень похоже на режим автоматической работы ПМК. Владельцам «Электроники МК-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 мы используем . Это приводит к тому, что копия заносимого в величину значения останется в стеке (как в ПМК) и может использоваться в последующих вычислениях «по цепочке».

Слово \ означает начало комментария. Каллисто комментарии игнорирует, поэтому вводить их необязательно. Также для удвоения использовано удобное слово .

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   Ввод 

 P   1   3    ,    2   4   ВП 

 В↑   ВП   Р-ГРД-Г      ШГ←      3   ИП   ВП   ШГ←   Ввод 

 0   P   F   ×   ВП 

 1   8    ,    4   6   ВП 

 В↑   ВП   Р-ГРД-Г      ШГ←      3   ИП   ВП   В/О   Ввод 

 0   P   F   ×   ВП 

 +   ВП 

 5   0   ВП 

 Р-ГРД-Г   С/П   5   1   ВП 

 ШГ←   ВП 

 P   ×   ВП 

 Р-ГРД-Г   В/О   ВП 

 P   ×   ВП 

 2   ×   ВП 

    ВП 

 F      ВП 

 /−/   Ввод 

Задача 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   4   0   ВП   В↑   ВП 

 Р-ГРД-Г   С/П   5   1   ВП 

 P   В↑   ВП   Р-ГРД-Г      ШГ←      3   ИП   ВП   С/П   5   1   ШГ←   Ввод 

 P      ВП   Р-ГРД-Г   1   7   4   ВП   P   В↑   ВП   Р-ГРД-Г      ШГ←      3   ИП   ВП   1   7   4   ШГ←   Ввод 

 P   0    ,    1   1   ВП 

 ×   ВП 

 +   ВП 

 0    ,    3   5   ВП 

    ВП 

 ÷   ВП 

 В↑   ВП   Р-ГРД-Г      ШГ←      3   ИП   ВП   /−/   Ввод 

 P   0    ,    1   1   ВП 

 9    ,    8   ВП 

 ×   ВП 

 0    ,    3   ВП 

 +   ВП 

 ×   ВП 

 /−/   Ввод 

 9    ,    8   ВП 

 Р-ГРД-Г   С/П   5   1   ШГ←   ВП   P   ×   ВП 

 0    ,    3   ВП   Р-ГРД-Г   1   7   4   ШГ←   ВП   P   ×   ВП 

    ВП 

 Р-ГРД-Г   /−/   ВП   P   ×   ВП   /−/   Ввод 

Если вы поняли, как Каллисто работает в состоянии интерпретации, читайте следующую статью: «Простые программы на Каллисто».

Ссылки

  • tinyurl.com/Callisto161-1 — короткий адрес этой страницы (через зарубежный сайт)