Набор программ Арифметика


Главная / ЭКВМ / Программы для ЭКВМ / Математика

Прототипы всех приведённых ниже программ (кроме "Угадай цифру"), только более простые и предназначенные для старых программируемых микрокалькуляторов, были опубликованы в книге "Пять вечеров с микрокалькулятором" И.Д. Данилова и Г.В. Славина. Игра "Угадай цифру" также давно существует в варианте для старых ПМК.

По идее, эти программы предназначены для того, чтобы помочь освоить детям числа и арифметические действия с ними. Но скорее эти программки пригодятся в качестве примера взрослым, желающим научиться программировать на МК-152. На их примере можно научиться:
- объединять несколько программ в одну;
- создавать для этой объединённой программы элементарное меню [вывод поясняющего текста и переход на нужные адреса с записанными программами в зависимости от нажатой клавиши].

Также в некоторых из этих программ введённые пользователем данные подробно проверяются на корректность. Способы этих проверок тоже могут кому-нибудь пригодиться.

 


Программа "Палочки"

Смысл этой незатейливой программы в том, что она при вводе пользователем числа вида 11…1 считает количество единиц ("палочек") и выводит его в регистр Х, а при вводе целого числа от 1 до 8 выводит «палочки» - число вида 11…1, количество разрядов в котором равно введённому пользователем числу. Если же пользователь введёт некорректное число, то программа ничего не выводит, просит ввести данные снова.

После того, как программа выведет "палочки" или их количество, следует нажать С/П перед следующим вводом, иначе она проигнорирует ввод.

Контрольная сумма для этой программы Sарифм=9939; S(2)=219.

  x0 x1 x2 x3 x4 x5 x6 x7 x8 x9
0x 0 7 0 РР П 90 26 0 B↑ B↑ B↑
1x С/П П 0 F x≥0 00 F x≠0 00 K {x} F x=0 00 ИП 0
2x 9 - F x<0 40 ИП 0 1 - П 0 Cx ИП 0
3x F 10x + F L0 29 1 + С/П БП 00 FFh
4x ИП 0 F lg П 1 ИП 0 1 0 ÷ K {x} 0 ,
5x 1 - F x=0 00 F L1 43 ИП 0 F lg K [x] 1
6x + С/П БП 00            
7x 82h A2h A5h E1h E2h A8h 20h E6h A8h E4h
8x E0h E3h 20h A8h ABh A8h 22h AFh A0h ABh
9x AEh E7h AAh A8h 22h FFh        

Структура программы "Палочки"

Адрес Выполняемые действия
00-10 Подготовка к работе: вывод сообщения в строке комментариев, заполнение нулями стека, останов программы для ввода.
11-23 Проверка введённого числа. Если число равно нулю, отрицательное и/или дробное, то возвращаемся к началу программы. Далее, если оно больше 8, то для дальнейшей проверки переходим на адрес 40, если нет, идём дальше.
24-38 Создаём число 10^(введённое число - 1), по циклу прибавляем к нему 10^(введённое число - 2), …, 10^1. По завершении цикла торжественно прибавляется единица и по остановке программы пользователь видит "палочки". Когда он на них наглядится и нажмёт С/П, переходим в начало программки.
40-57 Проверка каждого знака числа на равенство его единице. Если какой-то знак не равен единице, переходим в начало – неправильный ввод.
58-63 Если мы убедились, что число пользователя состоит из единиц, выводим округленный логарифм числа из П0, прибавляем 1 – получаем количество этих самых единиц-«палочек». Останов для просмотра результата, по нажатии С/П – переходим в начало.
70-95 Текст, выводящийся в строке комментариев.
 


Программа "Повтори число"

Эта программа очень проста. Она заставляет пользователя вводить показанные машинкой случайные трёхзначные числа, при совсем небольших изменениях можно делать и n-значные, n≤8. Если пользователь повторяет число калькулятора в точности, выводится сообщение в строке комментариев "Молодец". Если же он ошибается, выводится сообщение в регистре Х "ERROR".

Контрольная сумма для этой программы: Sарифм=19216; S(2)=248.

  x0 x1 x2 x3 x4 x5 x6 x7 x8 x9
0x Cx B↑ B↑ К СЧ 1 ВП 3 × K [x] С/П
1x - F x=0 23 0 3 0 РР П 90 26 Cx
2x С/П БП 00 K - БП 00 FFh      
3x 8Ch AEh ABh AEh A4h A5h E6h 21h FFh  

Структура программы "Повтори число"

