Реклама:

Кодирование инвертирования на Коболе

Переменная состояния должна находиться в ячейке памяти, которая будет сохранять установленное в ней значение, пока инвертированная программа «выйдет из игры» на время между обращениями к ней. В языке Кобол такая память называется рабочей и обозначается специальным номером уровня 77 в первых двух столбцах. Поэтому оператор инициализации переменной состояния (ЗБ имеет вид

77 ОБ ШАБЛОН 99 ЗНАЧЕНИЕ 1

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

Затем в начальной входной точке программы вставляются следующие операторы:

00. ПЕРЕЙТИ К 01, 02, 03,...,0п В ЗАВИСИМОСТИ ОТ ОБ 01.

Первый оператор предписывает программе ответвление (переход) на метку (31, (32,...,(Зп в зависимости от переменной состояния (ЗБ. Непосредственно за ним следует метка (31, потому что начальное значение (ЗБ равно 1 и при первом обращении к программе мы хотим начать с начала, как в хорошем повествовании!

Фактическое количество п меток ветвления зависит от числа операторов ввода и вывода в программе.

Эти операторы нужно разместить в начале программы независимо от того, инвертирована ли она относительно входного или выходного файла.

Инвертирование относительно входного файла

Когда программа инвертируется относительно входного файла, следует рассмотреть операторы Читать, Открыть и Закрыть для этого файла.

При первом обращении к инвертированной программе поступит первая входная запись, так что первое чтение можно исключить. Поэтому действия по изменению состоят в следующем:

Удаляются операторы Открыть, Закрыть и первый оператор Читать для входного файла. Оператор СТОП заменяется на оператор:

ПОМЕСТИТЬ 2 В QS. ВЕРНУТЬСЯ. Q2.

ПОМЕСТИТЬ 3 В QS. ВЕРНУТЬСЯ. Q3.

ПОМЕСТИТЬ п В QS. ВЕРНУТЬСЯ. Qn.

Каждый оператор ВЕРНУТЬСЯ обеспечивает возврат в обратившуюся программу и требует новой входной записи. Поэтому ВЕРНУТЬСЯ не только передаст управление в вызывавшую программу, но и установит наличие ячейки общей памяти, куда можно поместить следующую запись. Вызывающая программа должна представить в инвертированную программу признак Конец-файла в подходящий момент, т.е. когда больше не останется входных записей.

Инвертирование относительно выходного файла

Когда программа инвертируется относительно выходного файла, следует рассмотреть операторы Открыть, Закрыть и Читать для этого файла. При первом обращении к вызываемой программе требуется первая запись. Кроме того, нужно посмотреть, что произойдет на самом деле при закрывании выходного файла. В этот момент записывается признак Конец-файла для данного файла. Поэтому оператор Закрыть следует рассматривать как последний оператор Писать.

Итак, нужны следующие действия по изменению: Удалить оператор Открыть. Заменить оператор Закрыть на оператор Писать запись Конец-файла. Заменить оператор СТОП на ВЕРНУТЬСЯ-Заменить 1-й, 2-й,..., и n-й операторы Писать на:

ПОМЕСТИТЬ 2 В QS. ВЕРНУТЬСЯ. Q2.

ПОМЕСТИТЬ 3 В QS. ВЕРНУТЬСЯ. Q3.

ПОМЕСТИТЬ п+1 В QS. ВЕРНУТЬСЯ. Qn+1.


⇐ Предыдущая страница| |Следующая страница ⇒