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

Материал из ПМК вики
Перейти к: навигация, поиск

Состояние интерпретации Каллисто очень похоже на режим автоматической работы ПМК. Владельцам «Электроники МК-161» и предыдущих моделей советских калькуляторов будет легко освоить работу на Каллисто в режиме диалога. Известные с детства команды ПМК теперь набираются на алфавитно-цифровой клавиатуре и выполняются сразу же по нажатию клавиши  Ввод .

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

Для этой статьи выбрана замечательная книга Игоря Данилова «Секреты программируемого микрокалькулятора», основывающаяся на авторском цикле статей про «Электронику Б3-34» в журнале «Техника — молодёжи». Я отобрал несколько упражнений из этой книги так, чтобы заострить внимание на различиях между Каллисто и языком МК, но рекомендую выполнить самостоятельно все задачи — из этой или другой книги по ПМК.

Для тех, у кого нет накладной клавиатуры, приведены нажатия клавиш в их заводской маркировке. Накладная алфавитно-цифровая клавиатура («оверлей») существенно облегчает диалог с Каллисто — нажимаемые клавиши больше не кажутся «абракадаброй», буквы на индикаторе появляются в строгом соответствии с надписями на накладной клавиатуре.

Ввод радиуса электрона (стр. 6)[править]

CallistoTutor-0.png

Порядок числа вводится после английской буквы E, пробелов внутри числа быть не должно. Если вы ошиблись клавишей, последний введённый символ можно удалить клавишей  Сx .

2,817938E-18

Нажимаем на клавиши:  2    ,    8   1   7   9   3   8     Р-ГРД-Г   ИП     P      1   8 

Чтобы очистить строку ввода, нажмите друг за другом две клавиши  F   Сx  и все введённые символы исчезнут. Если после ввода числа нажать  Ввод , Каллисто положит его на стек. В следующем упражнении нам потребуется эта клавиша, а сейчас важно научиться редактировать вводимую строку. Проверьте, овладели ли вы тремя важными навыками оператора Каллисто:

  • переключение с цифровой раскладки клавиатуры на латинскую (и обратно)
  • удаление последнего введённого символа
  • удаление всех введённых символов

Умножение 2 на 2 (стр. 8)[править]

CallistoTutor-0a.png

В Каллисто числа отделяются друг от друга пробелом (клавиша  ВП  в Каллисто расшифровывается, как «Ввод Пробела»), поэтому слово ↑ не потребуется. Более того, ↑ будет ошибкой, т.к. лишний раз занесёт в стек число 2. Точка в конце вводится клавишей  /−/ , которая находится справа от запятой. Эта точка обеспечивает вывод результата на индикатор, без точки результат так и останется лежать в стеке.

2 2 × .

Нажимаем на клавиши:  2   ВП   2   ВП   ×   ВП   /−/   Ввод 

Не забываем ввести пробелы до и после знака × — именно по пробелам Каллисто различает вводимые слова. Если не ввести пробел между  ×  и  . , эти два коротких, но разных слова слипнутся в одно экзотическое слово из двух символов ×. . Такого слова Каллисто не знает (хотя позже вы сможете его выдумать и научить Каллисто новому слову) и выдаст сообщение об ошибке.

Результата потребуется ждать несколько секунд. Каллисто распознаёт введённые команды (слева направо) и тут же выполняет их, одну за другой. Когда все команды выполнены, Каллисто пишет "ok", приглашая оператора ввести следующую строчку.

Само умножение выполняется быстро, но в словаре сотни слов, а выполнять столько сравнений пока что для «Электроники» экстремально. К счастью, распознавание слов производится только один раз, на этапе их ввода. В памяти «Электроники» (шитом коде) слова хранятся, как уже распознанные адреса-токены. Этот трюк, придуманный Чаком Муром в начале 1970'х годов, позволит выполнять ваши «откомпилированные» команды значительно быстрее, чем их выполняли советские ПМК.

CallistoTutor-0b.png

Ещё один способ умножить 2 на 2 приведён в той же книге на той же странице 8. Здесь ↑ играет важную роль, задавая второй сомножитель:

2 ↑ × .

Нажимаем на клавиши:  2   ВП   В↑   ВП   ×   ВП   /−/   Ввод 

Задача 1 (стр. 10-11)[править]

CallistoTutor-1.png

В Каллисто промежуточные результаты на экране не видны. Чтобы их вывести, нужно в интересующем вас месте явно указать два слова ↑ (стрелка вверх) и . (точка).

Как и в прошлом примере, мы ставим точку в конце для вывода результата, а ↑ между числами не требуется:

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

CallistoTutor-3-1.png

 P   1   3    ,    2   4   ВП 

 В↑   ВП   Р-ГРД-Г     $\mathrm{\overset{\leftarrow}{ШГ}}$     3   ИП   ВП  $\mathrm{\overset{\leftarrow}{ШГ}}$  Ввод 

CallistoTutor-3-2.png

 0   P   F   ×   ВП 

 1   8    ,    4   6   ВП 

 В↑   ВП   Р-ГРД-Г     $\mathrm{\overset{\leftarrow}{ШГ}}$     3   ИП   ВП   В/О   Ввод 

CallistoTutor-3-3.png

 0   P   F   ×   ВП 

 +   ВП 

 5   0   ВП 

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

$\mathrm{\overset{\leftarrow}{ШГ}}$  ВП 

 P   ×   ВП 

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

 P   ×   ВП 

 2   ×   ВП 

    ВП 

 F      ВП 

 /−/   Ввод 

CallistoTutor-3-4.png

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

CallistoTutor-3-1.png

 P   4   0   ВП   В↑   ВП 

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

 P   В↑   ВП   Р-ГРД-Г     $\mathrm{\overset{\leftarrow}{ШГ}}$     3   ИП   ВП   С/П   5   1  $\mathrm{\overset{\leftarrow}{ШГ}}$  Ввод 

CallistoTutor-4-2.png

 P      ВП   Р-ГРД-Г   1   7   4   ВП   P   В↑   ВП   Р-ГРД-Г     $\mathrm{\overset{\leftarrow}{ШГ}}$     3   ИП   ВП   1   7   4  $\mathrm{\overset{\leftarrow}{ШГ}}$  Ввод 

CallistoTutor-4-3.png

 P   0    ,    1   1   ВП 

 ×   ВП 

 +   ВП 

 0    ,    3   5   ВП 

    ВП 

 ÷   ВП 

 В↑   ВП   Р-ГРД-Г     $\mathrm{\overset{\leftarrow}{ШГ}}$     3   ИП   ВП   /−/   Ввод 

CallistoTutor-4-4.png

 P   0    ,    1   1   ВП 

 9    ,    8   ВП 

 ×   ВП 

 0    ,    3   ВП 

 +   ВП 

 ×   ВП 

 /−/   Ввод 

CallistoTutor-4-5.png

 9    ,    8   ВП 

 Р-ГРД-Г   С/П   5   1  $\mathrm{\overset{\leftarrow}{ШГ}}$  ВП   P   ×   ВП 

 0    ,    3   ВП   Р-ГРД-Г   1   7   4  $\mathrm{\overset{\leftarrow}{ШГ}}$  ВП   P   ×   ВП 

    ВП 

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

CallistoTutor-4-6.png

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

Ссылки[править]

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