Адрес Выполняемые действия
00-09 Очистка регистров, создание n-значного СЧ (n вводится на шагах 6-7 и может быть изменено), останов для ввода числа пользователем.
10-12 Проверка равенства Х=У (числа калькулятора и числа пользователя). При неравенстве переход на шаг 23, иначе идём дальше.
13-22 Вывод сообщения "Молодец", останов программы. После нажатия пользователем С/П переходим в начало.
23-25 Вызов ошибки оператором К-.
30-38 Сообщение "Молодец".
 


Программа "Угадай цифру"

Калькулятор "загадывает" случайную цифру, за 4 попытки [при правильной игре этого достаточно для отгадывания любой цифры] пользователь пытается отгадать её. Если введенная пользователем цифра слишком мала, выводится сообщение "мало", велика – "много". При выигрыше и проигрыше выводятся соответствующие сообщения в строке комментариев.

Контрольная сумма для этой программы: Sарифм=34258; S(2)=224.

  x0 x1 x2 x3 x4 x5 x6 x7 x8 x9
0x К СЧ 0 1 0 × K[x] П 0 0 9 5
1x РР П 90 26 4 П 3 ПП 60 С/П ИП 0 -
2x F x≠0 50 F x<0 40 0 9 0 РР П 90 26
3x F L3 15 1 2 0 РР П 90 26 С/П FFh
4x 0 8 4 РР П 90 26 БП 30    
5x 0 6 8 РР П 90 26 Cx С/П БП 00
6x 0 B↑ B↑ B↑ В/О       E3h A3h
7x A0h A4h A0h ADh AEh 2Dh A2h EBh A8h A3h
8x E0h EBh E8h FFh ACh ADh AEh A3h AEh FFh
9x ACh A0h ABh AEh FFh E3h A3h A0h A4h A0h
10x A9h 20h E6h A8h E4h E0h E3h 20h 5Bh 34h
11x 20h AFh AEh AFh EBh E2h AAh A8h 5Dh FFh
12x AFh E0h AEh A8h A3h E0h EBh E8h FFh  

Структура программы "Угадай цифру"

Адрес Выполняемые действия
00-06 Создание целого СЧ от 0 до 9 [изменив содержимое шагов 1,2,3 с 010, например, на 100, получим программу "Угадай число от 0 до 99"] и занесение его в память.
07-17 Вывод сообщения, занесение числа попыток [шаг 13, можно изменять] в память, очистка стека и ожидание реакции пользователя.
18-23 Запоминаем число пользователя и если оно равно числу калькулятора, переходим на обработку ситуации выигрыша (50), если больше – на адрес 40. Если меньше, идём дальше.
24-29 Выводим сообщение "мало"
30-31 Цикл: если число попыток не равно нулю, переходим на очистку стека и ввод числа, если попытки кончились, идём дальше.
35-38 Выводим сообщения о проигрыше
40-47 Выводим сообщения "много", переход на цикл 30
50-59 Выводим сообщения о выигрыше, переход в начало.
60-64 Подпрограмма, очищающая стек
68-128 Тексты сообщений
 


Программа "Примеры"

Калькулятор предлагает пользователю совершить арифметическое действие с числами от 0 до 9 и проверяет правильность решения. После решения всех примеров выводится оценка от 1 до 5. Количество примеров может составлять от 5 до 100, и вводится самим пользователем в начале выполнения программы.

В данном образце программы в качестве арифметического действия выбрано умножение, но программа легко переделывается под вычитание и сложение. Также ниже будет показано, как, незначительно изменив код программы, увеличить диапазон чисел, с которыми нужно совершить действие, или изменить допустимое число примеров.

Контрольная сумма для этой программы: Sарифм=28964; S(2)=242.

  x0 x1 x2 x3 x4 x5 x6 x7 x8 x9
0x 0 8 0 РР П 90 26 Cx B↑ B↑ B↑
1x С/П П 0 П 1 0 5 - F x≥0 00 9 6
2x - F x<0 00 K {x} F x=0 00 Cx П 2 К СЧ 1
3x 0 × K [x] К СЧ 1 0 × K [x] 1 0
4x 0 РР П 90 26 Cx С/П F O F O × -
5x F x=0 56 ИП 2 1 + П 2 Cx F L0 28 ИП 2
6x ИП 1 ÷ 5 × K [x] F x=0 69 1 + 1
7x 1 0 РР П 90 26 Cx + С/П БП 00
8x 8Ah AEh ABh 2Dh A2h AEh 20h AFh E0h A8h
9x ACh A5h E0h AEh A2h 20h 2Dh 20h 3Fh FFh
10x 5Ah 20h 78h 20h 59h 20h 3Dh 20h 3Fh FFh
11x 82h A0h E8h A0h 20h AEh E6h A5h ADh AAh
12x A0h 21h FFh              

Теперь о том, как изменить программу, чтобы она предлагала примеры на:
Сложение – в адресе 48 изменить "х" на "+"; в адресе 102 изменить "78h" на "2Bh"
Вычитание – в адресе 48 изменить "х" на "-"; в адресе 102 изменить "78h" на "2Dh"

