Cтраница 2
В процессе выполнения программы переменная типа метки может получать различные значения, поэтому при выполнении оператора перехода может происходить передача к различным операторам программы. [16]
При разработке АЛГОЛ-программ значительные трудности возникают в связи с возможностью побочного эффекта процедур и сложностью процессов выполнения операторов перехода и тел процедур. Это часто приводит к ошибкам в АЛГОЛ-программах. При автоматическом переводе на язык машины обнаруживаются без труда лишь некоторые синтаксические ошибки. Надежная работа трансляторов позволяет не сомневаться в том, что полученная программа соответствует своему прототипу - АЛГОЛ-программе. Остается не устраненным сомнение в том, что сама АЛГОЛ-про-грамма соответствует математической формулировке метода решения задачи. Поэтому вместо отладки программы на машине пользование АЛГОЛом вынуждает производить отладку АЛГОЛ-программ на машине. Протекает этот процесс примерно следующим образом. АЛГОЛ-программу транслируют, решают задачу на машине, анализируют результаты и промежуточные результаты и, если они вызывают сомнения, начинают исправлять АЛГОЛ-программу. Методы отладки АЛГОЛ-программ на машине еще мало разработаны и подробнее не могут быть освещены в этой книге. [17]
Этот принцип сохраняется и в том случае, если внутренний оператор содержит метку и работает в результате выполнения оператора перехода, ведущего к этой метке. После окончания работы внутреннего оператора, расположенного как в конце полного условного оператора, так и в середине ( между условием и символом else), уже не проверяются никакие последующие условия и не выполняются другие внутренние операторы, а управление передается на оператор, стоящий в программе за полным условным оператором, или определяемый выполненным оператором. [18]
В общем случае арифметическое выражение может быть достаточно сложным, оно подлежит вычислению, затем округляется до целого числа и при выполнении оператора перехода передача управления передается тому оператору, порядковый номер которого соответствует полученному целому числу. [19]
Однако если выход из цикла осуществляется посредством какого-либо оператора перехода, то значение параметра цикла сохраняется таким, каким оно было непосредственно перед выполнением оператора перехода. Входить в цикл извне разрешается только через его заголовок, хотя в теле цикла и могут быть метки, предназначенные, например, для передач управления между различными операторами, содержащимися в теле цикла. [20]
Если арифметическое выражение является правилом для вычислительного числового значения, а логическое выражение - правилом для определения логического значения, то именующее выражение является правилом определения идентификатора метки того оператора, к которому нужно перейти после выполнения оператора перехода. [21]
Оператору перехода в языке логических схем соответствует понятие левого знака перехода. Выполнение оператора перехода заключается, в конечном счете, в получении некоторой метки и в переходе к оператору, имеющему такую метку. [22]
Выполнение оператора перехода заключается в передаче управления оператору, помеченному меткой х, если х - метка, либо оператору, помеченному меткой, совпадающей со значением переменной х, если х - переменная типа метки. В этом последнем случае к моменту выполнения оператора перехода значение переменной х должно быть вычислено. [23]
Выполнение оператора перехода заключается в передаче управления оператору, помеченному меткой х, если х-метка, либо оператору, помеченному меткой, совпадающей с значением переменной х, если х-переменная типа метки. В этом последнем случае к моменту выполнения оператора перехода значение переменной х должно быть вычислено. [24]
В блок можно войти только через его начало, первый оператор блока всегда будет выполнен. Сказанное не имеет места в случае составного оператора: выполнение оператора перехода может приводить к переходу внутрь составного оператора, после чего выполнится только часть внутренних операторов составного оператора. [25]
![]() |
Конструкции с использованием условного оператора перехода, эквивалентные операторам. а - если. б - условному. [26] |
Третья конструкция хотя и не является одним условным оператором, но тоже обеспечит выполнение или оператора перехода ( если а. Эта последовательность эквивалентна первым двум операторам, но только потому, что выполнение оператора перехода исключает выполнение следующего за оператором если оператора присваивания. [27]
![]() |
Фрагмент про - s ( l.| Фрагмент программы поиска нуля в массиве. [28] |
Выход из цикла может произойти как естественным путем после превышения параметром верхней границы, так и до этого, если в области действия цикла имеется оператор, передающий управление по метке, находящейся за пределами области. При естественном выходе значение параметра считается неопределенным, тогда как после выхода в результате выполнения оператора перехода значение параметра равно последнему, полученному в цикле, и может быть использовано в дальнейшем. [29]
Таким образом, в результате проверки условий может быть выбран и выполнен самое большее один внутренний безусловный оператор, после чего осуществляется переход к оператору, указываемому выполненным оператором, или к оператору, следующему за полным условным оператором. Этот принцип сохраняется и в том случае, если внутренний оператор содержит метку и работает в результате выполнения оператора перехода, ведущего к этой метке. [30]