Реклама:

Итак, требуются следующие действия по изменению:

Удалить оператор Открыть. Заменить оператор Закрыть на оператор Писать запись Конец-файла. Заменить 1-й, 2-й,... и n-й операторы Писать на:

N = 2; RETURN; L(2):

N = 3; RETURN; L(3);

N = n+1; RETURN; L(n+1):

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

Эти процедуры инвертирования кодирования могут ре-ализовываться и в большинстве других современных процедурных языках аналогично тому, как они описаны для Кобола и ПЛ/1. В сущности, для любого языка процедура инвертирования быстро становится настолько обычным делом, что превращается в объект для автоматизации.

12.4. Как обращаться с операторами GOTO

Эти операторы GOTO претерпели много взлетов и падений в своей популярности подобно длинным прическам молодежи. Когда Э.Дейкстра в начале шестидесятых годов написал свое знаменитое письмо в АСМ, озаглавленное «о вреде оператора GO ТО» [3], он нанес основательный вред вездесущему механизму ветвления.

Говорят, что «плохой работник всегда будет обвинять свои инструменты». Значительная доля брака за программистские беды обрушивалась на злосчастные операторы GOTO зачастую вследствие дремучей неопытности программистов.

Вне всяких сомнений отсутствие ограничений при использовании операторов GOTO повлечет за собой появление замысловатого кода, который трудно понимать и невозможно сопровождать. Но операторы GOTO необходимы. При полном . отказе от каких-либо операторов ветвления большинство исходных программ оказались бы недопустимо длинными. К тому же, если основные конструкции структурного программирования используются так, как описывалось в этой главе, то возникнет много неявных, мимолетных применений GOTO. Например, все конструкции повторения содержат операторы GOTO, некоторые из которых упрятаны в конструкции, тогда как другие видны сразу. Итак, если операторы GOTO неизбежны, то какими правилами следует руководствоваться при их использовании?

Если программа сконструирована хорошо, с применением метода наподобие методики Джексона, то потребность в GOTO будет минимизирована.

Ниже описываются некоторые ситуации конструирования, в которых имеются законные основания для применения операторов GOTO.

В ситуации отката (см. гл. 5), когда исходное решение относительно входных данных оказалось ложным, программа должна вернуться «по своим следам». Некоторые языки, например Кобол, позволяют осуществить ветвление в другую часть программы, воспользовавшись специальной конструкцией, например, ВЫПОЛНИТЬ. Однако было бы очень неудобно пользоваться в Коболе оператором ВЫПОЛНИТЬ для прослеживания пути в программе отката. Дело в том, что потребовалось бы применить еще один оператор GOTO, а возможно, даже еще один оператор ВЫПОЛНИТЬ, чтобы обеспечить продолжение хода программы после завершения блока инструкций, на который она ответвилась. Такая необходимость возникла бы потому, что обычно оператор ВЫПОЛНИТЬ осуществляет возврат в место, откуда произошло ветвление, когда инструкции, на которые программа ответвилась, уже выполнены. Между тем в ситуации отката мы хотим остаться в той части программы, на которую «ответвились». Поэтому в такой ситуации часто наилучший способ прослеживания этапов состоит в использовании GOTO.


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