Квант
Разное

Программирование на микрокалькуляторе: простейшие программы

Штернберг Л. Ф.

46

Программирование на микрокалькуляторе: простейшие программы

Кандидат физико-математических наук Л. Ф. ШТЕРНБЕРГ

В этой статье, предложенной для девятиклассиков, рассказывается, как транслировать (переводить) простейшие (линейные) программы, написанные на учебном алгоритмическом языке, в которых программирование микрокалькулятора (ВЗ-34, МК-56, МК-54). Таким образом, если у вас есть доступ к такому микрокалькулятору, статья поможет вам связать школьный курс информации с практикой программирования.

Работа калькуляторa. У вас в руках программируемый микрокалькулятор. Можно ли считать его вычислительной машиной, путь маленькой? Давайте посмотрим.

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

Итак, калькулятор — это ЭВМ. Разумеется, маломощная и низкоскоростная, но все же позвольшая выполнять довольно серверные расчеты и, что для нас само главное, позволяющая хорошо понять, что процессит в любой ЭВМ — и больше, и малой. Вот поэтому мы и заявем программированем калькуляторa. Только как его программровать, если он не понимает нашей алгоритмического языка, а понимает только команды, подаваемые нажатем клавиши? Значит, надо научиться переводить алгоритмы с удобной для нас записи в команды калькуляторa.

Из чего же состоит и что имеет сам калькулятор? Его структура*) показана на рисунке 1. Пока обратим внимание на 14 резистров памяти, где будут хранить данные; они имеют номера 0,1…9, a, b, c, d (цифр не хватило — взял ли буквы); а также на два операционных регистра X и Y — именно над содержимым этих резистров выполняются операции. Прочее регистра нас показ не интересют. «Лампочки», подсоединенные к регистру X, ознакомют, что содержимое X вывлечивается на индикаторe.

С инструкцией к калькулятору вы, конечно, уже ознакомились, с инженерным (непрограммируемым) калькулятором вы тоже знакомы, поэтому описывать назначение клавиш и отдельные операции мы не будем**). Попродуем поработать.

Даны три стороны треугольника a=3, b=4, c=5 и надо вычислить по теореме косинуса угла, лежащшего против стороны a.

(Формула: cos a = a2+c2−b2bc\frac{a^2+c^2-b}{2bc}). Включаем калькулятор и работает с ним в автоматном режиме, то есть как с обычными инженерным калькулятором: нажимем клавиши, а калькулятор выполняет действия:

| Класс | Инд. | Комментарии |
| :— | :— | :— |
| 3 | 3 | заносим значение a=3 |
| П 0 | 3 | в Р0 (регистр 0) |
| 4 | 4 | заносим значение b=4 |
| П 1 | 4 | в P1 |
| 5 | 5 | заносим значение c=5 |
| П 2 | 5 | в P2 |
| Fx² | 25 | возводим значение c в квадрат вызываем значение b в X (c² при этом уходит в Y) |
| Fx² | 16 | возводим b=4 в квадрат |
| + | 41 | получаем b²+c² |
| ИП 0 | 3 | вызываем значение a в X (предыдущий результат — в Y) |
| Fx² | 9 | получаем a² |
| — | 32 | получаем значение числителя и запоминаем его в P4 |
| 2 | 2 | начиная вычислять 2·b·c |
| ИП 1 | 4 | …
| × | 8 | …
| ИП 2 | 5 | …
| × | 40 | вычислили 2·b·c |
| ИП 4 | 32 | вызываем числитель в X |
| X→Y | 40 | меняем местами X и Y (делить нужно на знаменатель) |
| ÷ | 0.8 | получаем результат |

  • (Изложение ведется применительно к модели ВЗ-34, МК-56, МК-54).

**(См. «Нуки и жизнь» № 2, 4, 6, 8, 10, 12 (1984), № 2, 4, 6 (1985), «Техника — молодежи» № 3 (1985) и др.)

47

Рис. 1.

Теперь, нажав клавии B/O, F, ПРГ, переведем калькулятор в программиный режим (на индикаторе при этом загорятся два нуля на месте порядка числа), а затем нажем те же самые клавии в той же последовательности, добавив в конец нажатие клавии C/П (зачем она нужна, обьясенно далее). Теперь нажатие клавии будет производить совсем другой эффект: калькулятор не выполняет нужные действия, а запоминает их. Для этого у него имеется специальная память под команды, состоящая из 98 ячеек, пропуверованных от 0 до 97 и счетчик адреса, содержащий номер той ячейки, в которой будет записано очередное действия (см. рис. 1). Клавиией B/O (возврат к нулю) в счетчик адреса записывается ноль — его-то мы и видим на индикаторе после перехода в программиный режим. Нажатие клавии (или пары клавии), которое в автономном режиме вызывало выполнение действия, теперь вызывает запись числового кода этого действия (команды) в ячейку памяти и увеличение счетчика адреса на единицу. Текущие значения счетчика адреса и последние три команды видны на индикаторе. Итак, наш последовательность действия, превращенная в команды, оказывась в пары клавилятора и представляет собой программу для калькулятора. Ее можно прочитать и при необходимости исправить ошибки — как это сделать, хорошо описано в инструкции к калькулятору.

