Допустим, что значения площади круга нужно определить только для некоторых ранее вычисленных значений радиуса, - скажем, записанных в ячейках памяти № 21-80 (рис. 12). Тогда, как и прежде, в ячейку № 20 помещаем я:, а в ячейки № 81 и 82 -специальные числа 0-01-01-00 и 3-80-80-19, значение которых выяснится в дальнейшем.
Вычисления будем вести по следующей программе:
Номер команды | Шифр команды | Действие по команде |
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, и по команде сравнения машина перейдет к выполнению следующей (шестой) команды, означающей остановку.
2i.SU ©® 2015