Математика учит предсказывать и управлять

Программа с преобразованиями

Допустим, что значения площади круга нужно определить только для некоторых ранее вычисленных значений радиуса, - скажем, записанных в ячейках памяти № 21-80 (рис. 12). Тогда, как и прежде, в ячейку № 20 помещаем я:, а в ячейки № 81 и 82 -специальные числа 0-01-01-00 и 3-80-80-19, значение которых выяснится в дальнейшем.

3220-1.jpg
Рис. 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:

3220-2.jpg

Таким образом, посредством арифметических действий над числом, изображающим команду, может быть осуществлено систематическое изменение ее адресов (в данном случае первого и второго), а если потребуется, то и кода действия. Такая операция изменения адреса (называемая переадресацией) как раз и осуществляется по четвертой команде рассматриваемой программы. При этом число, изображающее новую (переадресованную) команду, направляется в ту же ячейку № 1, где хранилась исходная команда (переадресованную команду можно было бы поместить и в другую ячейку памяти).

По пятой команде выполняется сравнение переадресованной команды (числа) из ячейки № 1 с командой 3-80-80-19, специально введенной для этого в ячейку № 82. Пока первый и второй адреса переадресованной команды не больше 80 (использованы еще не все значения радиуса, хранящиеся в ячейках № 21-80), согласно команде сравнения осуществляется возврат к началу программы, т. е. к исполнению переадресованной первой команды. Когда же все значения радиуса будут исчерпаны, команда примет вид 3-81-81-19, т. е. превзойдет число в ячейке № 82, и по команде сравнения машина перейдет к выполнению следующей (шестой) команды, означающей остановку.

Вверх