16.1 Составной оператор
Составной оператор — это группа операторов, заключенных в операторные скобки, которыми является пара ключевых слов BEGIN и END. Таким образом, составной оператор включает в себя другие операторы (простые, не содержащие других операторов, или другие составные, или структурные).
Составной оператор применяется в тех случаях, когда синтаксис языка Паскаль допускает использование только одного оператора, в то время как ход программы требует задания некоторой последовательности действий. Это, в частности, бывает необходимо при реализации разветвляющихся и циклических алгоритмов.
16.2 Оператор безусловного перехода
Оператор безусловного перехода вызывает передачу управления оператору, которому предшествует метка. Формат команды:
Goto <метка перехода>
Метки, используемые в PASCAl, могут быть двух типов:
- целым числом в диапазоне от 0 до 9999;
- обычным идентификатором (символическое имя).
При использовании оператора перехода необходимо соблюдать следующие правила:
- все метки, используемые в программе, должны быть объявлены в разделе описания метки,
- одной меткой можно пометить только один оператор,
- метка, указанная в операторе перехода, должна помечать оператор, находящийся в том же блоке, что и сам оператор перехода; таким образом, не допускаются переходы вовне процедур (функций) или внутрь их,
- переход внутрь составного оператора может вызвать непредсказуемую ситуацию.
Использование операторов перехода в программе считается теоретически избыточным и подвергается серьёзной критике, так как поощряет создание малопонятных и трудно изменяемых программ. Такие программы сложны для отладки и сопровождения.
Поэтому использовать операторы перехода нужно только, если без них обойтись нельзя. При этом нужно соблюдать следующие правила:
- передачу управления организовывать только ВНИЗ по тексту программы, то есть оператор, который следует за меткой, должен стоять ниже оператора Goto. При необходимости передачи управления ВВЕРХ следует использовать операторы цикла.
- расстояние между меткой и оператором перехода на неё не должно превышать одной страницы текста (или высоты экрана дисплея).
Пример использования оператора перехода: Найти частное от деления целых чисел. В программе предусмотреть сообщение об ошибке, если возникает ситуация «Деление на ноль».
PROGRAM PR1;
label OUT;
VAR
X,Y,RES:INTEGER;
BEGIN
WRITE («Введите делимое -«);
RЕAD (X); { X — делимое }
WRITE («Введите делитель -«);
READ (Y); {Y — делитель }
if Y = 0 then begin
WRITELN («Деление на ноль«);
GOTO OUT; { выход из программы }
end;
RES:=XdivY;
WRITELN («Частное равно:», RES);
OUT: END. {PR1}
16.3 Условный оператор
Условный оператор реализуют алгоритмическую конструкцию «Развилка». Примеры развилок приведены на рисунке.


Условные операторы предназначены для выбора к исполнению одного или двух возможных действий (операторов) в зависимости от некоторого условия. При этом одно из действий может быть пустым, то есть отсутствовать. В качестве условия выбора используется значение логического выражения.
С помощью условных операторов можно выбрать один из нескольких возможных операторов.
По практическим соображениях существует два типа условных операторов. Оператор IF специально предусмотрен для тех случаев, когда требуется выбрать одну из двух возможностей. Естественно, можно было бы обойтись и лишь одним из этих операторов.
If <выражение> then <оператор> else <оператор>
Выражение после if должно быть логическим выражением (типа boolean). Если такое выражение имеет значение true, выполняется оператор следующий за then, если же выражение имеет значение false, выполняется оператор, следующий за else. Если оператор else и оператор за ним опускаются, в случае false осуществляется переход к следующему оператору. В этом случае используется укороченный вид оператора if.
If <выражение> then <оператор>
Если требуется выполнить после then или else несколько операторов, они обрамляются командами begin и end, образуя тем самым составной оператор. Учтите, что перед else никогда не ставится точка с запятой (поскольку это еще не конец оператора if).
Если else отсутствует после оператора then вновь стоит оператор if , то мы может столкнуться с многозначностью в выражении
If <выражение> then If <выражение2> then <оператор2> else <оператор2>
поскольку непонятно, относится else к первому или второму if. Существует правило, согласно которому else всегда относится к последнему if, не имеющему начинающегося с else продолжения, т.е. приведенное выше выражение понимается как
If <выражение> then begin If <выражение2> then <оператор2> else <оператор2> end
Примеры условных операторов
1) IF X<Y THEN MAX:=Y {если х<у, то переменной МАХ присваивается значение переменной У }
ELSE MAX.»X; { иначе МАХ присваивается X}
2) IF ALL_Correct THEN Transpose(A,B,N); {если значение переменной ALL_ Correct TRUE выполняется процедура TRANSPOUS }
3) IF Color=Red THEN begin {если Color равно (Red) выполняется составной оператор}
X:=cos(l);
Y:=alfa+beta;
Color:=Yellow
end
ELSE begin
X:=sin(Y);
Color:=Red
end;
Во втором примере отсутствует отрицательная веточка, начинающаяся со слова else
В третьем примере используется составной оператор, т. к. синтаксис языка PASCAL допускает использование только одного оператора после служебных слов then и else.
Важно отметить, что условный оператор является единым предложением, поэтому перед служебными словами then и else точку с запятой ставить нельзя.
При использовании вложенных условных операторов может возникнуть синтаксическая неоднозначность, иллюстрируемая следующей схемой:
If <выражение> then If <выражение2> then <оператор2> else <оператор2>
В приведенном операторе часть «else <оператор2>» может трактоваться как принадлежащая или «внешнему» оператору If <выражение>., или вложенному If <выражение2>… Эта двусмысленность разрешается путем следующего представления данной конструкции
If <выражение> then begin If <выражение2> then <оператор2> else <оператор2> end
Иными словами, служебное слово else всегда принадлежит ближайшему по тексту слову If, которое не связано еще со служебным словом else.
Следует проявлять аккуратность при записи вложенных друг в друга условных операторов!

Оставить комментарий