Реклама:

Добавим в начало программы следующие операторы:

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

Ql:

Удалим оператор «Открыть» для промежуточного файла. Заменим операторы «Писать промежуточный файл» с первого по n-й на следующий текст:

Установить Qx значение Q2

ВЕРНУТЬСЯ в вызывавшую программу с записью ПФ в общей области

Q2:

Установить Ох значение 0п+1 ВЕРНУТЬСЯ в вызывавшую программу с записью ПФ в общей области

Оп+1:

Заменим оператор «Закрыть» для промежуточного фа^ л а на следующий текст:

Установить Ох значение Оп+2

ВЕРНУТЬСЯ в вызывавшую программу с признаком КФ-ПФ в общей области

0п+2:

Убедимся, что за этой заключительной меткой ()п+2 следуют только СТОП и Программа конец. Затем заменим оператор СТОП на ВЕРНУТЬСЯ в вызывавшую программу.

Как изменится изложенная выше процедура, когда подлежащая инвертированию программа читает промежуточный файл?

Вернемся к прежней ситуации с программой составления отчета и поменяем ролями программы Р1 и Р2. Теперь Р2 будет инвертироваться относительно промежуточного файла ПФ. Этот новый случай иллюстрируется на рис. 7.20. _

Кинг Д. Создание эффективного программного обеспечения

Рис. 7.20. Инвертирование программы Р2.

При этой версии «системы» составления отчета, когда программа Р1 «пожелает» писать запись в промежуточный файл, она вызовет подпрограмму Р2в и передаст ей запись для ПФ в общую область. Итак, изменения в Р1 состоят в исключении оператора ОТКРЫТЬ для ПФ, замене операторов «Писать в ПФ» на вызовы Р2б и замене оператора ЗАКРЫТЬ ПФ на передачу признака КФ подпрограмме Р2б.

А как мы преобразуем Р2 в Р2б?

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

Описать Ох значение 1 (Ох = 01)

ПЕРЕЙТИ К 01, 02, 03 и т.д. в зависимости от значения Ох

01:

Далее мы можем исключить операторы ОТКРЫТЬ и ЗАКРЫТЬ для файла ПФ.Поскольку Р2 в первоначальной версии питает файл ПФ, нужно изучить операторы ЧИТАТЬ СИМВОЛ. В основном мы должны преобразовывать эти операторы в ВОЗВРАТЫ в вызывавшую программу Р1 с подразумеваемым требованием следующей «записи» ПФ. Первое чтение уместно в начале программы в соответствии с практикой хорошего констуирования. Но этот оператор «Читать» фактически не нуждается в преобразовании, потому что подпрограмма Р2б будет вызвана в первый раз именно с первой записью ПФ. Поэтому первый оператор «Читать» можно просто исключить. Впрочем первую «запись» из 1Ы все равно потребуется переместить в позицию первой строки.

Ну а как обстоит дело в отношении остальных операторов «Читать»?

Процедура на редкость похожа на ту, которая применялась к программе, писавшей в промежуточный файл. После исключения первого оператора «Читать» следующее и дальнейшее чтения заменяются так:

Установить Ох значение 02 ВЕРНУТЬСЯ в Р1 с (1М)

02: Поместить симовол из 1М в строку (Ш

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


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