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


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

Улучшенная версия набора "Арифметика 1".

Напоминаю, что программы "Палочки", "Повтори число", "Примеры" для ПМК были опубликованы в книге "Пять вечеров с микрокалькулятором" И.Д. Данилова и Г.В. Славина.




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

При выводе результата больше не отображаются ненужные промежуточные результаты расчета в ячейках Y,Z,T. После вывода результата программа сразу обрабатывает новый ввод, а не переходит в начало, как в "Палочках 1". Также немного уменьшен размер программы.

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

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

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

Адрес Выполняемые действия
00-08 Подготовка к работе: вывод сообщения в строке комментариев, заполнение нулями стека, останов программы для ввода.
11-22 Проверка введённого числа. Если число равно нулю, отрицательное и/или дробное, то возвращаемся к началу программы. Далее, если оно больше 8, то для дальнейшей проверки переходим на адрес 33, если нет, идём дальше.
22-32 Построение числа из единиц и его вывод
33-49 Проверка ввода пользователя и подсчет числа единиц
50-57 Новая подпрограмма - для очищения экрана и вывода очередного результата
60-85 Текст, выводящийся в строке комментариев.

См. также структуру программы "Палочки 1".




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

Теперь программа работает по принципу обучения: всегда начинает с однозначного числа и усложняет задание, увеличивая число разрядов, если пользователь делает успехи. "Молодец" выводится только тогда, когда пользователь дойдет до 8-разрядного числа, затем опять начинаем с 1 разряда.

Правда, всё это пошло не на пользу размеру программы, который увеличился ровно на одну строчку.

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

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

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

Адрес Выполняемые действия
00-01 Инициализация новой переменной, хранящейся в П0 - количества разрядов выводимого числа
02-09 Очистка экрана и генерация случайного числа, умноженного на 10 в степени содержимого П0
10-20 Проверяем равенство введённого пользователем числа (если неравенство - переходим на вывод ошибки), увеличиваем П0, проверяем, не превысило ли П) допустимого значения (если это произошло, переходим на вывод сообщения "Молодец"), переходим на генерацию нового СЧ
21-32 Вывод сообщения, останов, переход на начало, чтобы П0 начало набираться заново от 1 до 8
33-35 Вывод ERROR'а, останов, переход на генерацию нового СЧ
40-48 Сообщение "Молодец".

Для сравнения - см. структуру программы "Повтори число 1".




Программа "Угадай число"

Теперь перед запуском программы пользователь должен вводить такое n, чтобы загаданное число было меньше 10n (в старой версии n=1, поэтому она и называлась "угадай цифру"). При этом число попыток теперь рассчитывается автоматически.

Если ввести 0, число для угадывания окажется тождественно равным нулю, а количество попыток - единице, что вполне логично.

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

  x0 x1 x2 x3 x4 x5 x6 x7 x8 x9
0x П 2 F x≥0 75 9 - F x<0 75 ИП 2 B↑ 2
1x F lg ÷ 1 + П 3 ИП 2 F 10x К СЧ × K [x]
2x П 0 1 0 5 РР П 90 26 ПП 55 С/П
3x ИП 0 - F x≠0 60 F x<0 70 1 0 0 РР П
4x 90 26 ПП 55 С/П F L3 30 1 2 0
5x РР П 90 26 С/П FFh 0 B↑ B↑ B↑ В/О
6x 0 7 8 РР П 90 26 Cx С/П БП 00
7x 0 9 4 БП 39 K - БП 00 E3h A3h
8x A0h A4h A0h ADh AEh 2Dh A2h EBh A8h A3h
9x E0h EBh E8h FFh ACh ADh AEh A3h AEh FFh
10x ACh A0h ABh AEh FFh E3h A3h A0h A4h A0h
11x A9h 20h E7h A8h E1h ABh AEh FFh FFh FFh
12x AFh E0h AEh A8h A3h E0h EBh E8h FFh  