Нажатем F, ABT вернем калькулятор в автономный режим. Нажав B/O, запесем ноль в счетчик адреса (этот ноль на индикаторе мы не видим, но в счетчик он запесется). Теперь будет нажатать клавишу ПП. Каждый нажатие вызывает выполнение одной команды из пары калькулятора — а именно той, адрес которого находится в счетчике адреса; после этого значение в счетчике увеличивается на единицу и при следующем нажатии будет выполнять следующая команда, на индикаторе будет последовательно вывлечаться те же значения, которые приведены в таблице. После 22-го нажатия увидим результат — 0.8.

Таким образом можно проверить программу, но так выполнять ее должно. Для выполнения программы указывать есть третий режим — автоматический. Нажем B/O, запесем в счетчик адреса ноль, и нажем клавии C/П (Стоп/Пуск). Теперь калькулятор также будет выбирать из пары по одной команде, выполнять их и увеличивать значение счетчика адреса, но уже не будет оставаться после каждой команды. Результаты на индикаторе будут мгать так быстро, что рассмотреть их нельзя. Для того чтобы увидеть конечный результат, надо оставить автоматический работу — для этого мы и записали в конец программы команду C/П — при ее выполнения калькулятор переходит из автоматического режима в автономный и можно посмотреть результат.

Итак, наш исполнитель — микрокалькулятор — может работать
— в автономном режиме, исполнитель команды по мере их подачи с клавиатуры;
— в программином режиме, запоминаная подаваемые с клавиатуры команды;
— в автоматическом режиме, выполняя в память команды.

48

Переходы из режимы в режимы поляются с помощью класси F, ПРГ, АВТ и СП так, как показано на рисунке 2.

Программируем линейный алгоритм. Наш исполнитель понимает весь своеобразный язык — язык нажатий класси, для нас более удобна и привчена запись на алгоритмческом языке (см. «Квант» 1985, № 9, 10). Чтобы успешно программировать классилятор, нам надо научиться переводить программу с алгоритмческого языка на язык класситора — как говорят профессиональные программы: транслировать ее в код класситора (от англ. translate — переводить). Вообще-то говоря, современная ЭВМ понимает весь своеобразный код, но у нее есть свой «встроенный» транслятор, переводящий программу с языка программирования на ее код. Для класситора это придется делать вручную.

Запишем нашу программу на алгоритмческом языке.

алг КОСИНУС
(вещ a, b, c, k)
apr a, b, c
рез k
нач веш k
k := b² + c² - a² / 2bc

кон

Сформируем теперь правила перевода (трансляции).

  1. По службному слову веш (других типов переменных у класситора нет) распределим регистры памяти под переменные, записывая в таблицу, какой регистр соответствует данной переменной.

  2. Для запроса значения класситора должен оставаться и подождать, пока человек наберет нужное значение, затем запустится его в соответствующей регистр, затем подождать следующего значения и т. д. Таким образом,apr программается последовательностью команд засылки в памяти, разделенных командами C/П.

  3. Присваивание программыруется оченьным образом.

  4. Если заслуженным словомрезледует лишь один параметр, рез транслировать нет необходимости. Если же таких параметров несколько, то в конце программы, перед словом кон, нужно программировать вывод этих параметров последовательностью команд вызова на регистр X вы-

водимых значений, за каждой из которых стоит команда C/П, пристававливающего вычисления.

  1. Кон программируется командой C/П.

Отметим, что в программе может оказаться несколько команд C/П. При переходе в автоматный режим по команде C/П в счетчике адреса находится адрес следующего команды (это можно проверить, нажав F, ПРГ, то есть перейдет в программиный режим, когда значение счетчика адреса видно на индикаторе, затем надо будет вернуть в автоматный режим, нажав F, ABT); если теперь нажать C/П, то начинает выполнять та команда, адрес которого находится в счетчике адреса, то есть следующего за C/П — вычислениянойой дальше.

Оттраслируем нашу программу.

Адр Код Ком

a — P0
b — P1
c — P2
k — P3

00 40 П0
01 50 C/П
02 41 П1
03 50 C/П
04 42 П2

05 61 ИП 1
06 22 F x²
07 62 ИП 2
08 22 F x²

09 10 +
10 22 F x²
12 11 —
13 44 П4
14 02 2

15 61 ИП 1
16 12

17 62 ИП 2
18 12
19 64 ИП 4
20 14 X↔Y

21 13 ÷

алг КОСИНУС
вещ a, b, c, k)
алг a, b, c
рез k

[Затем вводим a, b, c.] [Перед первой засылкой можно не ставить C/П (перед русом программы классилятор в автоматном режиме), надо набрать значения a и нажать C/П]
k := (b² + c² - a²)/(2bc)
[Работаем строго по формуле: вычисляем значение b², затем c², складываем, и т. д.]
[Понятно, что результат мы получим, но можно это сделать быстрее: после ввода в регистре X осталось с его можно сразу использовать.] [Можно сконкомить несколько команд, если считать, так: k := (b² + c² - a²)/2/b/c и программировать значение на 2, затем на b и наконец — на c.]
Получаем результат. кон Не забудьте выключить классилятор!

Итак, работает по чисто форматным правилам, мы получим программу для класситора, но она не будет оптимальной. С одной стороны, по (Окончание см. на c. 57)