Реклама:

Удалить первый оператор «Читать» для промежуточного файла.

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

Установить Qx = Q2

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

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

ВЕРНУТЬСЯ в вызывавшую программу с общей областью, идентифицированной для приема требуемой записи промежуточного файла 0п+1:

Удалить оператор «Закрыть» для промежуточного файла.

Заменить оператор СТОП на ВЕРНУТЬСЯ в вызывавшую программу.

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

В этом разделе мы описали процедуру инвертирования одной программы в простую совокупность двух последовательных процессов. Часто из контекста проблемы бывает очевидно, какую из двух программ нужно инвертировать. Если одна из программ явно представляет собой управляющий процесс, то вторая программа подлежит инвертированию и должна стать подпрограммой. Если же ситуация неясная, то следует выбрать ту программу, которая легче поддается инвертированию. Другое решение, часто принимаемое в таких ситуациях, состоит в том, чтобы помещать все операторы открытия и закрытия файлов в управляющей основной программе, а не в инвертированной программе. Это решение нередко бывает предметом соглашения и делом вкуса.

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

7.5. Инвертирование нескольких программ

Рассмотрим снова решение, реализованное в программе составления отчета по ресторану и проиллюстрированное на рис. 7.16.

В этой системе единственными реальными файлами являются файлы ЗАКАЗЫ и ОТЧЕТ. Шп и и^Б - это промежуточные файлы, введенные для разрешения перемешанных столкновений. Как нам использовать процесс инвертирования программ для исключения этих файлов и одновременно повысить эффективность системы составления отчета по ресторану?

Каждую программу РШп можно инвертировать относительно соответствующего файла и тем самым превратить ее в подпрограмму для РА. В таком случае РА стала бы вызывать подходящую подпрограмму PWns всякий раз, когда нужно передать некую запись из заказа соответствующему «файлу» ^п. Тогда в подпрограмме РШпб на каждом месте, где раньше находился оператор «Читать \Мп», появился бы оператор ВЕРНУТЬСЯ в РА. Потребовались бы также и все другие уже описанные изменения для инвертирования программы относительно файла, который она читает. Изменения в программе РА состояли бы в следующем:

РА поел

Открыть файл заказов, Читать элемент заказа

РАТЕЛО повт пока не КФ-заказов или требование отчета

ОБРАБОТКА ЭЛЕМЕНТА ЗАКАЗА поел

Вызвать РЦпб с записью элемента заказа Читать элемент заказа ОБРАБОТКА ЭЛЕМЕНТА ЗАКАЗА конец РАТЕЛО конец Закрыть файл заказов (Послать признак «Конец-файла» во все программы РУп)


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