Структура программы "Угадай число"

Алгоритм почти не изменился по сравнению с программой "Угадай цифру".

Разве что в П3 теперь хранится не константа 4, а число, рассчитываемое в адресах 08-14, а случайное число умножается не на 10, а на 10ИП 2 (см. адреса 15-16). Кроме того, изменено сообщение "Угадай цифру [4 попытки]" на "Угадай число".




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

Теперь пользователь может выбирать, на какое арифметическое действие примеры будут ему предлагаться, разрядность чисел [от 1 до 3] и количество примеров [по-прежнему, от 5 до 100].

Если предлагается пример на деление, необходимо вписать целую часть результата деления.

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

  x0 x1 x2 x3 x4 x5 x6 x7 x8 x9
0x БП 99 8Ah AEh ABh 2Dh A2h AEh 20h AFh
1x E0h A8h ACh A5h E0h AEh A2h 20h 2Dh 20h
2x 3Fh FFh 82h A0h E8h A0h 20h AEh E6h A5h
3x ADh AAh A0h 21h FFh 31h 2Eh 2Eh 33h FFh
4x 84h A5h ABh A5h ADh A8h A5h FFh FFh FFh
5x 93h ACh ADh AEh A6h A5h ADh A8h A5h FFh
6x 82h EBh E7h A8h E2h A0h ADh A8h A5h FFh
7x 91h ABh AEh A6h A5h ADh A8h A5h FFh FFh
8x 28h 30h 3Dh 3Bh 31h 3Dh 59h 29h FFh FFh
9x 2Bh FFh 2Dh FFh 78h FFh 25h FFh FFh FFh
10x БП 10 0 B↑ B↑ B↑ В/О К - БП 00
11x 4 П 0 0 3 0 П А 0 П 6    
12x ИП 0 1 0 × ИП А + РР П 90 26 0
13x 8 0 РР П 90 26 ПП 02 С/П К П 6  
14x F x≠0 46 1 - F x=0 07 F L0 20    
15x ИП 1 ИП 2 ИП 3 ИП 4 + + + F x≠0 07  
16x 0 0 2 РР П 90 26 ПП 02 С/П П 0
17x П 7 5 - F x>0 60 9 6 - F x<0 60
18x Cx П 6 0 3 5 РР П 90 26 ПП 02
19x С/П П С /-/ F x<0 73 3 + F x≥0 73  
20x К СЧ 5 × K [x] F x≠0 00 П D К ИП D × F x≠0
21x 00 2 × 0 8 8 + П Е ИП D 2
22x × 0 2 7 8 + П D      
23x К СЧ ИП С F 10x × K [x] К СЧ ИП С F 10x × K [x]
24x ИП Е РР П 90 26 Cx С/П F O F O К ПП D -
25x F x=0 53 К ИП 6 F L0 00 ИП 6 ИП 7 ÷ 5 ×
26x K [x] F x=0 65 1 + 0 2 2 РР П 90
27x 26 Cx + С/П Р БП 00 00      
28x + В/О - В/О × В/О ÷ K [x] В/О  

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

Адрес Выполняемые действия
002-099 Выводимый на экран текст
102-106 Подпрограмма очистки экрана
110-117 Инициализация переменных
120-147 Диалог с пользователем для заполнения регистров П1-П4 с помощью косвенной адресации из регистра П6 (напоминаю, что при косвенном обращении к этому регистру его содержимое увеличивается на 1). Сюда же входит вывод соответствующих сообщений (120-134), проверка ввода (140-145)
150-158 Ещё одна проверка: если пользователь всюду ввел нули, то он не выбрал ни одного арифметического действия и следует вывести ошибку
160-179 Ввод и проверка числа примеров (см. аналогичный код в "Примерах 1")
180-198 Инициализация П6 (теперь это будет число правильно решенных примеров), ввод и проверка разрядности чисел для примеров
200-210 Создание случайного числа от 1 до 4, символизирующего номер действия, которое будет предложено пользователю в очередном примере
211-225 Инициализация ПЕ и ПD, от которого зависит выводимое сообщение (+,-,×,÷) при выводе очередного задания, и подпрограмма (одна из содержащихся в адресах 280-288), на которую нужно будет впоследствии переходить для проверки правильности решения пользователя
230-239 Создание чисел нужной разрядности для очередного примера
240-245 Вывод сообщения, зависящего от ПЕ и останов
246-254 Проверка правильности решения пользователя и переход к созданию нового примера (если число примеров не кончилось)
255-276 Расчёт и вывод оценки (см. аналогичный код в "Примерах 1")
280-288 Подпрограммы сложения, вычитания, умножения и деления с округлением



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

