Задачи, разбираемые ниже, дополняют примеры, описанные ранее для "Крохи". Сравнение показывает, что на "Крохе-М" (в отличии от "Крохи") уже можно запрограммировать более или менее реальные задачи.
1. Написать программу вычисления пути, пройденного телом при
равноускоренном движении, по формуле
S = V0*T + A*T*T/2
Р Е Ш Е Н И Е
Вычисления будем вести по формулам:
r = V0*T; S = A*T*T/2 + r
Адрес | Команда | Расшифровка | Комментарий |
0000 | 101 1110 1100 1010 | (14) * (12) ==> (10) | V0 * T ==> r |
0001 | 101 1101 1100 1011 | (13) * (12) ==> (11) | A * T ==> S |
0010 | 101 1011 1100 1011 | (11) * (12) ==> (11) | S * T ==> S |
0011 | 010 1011 1111 1011 | (11) / (15) ==> (11) | S / 2 ==> S |
0100 | 001 1011 1010 1011 | (11) + (10) ==> (11) | S + r ==> S |
0101 | 111 1100 1011 1011 | cтоп; вывод (12) и (11) | вывод T и S (2 р.) |
0110 | не ис- |
0111 | поль- |
1000 | зует- |
1001 | ся |
1010 | r | | рабочая ячейка |
1011 | S | | результат |
1100 | T | | исход-
|
1101 | A | | ные |
1110 | V0 | | данные |
1111 | 000 0000 0000 0010 | 2 | константа 2 |
2. Написать программу нахождения наибольшего из трех чисел.
Р Е Ш Е Н И Е 1
Обозначим исходные числа a, b и c, а результат выведем на экран.
Адрес | Команда | Расшифровка | Комментарий |
0000 | 110 1111 1110 0010 | если (15)>(14), идти к 2 | сравнить a и b |
0001 | 110 1110 1101 0100 | если (14)>(13), идти к 4 | сравнить b и c |
0010 | 110 1111 1101 0101 | если (15)>(13), идти к 5 | сравнить a и c |
0011 | 111 1101 1101 1101 | cтоп; вывод (13) | вывод c |
0100 | 111 1110 1110 1110 | cтоп; вывод (14) | вывод b |
0101 | 111 1111 1111 1111 | cтоп; вывод (15) | вывод a |
0110 | не |
0111 | |
1000 | ис- |
1001 | поль- |
1010 | зу- |
1011 | ет- |
1100 | ся |
1101 | c | | исход- |
1110 | b | | ные |
1111 | a | | данные |
Р Е Ш Е Н И Е 2
Обозначим исходные числа a, b и c, а результат - d.
Адрес | Команда | Расшифровка | Комментарий |
0000 | 110 1111 1110 0011 | если (15)>(14), идти к 3 | сравнить a и b |
0001 | 000 1110 0000 1100 | (14) ==> (12) | b ==> d |
0010 | 100 0000 0000 0100 | безусловный переход к 4 | обход команды |
0011 | 000 1111 0000 1100 | (15) ==> (12) | a ==> d |
0100 | 110 1100 1101 0110 | если (12)>(13), идти к 6 | сравнить d и c |
0101 | 000 1101 0000 1100 | (13) ==> (12) | c ==> d |
0110 | 111 1100 1100 1100 | cтоп; вывод (12) | вывод d |
0111 | не |
1000 | ис- |
1001 | поль- |
1010 | зу- |
1011 | ется |
1100 | d | | результат |
1101 | c | | исход- |
1110 | b | | ные |
1111 | a | | данные |
3. Составить программу вычисления выражения Y = 100 / [(X-1) (X-3)]. Предусмотреть проверку значения X.
Р Е Ш Е Н И Е
Если X = 1, договоримся выводить на дисплей три 1, а если
X = 3, то три числа 3. Во всех остальных случаях будут выведены
X и Y.
Адрес | Команда | Расшифровка | Комментарий |
0000 | 100 1100 1110 0111 | если (12)=(14), идти к 7 | сравнить X и 1 |
0001 | 100 1100 1101 1000 | если (12)=(13), идти к 8 | сравнить X и 3 |
0010 | 011 1100 1110 1010 | (12) - (14) ==> (10) | X - 1 ==> r |
0011 | 011 1100 1101 1011 | (12) - (13) ==> (11) | X - 3 ==> Y |
0100 | 101 1011 1010 1011 | (11) * (10) ==> (11) | Y * r ==> Y |
0101 | 010 1111 1011 1011 | (15) / (11) ==> (11) | 100 / Y ==> Y |
0110 | 111 1100 1011 1011 | cтоп; вывод (12), (11) | вывод X, Y |
0111 | 111 1110 1110 1110 | cтоп; cтоп; вывод (14) | вывод 1 |
1000 | 111 1101 1101 1101 | cтоп; cтоп; вывод (13) | вывод 3 |
1001 | не используется |
1010 | r | | рабочая ячейка |
1011 | Y | | результат |
1100 | X | | аргумент |
1101 | 000 0000 0000 0011 | 3 | константа |
1110 | 000 0000 0000 0001 | 1 | константа 1 |
1111 | 000 0000 0110 0100 | 100 | константа 100 |
4. Написать программу вычисления n!
(сравните с программой задачи N 6 для "Крохи")
Р Е Ш Е Н И Е
Обозначим k рабочую переменную, которая является текущим
множителем для факториала и меняется от 1 до n. Начальные значения k и n! программа задает равными 1.
В ячейке 13 формируется значение n + 1, которое является верхней границей цикла (цикл будет выполняться, пока k < n+1 и, следовательно, завершится после умножения на n).
Адрес | Команда | Расшифровка | Комментарий |
0000 | 000 1111 0000 1100 | (15) ==> (12) | 1 ==> k |
0001 | 000 1111 0000 1101 | (15) ==> (13) | 1 ==> n! |
0010 | 001 1110 1111 1011 | (14) + (15) ==> (11) | n + 1 ==> r |
0011 | 101 1101 1100 1101 | (13) * (12) ==> (13) | n! * k ==> n! |
0100 | 001 1100 1111 1100 | (12) + (15) ==> (11) | k + 1 ==> k |
0101 | 110 1011 1100 0011 | если (11)>(12), идти к 3 | k < r ? |
0110 | 111 1110 1101 1101 | стоп; вывод (14), (13) | вывод n, n! |
0111 | не |
1000 | ис- |
1001 | поль- |
1010 | зуется |
1011 | r = n + 1 | | рабочая ячейка |
1100 | k | | рабочая ячейка |
1101 | n! | | результат |
1110 | n | | исходные данные |
1111 | 000 0000 0000 0001 | 1 | константа 1 |
5. Составить программу вычисления суммы одномерного массива из 5
элементов.
Р Е Ш Е Н И Е
Адрес | Команда | Расшифровка | Комментарий |
0000 | 000 0110 0000 0010 | (6) ==> (2) | начальная команда |
0001 | 000 1111 0000 1001 | (15) ==> (9) | 0 ==> S |
0010 | не имеет значения | [команда формируется программой] |
0011 | 001 1000 0010 0010 | (8) + (2) ==> (2) | приращение адреса |
0100 | 110 0111 0010 0010 | если (7)>(2), идти к 2 | прошли А5? |
0101 | 111 1001 1001 1001 | стоп; вывод (9) | вывод S |
0110 | 001 1010 1001 1001 | начальная команда суммирования (элемент А1) |
0111 | 001 1111 1001 1001 | конечная команда суммирования (после А5) |
1000 | 000 0001 0000 0000 | приращение адреса |
1001 | S | | результат |
1010 | A1 | | ис- |
1011 | A2 | | ход- |
1100 | A3 | | ные |
1101 | A4 | | дан- |
1110 | A5 | | ные |
1111 | 000 0000 0000 0000 | 0 | константа 0 |