Реклама:

СТОП РА конец

Как обычно, все изменения по сравнению с исходным вариантом РА выделены полужирным шрифтом и подчеркнуты.

Когда выполняется оператор «Вызвать», идентификатор работника (официанта или официантки) в записи элемента заказа служит для идентификации подходящей версии программы РШп. Затем запись передается этой подходящей подпрограмме, и инвертированная программа перезапускается в соответствии с переустановкой ее собственной переменной состояния (^хп, выполненной при предыдущем вызове этой подпрограммы. Каждая отдельная версия РШ будет обладать своей собственной переменной С^хп, и конк-

13-1068

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

Как читатель мог убедиться, оператор «Закрыть файлы \Уп» в РА был заменен на оператор «Послать признак «Конец-файла» во все программы РШп». Это действие программа РА должна предпринять либо в результате достижения Конца-файла ЗАКАЗА, либо вследствие решения администрации ресторана, что теперь настал момент, когда она желает получить отчет.

Каждая программа РШ будет инвертироваться обычным способом. Будут исключаться операторы «Открыть» и «Закрыть» для файлов \¥п. Всякое последующее чтение будет заменено на переустановку переменной состояния и оператор «Вернуться в РА». Потребуется также общая область для пересылок в РА и получения из Шп очередной записи элемента заказа.

Кроме того, как обычно бывает в инвертированной программе, начальное значение переменной состояния будет устанавливаться в начале программы и оператор «ПЕРЕЙТИ К в зависимости от» будет помещен в качестве первой исполнимой инструкции, за которой непосредственно следует метка (21:.

В нашей частной проблеме отчета по ресторану такое инвертирование трех программ Р\У применяется весьма успешно. Мы исключаем три последовательных файла Ш1, ШЗ и Ш4, и к программе РА будут привязаны три подпрограммы с именами РШ1, РШЗ и Р\У4. После завершения обработки всего входного файла ЗАКАЗОВ окажутся заполненными все счетчики в программах РШ и можно будет сразу же получить отчет.

Однако как быть, если в ресторане 100 официантов и официанток? Нам потребовалось бы в памяти 100 копий программы РШ!

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

Нужны ли нам в действительности 100 копий? Мы уже отмечали, что все программы Р\У в сущности идентичны. Разумеется, логика каждой версии программы однакова. Эти версии отличаются только идентификацией того, какому конкретному работнику принадлежат обрабатываемые записи элементов заказов, а также накапливаемыми количествами этих элементов.

Для каждой версии РШ нужна своя переменная состояния Ох. Этот принцип можно обобщить, перейдя к отдельному хранению переменных для каждой версии программы. К совокупности этих переменных можно обращаться как к «вектору состояний».


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