Теперь пользователь выбирает нужный пункт меню при помощи клавиш "Вверх", "Вниз", и "Ввод". Выбранный пункт меню обводится рамкой.

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

  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 К ГРФ 0 П А П В Р ПП
4x 01 10 БП 99 FFh 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  
10x ПП 25 ПП 10 К ГРФ БП 00      
11x ИП А 0 РР П 90 00 1 4 B↑ 1 2
12x 8 РР П 90 14 В/О РР ИП 90 29 3 3
13x - F x=0 42 ИП В 1 + 2 0 0 ×
14x П А К БП А 3 - F x≠0 65 1 - F x=0 25
15x ПП 10 ИП А 1 5 + П А 1 5 ÷
16x П В БП 80     ПП 10 ИП А 1 5
17x - П А 15 ÷ П В          
18x ИП В F x≥0 92 4 - F x<0 88 В/О Cx П А
19x П В В/О 4 5 П А 3 П В В/О    

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

Адрес Выполняемые действия
00-35 См. те же адреса программы "Меню 1"
36-43 Обнуление номера выбранного пункта (ПВ) и координаты рамки (ПА), запуск подпрограммы рисования рамки и переход на адрес 99
45-98 Текст, выводимый на графический экран; см. те же адреса программы "Меню 1"
100-106 Основная часть программы.
Вызов подпрограммы рисования рамки, затем подпрограммы обработки нажатий клавиш пользователем; вывод на графический экран и зацикливание.
110-124 Подпрограмма рисования рамки.
Извлекает из регистра А координату рамки, рисует рамку высотой 14 (адреса 115-116) и длинной 128 (адреса 118-120).
125-197 Подпрограмма обработки нажатий клавиш пользователем.
Проверяет равенство кода нажатой клавиши коду клавиши "Вверх", "Вниз" или "Ввод". Если ни одна из этих клавиш не нажата, зацикливается. Если нажата клавиша "Вверх"/"Вниз" - увеличивает/уменьшает ПА на 15, а ПВ - на 1 (рассчитывается от значения ПА). Если ПВ больше 3 или меньше 0, корректирует значение ПВ. Если нажата клавиша "Ввод", переходит на адрес выбранной программы из набора "Арифметика 2".



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

См. соответствующий пункт в "Арифметике 1".

Теперь после загрузки всех программ на нужные страницы (те же, что и в "Арифметике 1") нужно изменить следующие адреса:
0200 - с "0" на "2";
0423 - с "0" на "4";
0621 - с "1" на "7";
0636 - с "1" на "7";
0647 - с "1" на "7";
0660 - с "0" на "6";
0670 - с "0" на "6";
0912 - с "0" на "8";
0929 - с "0" на "8";
0960 - с "0" на "8";
0982 - с "0" на "8";
1013 - с "0" на "8";
1021 - с "0" на "1";
1022 - с "2" на "0";
1065 - с "0" на "8";

Получившаяся после объединения программа занимает 11 страниц.

То, что после запуска из общего меню программа "Угадай число" выдает "ERROR" - нормально и причина очевидна из структуры программы. Следует после этого ввести разрядность загадываемого числа и пользоваться программой как обычно.


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

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



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