Begin IF условие 2 THEN оператор 1 ELSE оператор 2 end;
ELSE оператор 2;
Begin IF условие 2 THEN оператор 1 end
Создание сложных разветвлений алгоритма
Сокращенный условный оператор
Полный условный оператор
Блок-схему полного условного оператора можно представить так: полной формы.
Рисунок 10. Блок-схема условного оператора
В общем виде полный условный оператор выглядит следующим образом:
IF
Логическое выражение
THEN
Оператор1
ELSE
Оператор2
;
Эта запись читается следующим образом: "если логическое выражение справедливо, то выполняется первый оператор, если ложно - второй оператор". Операторы 1 и 2 могут быть простые или составные. Точка с запятой перед словом ELSE не ставится.
Примеры полных условных операторов:
IF x<0 THEN i:=i+1 ELSE j:=j+1;
IF (x<y) AND (x<>0) THEN begin x:=y/x; y:=y+k end ELSE begin x:=x+0.01; y:=y-k end;
Блок-схему сокращенного условного оператора можно представить так:
В общем виде сокращенный условный оператор выглядит следующим образом:
IF
Логическое выражение
THEN
Оператор
;
Эта запись читается следующим образом: "если логическое выражение справедливо, то выполняется указанный оператор, в противном случае никаких дополнительных изменений в вычисления не приносится".
Примеры использования условного оператора в сокращенной форме:
IF x>y THEN Max:=x;
IF x<>0 THEN begin a:=y/x; Writeln('A= ', a:6:2) end;
Операторы, включаемые в условный оператор, в свою очередь также могут быть условными:
IF
Логическое выражение
THEN
Оператор 1
ELSE
Оператор 2
;
Использование таких условных операторов, "вложенных" один в другой, требует осторожности, чтобы не запутаться в их структуре. Например, условный оператор
IF условие 1 THEN IF условие 2 THEN оператор 1 ELSE оператор 2;
можно истолковать двояко:
1) IF условие 1 THEN
2) IF условие 1 THEN
По правилам языка Паскаль имеет место 2-я трактовка, т.е. считается, что каждое слово ELSE соответствует первому предшествующему ему слову THEN. Во избежание ошибок рекомендуется четко выделять желаемую форму условного оператора с помощью операторных скобок begin ... end :
IF j<>0 THEN
begin IF x<0 THEN x:=x-1 end
begin IF x<y THEN x:=x+0.5 ELSE y:=y+0.5 end;
Приведем пример программы, использующей условный оператор.
Program Primer1;
Uses Crt;
Var x,y,z:Real;
Begin
TextColor(Yellow); TextBackGround(Blue);
ClrScr;
Write('x= '); Readln(x);
Write('y= '); Readln(y);
IF x<0 THEN
IF x>y THEN z:=x ELSE z:=y
ELSE
IF x<y THEN z:=x ELSE z:=y;
Writeln('z= ',z:6:2);
Readln
End.
4.2.5. Оператор перехода. Пустой оператор
В Паскале принят естественный порядок выполнения операторов, т.е. операторы обычно выполняются в порядке их следования в тексте программы. Между тем ОПЕРАТОР ПЕРЕХОДА позволяет задавать любой желаемый порядок выполнения вычислений.
Оператор перехода указывает, что далее программа должна выполняться с места, помеченного указанной в операторе меткой. Оператор перехода имеет вид:
GOTO
Метка
;
Любой оператор в программе может быть помечен, т.е. снабжен меткой, которая предшествует оператору и отделяется от него двоеточием:
МЕТКА : ОПЕРАТОР ;
Метка может иметь произвольное имя, в качестве меток также допускается использовать целые числа без знака. Используемая в программе метка должна быть описана в блоке LABEL раздела описаний. Если в программе несколько меток, то в блоке LABEL они приводятся в виде списка, отделяясь друг от друга запятыми:
Порядок перечисления меток в списке безразличен. При использовании меток необходимо учитывать, что метки, описанные в подпрограмме (процедуре, функции), локализуются в ней, поэтому переход извне подпрограммы на метку внутри нее невозможен. Также невозможен переход из подпрограммы на метку, расположенную в основном блоке программы.
Следует помнить, что частое использование оператора перехода ухудшает наглядность программы, затрудняет ее понимание и отладку. Еще в марте 1968г. на эту тему была опубликована историческая статья голландского программиста Эдсгера Дейкстри "GOTO Statement Considered Harmful" ("о вреде оператора GOTO"). Использование оператора перехода обосновано лишь в отдельных случаях, например для досрочного выхода из цикла или перехода в конец программы для окончания ее работы:
Program Primer;
LABEL 25;
VAR N,S:Real;
Begin
Readln(S);
Readln(N);
IF N<0 THEN begin S:=N+2; GOTO 25 end;
.....................
25: Writeln('S= ',S:6:2)
End.
ПУСТОЙ ОПЕРАТОР не предписывает никаких действий, он представляет собой пустую последовательность символов (т.е. отсутствие символов). Как и обычные операторы, пустой оператор может быть помечен меткой. Пустой оператор отделяется от других операторов точкой с запятой.
Наиболее часто пустой оператор используется для того, чтобы поместить в программе "точку", на которую должен осуществляться переход по оператору перехода, но при этом не надо выполнять никаких дополнительных действий; например, надо просто выйти из программы - для этого ставим пустой оператор с меткой перед словом end:
Пустой оператор может быть полезен еще в одном: в Паскале оператор может быть помечен только одной меткой, но если перед некоторым помеченным оператором дополнительно поставить помеченный пустой оператор, то на это место программы можно будет ссылаться по любой из 2-х меток:
1:; 2: A:=B+C;
4.2.6. Комментарии
При программировании желательно вставлять в текст создаваемой программы КОММЕНТАРИЙ - несколько фраз, поясняющих суть выполняемых программой действий. В ходе трансляции текста программы компилятор обходит комментарии, не принимает их во внимание и не включает в исполняемые коды программы. Единственное назначение комментария - служить справочной информацией для человека, читающего текст программы. Отсутствуют универсальные правила для определения мест, где следует располагать комментарии. Размещение и содержание комментариев в основном зависит от личных представлений программиста. Грамотно представленные комментарии позволяют ответить на большинство вопросов, возникающих при знакомстве с текстом программы: что делает данная программа, что обозначает каждая переменная, какова цель данного оператора, и т.д. В Паскале комментарии создаются обрамлением с обоих сторон какой-нибудь текстовой строки условными символами { } или (* *), например:
{ В этом месте программа ожидает ввода числа }
или
(* Конец раздела описаний, начинаем основную программу *).
4.2.7. Оператор цикла
При разработке алгоритмов решения большинства задач возникает необходимость многократного повторения однотипных команд. Такой повтор может быть реализован с помощью уже знакомых нам оператора перехода и условного оператора. Предположим, что требуется пять раз вывести на экран слово "ЦИКЛ". Составим соответствующую программу:
Program Primer;
Uses Crt;
Label Loop;
Var i:Integer; {Эта переменная будет использоваться в качестве}
{счетчика повторов}
Begin
TextColor(Yellow); TextBackGround(Blue);
ClrScr; {Настроили цвет, очистили экран}
i:=1; {Установили начальное значение счетчика}
Loop: IF i<=5 THEN Begin
Writeln('ЦИКЛ');
i:=i+1; { Значение переменной- счетчика увеличиваем на единицу }
GOTO Loop {Повторяем алгоритм от метки LOOP до тех пор,}
{пока значение счетчика не превысит 5}
End;
Readln
End.
Напомним, что частота использования оператора GOTO обратно пропорциональна квалификации программиста. Поэтому для организации в программах повторов однотипных команд, подобных приведенному выше примеру, язык Паскаль предлагает в замен оператора GOTO специализированные операторы повтора, называемые операторами цикла. В Паскале имеется три разновидности оператора цикла: цикл с параметром, цикл с предусловием и цикл с постусловием.