Структура программы "Примеры"

Адрес Выполняемые действия
00-10 вывод сообщение, очистка стека, ожидание реакции пользователя.
11-25 проверка введённого пользователем числа примеров. По адресам 13-14 находится минимальное число примеров, по адресам 18-19 – (максимальное число - 4). Если пользователь ввёл недопустимое число, переходим в начало.
26-45 установка 0 в качестве числа решённых примеров, создание двух случайных чисел. Изменяя содержимое адресов 34-35, где по умолчанию стоит 10, можно изменять диапазон предлагаемых чисел. Затем вывод сообщения и остановка.
46-51 проверяем правильность решения пользователя. Неправильно – переходим к адресу 56, правильно – идём дальше.
52-55 прибавляем 1 к числу правильно решённых примеров
56-58 очищаем регистр Х и зацикливаемся на переход к генерированию новых СЧ, пока не обнулится число оставшихся примеров. Если примеры кончились – идём дальше.
59-77 рассчитываем оценку: делим число решённых примеров на общее число примеров, получившийся коэффициент умножаем на пять. При получении нуля оценку считаем равной 1. Выводим сообщение "Ваша оценка" и совершаем остановку.
78-79 Переход на начало программы.
80-122 Текст выводимых сообщений
 


Программа "Меню"

Эта программа поможет объединить все вышеизложенные программы в одну, о чём будет подробнее рассказано ниже. Она выводит на экран названия наших программ и рядом с каждой – номер 1,2,3,4. Нажав после этого на клавишу 1,2,3 или 4 соответственно, мы и попадём затем на нужную программу.

Контрольная сумма для этой программы: Sарифм=37027; S(2)=187.

  x0 x1 x2 x3 x4 x5 x6 x7 x8 x9
0x 9 ВП 3 П 4 3 П 0 ИП 0 К П 4 F L0 06
1x Cx РР П 90 10 4 П 0 ИП 0 1 - 1
2x 5 × 0 РР П 90 00 4 5 +
3x РР П 90 21 F L0 16 К ГРФ РР ИП 90 29 5
4x - F x<0 36 БП 99 31h 8Fh A0h ABh AEh
5x E7h AAh A8h FFh            
6x 32h 8Fh AEh A2h E2h AEh E0h A8h E7h A8h
7x E1h ABh AEh FFh   33h 93h A3h A0h A4h
8x A0h A9h 20h E7h A8h E1h ABh AEh FFh FFh
9x 34h 8Fh E0h A8h ACh A5h E0h EBh FFh 5
10x + 2 0 0 × П А К БП А      

Структура программы "Меню"

Адрес Выполняемые действия
00-05 Занесение в память числа 9000 и 3 – для счётчика цикла П0
06-09 Циклическое занесение в память с адресом 9001, 9002, 9003 значений 3,2,1 соответственно.
10-15 Занесение в П0 нового числа 4, очистка графического экрана
16-34 Циклическое задание начальных координат выводимых строчек и адресов, по которым они считываются
35-44 Переходим в графический режим, ожидаем нажатия пользователем клавиши. Если нажимает клавишу с кодом больше 5, ожидаем нового нажатия. Если нет – идём на адрес 99.
45-98 Текст меню
99-106 В зависимости от нажатой клавиши формируем адрес, куда нужно переходить программе.
 


Объединение программ

Если вы хотите объединить теперь все эти программы, можно сохранить их по отдельности на электронном диске А[постоянном] или В [съёмном], а затем загрузить поочерёдно в память со следующими параметрами:
"Меню" - на 0 страницу;
"Палочки" - на 2 страницу;
"Повтори число" - на 4 страницу;
"Угадай цифру" - на 6 страницу;
"Примеры" - на 8 страницу.

После этого для правильного вывода сообщений в программах нужно изменить содержание следующих адресов:
0200 - с "0" на "2";
0413 - с "0" на "4";
0607 - с "0" на "6";
0624 - с "0" на "6";
0632 - с "1" на "7";
0640 - с "0" на "6";
0650 - с "0" на "6";
0800 - с "0" на "8";
0838 - с "1" на "9";
0869 - с "1" на "9".

Полученную программу можно смело сохранить под новым именем (Не забудьте, что она состоит из целых 10 страниц). Теперь после запуска большой программы можно выбирать, какую из её составных частей требуется запустить, а не загружать каждую маленькую программу по отдельности.


Автор - Кушнарёва Л.

E-mail - K.Lidia(AT)list.ru

Опубликовано - http://mk_152.livejournal.com/2081.html



НПП "СЕМИКО" (383) 271-01-25 (многоканальный)