Программа разветвляющейся структуры
Выражения
Программа разветвляющейся структуры обязательно содержит условия, в зависимости, от которых предусматривают выбор одной из нескольких последовательностей операторов (ветвей). Для организации разветвлений в программах используются операторы перехода, условий и выбора. Рассмотрим их конструкции и применение. 3.2Оператор безусловного перехода Оператор безусловного перехода вызывает передачу управления оператору, которому предшествует метка. Общий вид такой: goto метка; Метка должна быть описана в разделе label. Объявление метки имеет вид: label метка; Допускается объявить список меток: label метка1, метка2, метка3; Между меткой и данным оператором можно включить один или несколько пробелов. Пример. label 10, М2 goto М2; 10: A:=2; ........ 32: Y: =X/A; Оператор, следующий непосредственно после оператора goto, всегда должен иметь метку (иначе он никогда не будет выполнен). Между словами go и tо пробел не допускается. При использовании элементов перехода должны соблюдаться следующие правила: Все метки, используемые в блоке, должны быть описаны, причем каждая не более одного раза. Метка, указанная в операторе перехода, должна помечать оператор, находящийся в том же блоке, что и сам оператор перехода. Т.е. не допускаются переходы из внешних процедур во внутренние и наоборот. Переход внутрь структурного оператора может вызвать непредсказуемые эффекты, хотя компилятор не выдает сообщения об ошибке. Использование безусловных передач управления в программе считается теоретически избыточным и подвергается серьезной критике, так как поощряет создание малопонятных и трудно модифицируемых программ, которые вызывают большие сложности при отладке и сопровождении. При использовании операторов перехода рекомендуется соблюдать следующие правила: следует стремиться применять операторы перехода (если кажется невозможным обойтись без них) для передачи управления только ВНИЗ по тексту программы (вперед); при необходимости передачи управления “назад” следует использовать операторы цикла. расстояние между меткой и оператором перехода на нее не должно превышать одной страницы текста (или высоты экрана дисплея). Оператор условного перехода IF Полная форма условного оператора имеет вид: if < логическое_выражение > then оператор_1 [ else оператор_2]; Если логическое выражение истинно, то выполняется оператор 1; иначе выполняется оператор 2. Квадратные скобки в записи полной формы условного оператора означают, что конструкция else с оператором 2 может отсутствовать. В этом случае имеем краткую форму условного оператора: if логическое выражение_ then оператор 1. Например: if A>25 then Y: =X-6; Z: =SUM+1 В этом фрагменте представлено два независимых оператора. Один из них условный, другой оператор присваивания. Если условие А>25 истинно, то вычисляется значение Y и происходит передача управления на вычисления значения Z. Если условие А>25 ложно, т. е. А? 25, то сразу выполняется оператор присваивания Z=SUM+1. Целесообразно при написании программ использовать следующую форму записи оператора if: if логическое выражение then оператор 1 Else оператор 2 Следует помнить, что перед else точка с запятой не ставится. Оператор 1,2-это простые или составные операторы. Если логическое выражение истинно, то выполняется оператор 1, иначе - оператор 2 (или следующий за if оператор, если else отсутствует). В качестве операторов 1,2 могут использоваться другие операторы if. В этом случае каждое else относится к ближайшему слева if, не имеющему else. Условные операторы имеют вложенную конструкцию, когда после then или else используется также условный оператор. При этом справедливо следующее правило: else всегда относится к ближайшему слева оператору if. Действие условного оператора можно расписать путем использования составного оператора. В этом случае после слов then и else могут быть составные операторы; if < логическое_выражение> then Begin оператор 1; оператор 2; ........... оператор n-1; оператор n End Else Begin оператор 1; оператор 2; .......... оператор n-1; оператор n; End Перед служебным словом else не ставится знак точки с запятой. Внутри составных операторов могут быть также условные операторы, содержащие простые или составные операторы. Пример 1.
Для программной реализации этих вычислений можно использовать вложенную конструкцию условного оператора. if x>0 then if x>=1 then Y: =Sqrt(X)*Sin(X) Else Y: =Exp(1/3*Ln(X))*Cos(X) Else Y: =Exp(1/4*Ln(Abs(X)))/4; или if X>=1 then Y: =Sqrt(X)*Sin(X) Else if X>0 then Y: =Exp(1/3*Ln(X))*Cos(X) Else Y: =Exp(1/4)*Ln(Abs(X)))/4; Второй вариант записи более предпочтителен с точки зрения удобства чтения и наглядности программы. Пример 2. Запишем оператор if для следующей алгебраической схемы:
if A=B then if C<D then X: =1 Else X: =2 Else X: =3; Заметим, что точка с запятой ставится в конце оператора. Этот же оператор можно записать с использованием трех операторов if: if (A=B) and (C<D) then X: =1; if (A=B) and (C>=D) then X: =2; if A<>B then X: =3; В этом примере наличие скобок в логических выражениях операторов if является обязательным, так как операции сравнения имеют более низкий приоритет, чем логические операции. Ввиду этого следующий оператор if не приведет к желаемой цели if A=B and C=D then X: =1; В состав условного оператора может входить только один оператор. Если в какую либо ветвь требуется вставить несколько операторов, то они объединяются в один составной оператор, для чего в начале записывается слово begin (начало), а в конце служебное слово end (конец). Пример 3. Составить программу для вычисления следующего выражения: где a=2, 34*10; b=17, 2 program raz1; Const A=2. 34E+2; B=17. 2; Var K, K1, K2: real; Begin K1: =Sqrt(15*A*A+21*B*B); K2: =Sqrt(15*B*B+21*A*A); if A>B then K: =K1; if (A>1) and (A<=B) then K: =K2; if A<=1 then Writeln (' Результат не определен ') Else Write (' K=', k) end. Другой менее удачный вариант этой же программы: Program raz2; label 10; Const A=2.34E+2; B=17. 2; Var K: real; Begin if A>B then K: =Sqrt(15*A*A+21*B*B); if (A>1) and (A<=B) then K: =Sqrt(15*B*B+21*A*A); if A<=1 then Begin write (' Результат не определен'); goto 10; end; Write(' K=', K); 10:; end.
|