Пример 4. Работа с массивами.
Пусть требуется написать программу для ввода массива x из 100 вещественных чисел и вычисления суммы всех элементов этого массива:
Будем предполагать, что длина программы не превышает 200 ячеек, и поместим массив x, начиная с 200-ой ячейки памяти. Вещественную переменную S с начальным значением 0.0 и целую переменную i с начальным значением 100 разместим в конце текста программы. На рис. 3.4 приведён текст этой программы.
№ | Команда | Комментарий | |||
ВВВ | Read(x); массив x в ячейках 200¸299 | ||||
СЛВ | 008 | 008 | S := S+x[1] | ||
СЛЦ | 011 | Модификация команды в ячейке 2 | |||
ВЧЦ | 010 | 010 | 009 | n := n-1 | |
УСЛ | Следующая итерация цикла | ||||
ВЫВ | 008 | Write(S) | |||
СТОП | Стоп | ||||
<0.0> | Переменная S = 0.0 | ||||
Целая константа 1 | |||||
Переменная n с начальным значением 100 | |||||
Константа переадресации |
Рис 3.4. Текст программы четвёртого примера.
Рассматриваемая программа выделяется своим новым приёмом программирования и может быть названа самомодифицирующейся программой. Обратим внимание на третью строку программы. Содержащаяся в ней команда изменяет исходный код программы (команду в ячейке 2) для организации цикла перебора элементов массива. Модифицируемая команда рассматривается как целое число, которое складывается со специально подобранное константой переадресации. Согласно одному из принципов фон Неймана, числа и команды в учебной машине неотличимы друг от друга, а, значит, изменяя числовое представление команды, мы можем изменять и её суть.
У такого метода программирования есть один существенный недостаток: модификация кода программы внутри её самой может привести к путанице и вызвать появление ошибок. Кроме того, самомодифицирующуюся программу трудно понимать и вносить в неё изменения. В нашей учебной машине это, однако, единственный способ обработки массивов. В других архитектурах ЭВМ, с которыми мы познакомимся несколько позже, есть и другие, более эффективные способы работы с массивами, поэтому метод с модификацией команд не используется.
Дата добавления: 2015-10-05; просмотров: 740;