Реклама:

В случае инвертирования программы Р1 в системе программ составления отчета программа Р1 пишет в промежуточный файл (ПФ). Поэтому операторы писать нужно преобразовать в операторы, которые передают символьные записи в Р2, а затем устанавливают условия для обращения к Р2. Работа Р1б возобновляется с очередного исполнимого оператора. Итак, операторы «Писать» с первого по п-й заменяются следующим образом:

Установить 0х значение 02 ВЕРНУТЬСЯ в Р2 с записью в (Ш 02:

Установить 0х значение 0п+1 ВЕРНУТЬСЯ в Р2 с записью в (Ш 0п+1:

Переменную состояния (Зх следует поместить в такую часть памяти, содержимое которой не будет изменяться в течение временного бездействия инвертированной программы. В Коболе такой является РАБОЧАЯ ПАМЯТЬ, а в языке PL/1 - СТАТИЧЕСКАЯ ПАМЯТЬ. Большинство современных языков программирования предусматривают тип памяти с таким свойством.

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

Другие изменения в программе Р1 будут состоять в исключении операторов «Открыть» и «Закрыть» для файла ПФ. Разумеется, мы не можем открыть и закрыть файл, который более не существует. Но что мы реально делаем, когда закрываем файл, который построен или заполнен нами? Фактически мы пишем признак Конец-файла. Поэтому оператор «Закрыть» для файла ПФ в программе Р1 на самом деле является еще одним оператором Писать и должен трактоваться именно в таком качестве с той разницей, что он передает программе Р2 не символьную запись, а признак Конца-файла.

Исправленное структурированное изложение для программы Pis выглядит так:

Описать Qx значение 1 (Qx = Q1) ПЕРЕЙТИ К Q1, или Q2, или Q3 в зависимости от значения Qx

Ql: Р1 поел

Открыть входной файл, Читать блок Р1 ТЕЛО повт пока не Конец-файла на входе ОБРАБОТКА БЛОКА поел Установить 1=1

ОБ.ТЕЛО повт пока не Конец-блока (500 символов) Установить Qx значение Q2 Вернуться в Р2 с записью в (IN) Q2: ОБ.ТЕЛО конец Читать блок ОБРАБОТКА БЛОКА конец Pl.ТЕЛО конец Закрыть входной файл Установить Qx значение Q3 Вернуться в Р2 с признаком КФ-ПФ в (IN) Q3; Вернуться в Р2 Р1 конец

Изменения в программе Р1, превращающие ее в Pis, выделены полужирным шрифтом и подчеркнуты.

Метку Q2: можно было бы столь же легко привязать к оператору ОБ.ТЕЛО повт, поскольку единственная функция оператора ОБ.ТЕЛО конец состоит в циклическом возврате к ОБ.ТЕЛО повт.

Метка Q3: никогда не должна достигаться, так как после передачи программе Р2 признака КФ весь процесс будет завершен. Следует также обратить внимание на то, что оператор СТОП преобразовывает оператор в ВЕРНУТЬСЯ в Р2. Здесь применен стандартный прием гарантии того, что обработка не останется «подвешенной» в подпрограмме. Он эквивалентен операторам GOBACK или RETURN, которые кодируются в конце программ уровня языка Ассемблера для передачи управления операционной системе.

Итак, подведем итоги для процесса инвертирования программ, разработанного нами ранее. Вспомним, что мы инвертировали программу относительно промежуточного файла, который она строит или заполняет. Позже мы увидим, что этот процесс несколько отличается для случая программы, которая читает промежуточный файл.


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