Программа с преобразованиями
Допустим, что значения площади круга нужно определить только для
некоторых ранее вычисленных значений радиуса, - скажем, записанных
в ячейках памяти № 21-80 (рис. 12). Тогда, как и прежде, в ячейку
№ 20 помещаем я:, а в ячейки № 81 и 82 -специальные числа 0-01-01-00
и 3-80-80-19, значение которых выяснится в дальнейшем.
Рис. 12. Числа в "машинной памяти".
Вычисления будем вести по следующей программе:
Номер команды |
Шифр команды |
Действие по команде |
1 |
3-21-21-19 |
Умножение |
2 |
3-19-20-19 |
Умножение |
3 |
7-19-00-02 |
Печатание |
4 |
1-01-81-01 |
Сложение |
5 |
8-01-82-01 |
Сравнение |
6 |
9-00-00-00 |
Остановка |
По первой команде вычисляется квадрат первого значения радиуса
(из ячейки № 21), который затем по второй команде умножается
на п. По третьей команде вычисленное значение площади
круга заносится в таблицу окончательных результатов.
Теперь нужно повторить те же самые операции, но уже над новым значением
радиуса, хранящимся не в 21-й, а в 22-й ячейке. Для этого можно
было бы включить в программу в качестве четвертой команды 3-22-22-19
(возвести новое значение радиуса в квадрат) с последующим повторением
второй и третьей команд без изменения. Затем должна следовать команда
3-23-23-19 (возвести в квадрат значение радиуса из ячейки № 23)
и т. д.
При большом количестве различных значений радиуса программа получалась
бы очень громоздкой. Легко сообразить, что вводимые вновь команды
3-22-22-19, 323-23-19,... могут быть получены из первой команды
3-21-21-19 последовательным прибавлением к ней числа 0-01-01-00,
хранящегося в ячейке № 81:
Таким образом, посредством арифметических действий над числом,
изображающим команду, может быть осуществлено систематическое изменение
ее адресов (в данном случае первого и второго), а если потребуется,
то и кода действия. Такая операция изменения адреса (называемая
переадресацией) как раз и осуществляется по четвертой
команде рассматриваемой программы. При этом число, изображающее
новую (переадресованную) команду, направляется в ту же ячейку №
1, где хранилась исходная команда (переадресованную команду можно
было бы поместить и в другую ячейку памяти).
По пятой команде выполняется сравнение переадресованной
команды (числа) из ячейки № 1 с командой 3-80-80-19, специально
введенной для этого в ячейку № 82. Пока первый и второй адреса переадресованной
команды не больше 80 (использованы еще не все значения радиуса,
хранящиеся в ячейках № 21-80), согласно команде сравнения осуществляется
возврат к началу программы, т. е. к исполнению переадресованной
первой команды. Когда же все значения радиуса будут исчерпаны, команда
примет вид 3-81-81-19, т. е. превзойдет число в ячейке № 82, и по
команде сравнения машина перейдет к выполнению следующей (шестой)
команды, означающей остановку.
|