Операторы ветвления в языке Pascal

9.6.6.1. Оператор безусловного перехода

Для изменения стандартной последовательности порядка выполнения операторов и перехода к выполнению программы, начиная с заданного оператора, служит оператор безусловного перехода, формат которого следующий:
GOTO <Метка>;
Оператор, к которому переходит процесс выполнения программы, должен быть помечен меткой (на неё и указывает оператор GOTO):
<Метка> : <Оператор>;
Пример:
LABEL m1;
VAR x,y: REAL;
BEGIN
m1 : WRITELN(’Введите число’);
READLN(x);
y:=x*x+x+1;
WRITELN(’y=’,y:10:6);
GOTO m1;
END.
Здесь m1 – метка, которая установлена перед оператором вывода на экран надписи "Введите число". Введённое значение переменной x используется затем для вычисления значения y. Потом значение y выводится на экран, а оператор безусловного перехода отсылает исполнителя к началу программы, т.е. к выводу надписи "Введите число". Таким образом, данная программа никогда не закончится.

9.6.6.2. Операторы условного перехода. Простое ветвление

Условие (в программировании) - логическое выражение, принимающее значение Истина или Ложь. Условия используются в конструкциях цикла и ветвления.
Условный оператор реализует алгоритмическую конструкцию - "ветвление" и изменяет порядок выполнения операторов программы в зависимости от значения проверяемого условия (оно может быть истинным True или ложным False).
Оператор условного перехода (простое ветвление) имеет вид:
IF <условие> THEN <оператор 1>;
<оператор 2>;
где <условие>- логическое выражение, истинность которого проверяется. Если <условие> верное (True), то выполняется <оператор 1> после THEN, а лишь затем выполняется <оператор 2>. Если <условие> неверное (False), то выполняется только <оператор 2>.

Замечание. Иногда в программах пользователь нарочно (или по невнимательности) ставит точку с запятой сразу после THEN. Это приводит к тому, что от проверки условия ничего не зависит, и <оператор 1>, и <оператор 2> будут выполняться. Поэтому, уважаемые программисты, не ставьте символ ";" после служебного слова THEN. Это - ошибка!

Пример программы:
A:=-5;
IF A<0 THEN A:=SQR(A);
WRITELN(’A=’,A);
При выполнении этого фрагмента кода программы на экран будут выведены следующие данные:
A=25
Так как условие после IF верное, то выполняется оператор присваивания A:=SQR(A), стоящий после THEN, а затем - оператор вывода значения переменной A на экран. Если же переменная A являлась не отрицательной, то в этой программе она просто бы выводилась на экран.

Замечание. Если после проверки условия нужно выполнить два или более операторов, то они заключаются в операторные скобки BEGIN - END. Например:
A:=-5;
IF A<0 THEN
BEGIN
A:=A+1;
A:=SQR(A);
END
WRITELN(’A=’,A);
На экран будет выведено:
A=16

9.6.6.3. Операторы условного перехода. Двойное ветвление

Полная форма записи оператора условного перехода позволяет описать на языке Pascal алгоритмическую структуру "двойное ветвление". Эта форма имеет вид:
IF <условие> THEN <оператор 1> ELSE <оператор 2>;
<оператор 3>;
Если <условие> верное, то выполняется <оператор 1>. В противном случае выполняется <оператор 2>. В такой структуре <оператор 3> выполняется в любом случае.
Пример программы:
A:=3;
IF A<0 THEN A:=A+10 ELSE A:=A-10;
WRITELN(’A=’,A);
При выполнении этого фрагмента кода программы на экран будут выведен:
A=-7
Так как условие после IF оказалось неверным, то выполнился оператор присваивания A:=A-10, стоящий после ELSE. Оператор вывода WRITELN(’A=’,A) не зависит от значения логического выражения, стоящего после IF, и выполняется в любом случае.

Замечание. Символ "точка с запятой" (;) никогда НЕ ставится перед служебным словом ELSE. Его наличие приводит к ошибке!

Замечание. Если после проверки условия нужно выполнить два или более операторов, которые могут следовать после THEN и/или ELSE, то они заключаются в операторные скобки BEGIN - END.

9.6.6.4. Оператор выбора

Оператор выбора CASE обеспечивает организацию разветвлений путём выбора одного из нескольких операторов. Формат записи оператора выбора следующий:
CASE <селектор> OF
C1 : <оператор 1>;
C2 : <оператор 2>;
. . . . . . . . .
CN : <оператор N>
ELSE <оператор N+1>;
END;
где <селектор> в операторе выбора является переменной (или выражением) перечисляемого и ограниченного типа. К таким типам данных в Pascal'e относятся целые типы (кроме longint), символьный тип (char) и логический тип (boolean). Если значение <селектора> совпадает с константой C1, то выполняется <оператор 1>. Если значение <селектора> совпадает с константой C2, то выполняется <оператор 2>. Если же значение <селектора> не совпадает ни с одной из N констант в операторе CASE, то выполняется <оператор N+1>. Константы в операторе выбора должны быть одного типа с селектором и не должны повторяться.

Замечание. Вместо одной из констант CN в операторе выбора может стоять диапазон значений, который оформляется следующим образом:
C1..CNгде C1 - начальное значение диапазона, CN - конечное значение диапазона.

Пример программы с использованием оператора CASE:
PROGRAM Symbol;
VAR Bukva : char;
BEGIN
WRITELN(’Bведите любой символ’);
READLN(Bukva);
CASE Bukva of
’A’..’Z’, ’a’..’z’: WRITELN(’Это латинская буква.’);
’0’..’9’: WRITELN(’Это цифра.’);
’+’, ’-’, ’*’, ’/’: WRITELN(’Это знак действия.’);
’{’, ’}’, ’(’, ’)’, ’[’, ’]’: WRITELN(’Это скобка.’);
’.’, ’,’, ’;’, ’:’, ’?’, ’!’, ’"’:
WRITELN(’Это знак препинания.’);
’<’, ’>’, ’=’: WRITELN(’Это знак сравнения.’)
ELSE WRITELN(’Это спец. символ или русская буква.’);
END;
END.
Данная программа запрашивает у пользователя любой символ, с помощью оператора выбора сравнивает введённое значение с заранее отобранным набором символов, и выводит на экран сообщение с описанием введённого символа. Прописные и строчные буквы латинского алфавита, а также цифры расположены в таблице кодов ASCII в порядке возрастания их десятичного кода, и поэтому в программе задаются в виде диапазонов.

Наши рекомендации