Улучшенная версия набора "Арифметика 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
|