Оператор перехода
Оператор выбора
Понятие составного оператора
Составные операторы задают порядок выполнения операторов, являющихся их элементами.
Составные операторы представляют собой набор обычных операторов, разделенных между собой символами «;», заключенных в ограничители begin и end.
Составные операторы обрабатываются, как один оператор, поэтому их можно применять там, где синтаксис Паскаля допускает использование только одного оператора (например, после ключевых слов then и else).
Пример: отсортировать числа x1 и x2 по возрастанию.
if x1>x2 then
begin
temp:=x1;
x1:=x2;
x2:=temp;
end;
Оператор выбора case позволяет заменить большую вложенность условных операторов. Записывается оператор следующим образом:
CASE <выражение> OF
<значение_1>: <оператор_1>;
<значение_2>: <оператор_2>;
…
<значение_n>: <оператор_n>;
[ ELSE
<оператор_если_1>;
…
<оператор_если_m>; ]
END;
В качестве Выражения может использоваться любое выражение порядкового типа (в отличие от условного оператора, где используются выражения логического типа): целое, логическое, символьное и т.п.
После вычисления Выражения его результат ищется в списке Значение_1, Значение_2, …, Значение_N. Если результат найден в списке Значений, то выполняется соответствующий Оператор. Если имеется несколько подходящих значений, то выполняется Оператор, найденный первым. Если искомое значение не найдено, то выполняются операторы, записанные в ветви else.
Все Значения должны быть совместимы по типу с результатом Выражения. В одной строке значения могут быть также перечислены через запятую либо быть указаны в виде интервала с помощью символа «..».
Ветвь else может отсутствовать.
Пример: вывести на экран день недели
case day of
1: writeln(‘понедельник’);
2: writeln(‘вторник’);
3: writeln(‘среда’);
4: writeln(‘четверг’);
5: writeln(‘пятница’);
6: writeln(‘суббота’);
7: writeln(‘воскресенье’);
else
writeln(‘некорректная дата’);
end;
Пример: вывести на экран, будний это день недели или выходной
case day of
1..5: writeln(‘будний’);
6, 7: writeln(‘выходной’);
else
writeln(‘некорректная дата’);
end;
Обычно операторы в программе выполняются в том порядке, в каком они записаны. Оператор перехода goto прерывает естественный порядок выполнения программы и указывает, что дальнейшее выполнение должно продолжаться, начиная с оператора, помеченного меткой, указанной в операторе перехода.
Пример: goto 218; {переход к оператору, помеченному меткой 218}
Все используемые в программе метки предварительно должны быть перечислены в разделе label в блоке описаний:
LABEL <МЕТКА_1>, <МЕТКА_2>, …, <МЕТКА_N>;
В качестве метки может выступать идентификатор или целое число в диапазоне от 0 до 9999.
В программе описанная метка ставится перед каким-либо оператором. Между меткой и оператором ставится двоеточие.
Для перехода к оператору, помеченному меткой, пишут goto и далее указывают имя метки, установленной перед оператором.
Пример: что будет напечатано на экране в результате выполнения программы:
label 1, 2, e;
begin
writeln(1);
goto 1;
2: writeln(2);
writeln(3);
goto e;
writeln(4);
1: writeln (5);
writeln(6);
goto 2;
e: end.
Операторы в данной программе не будут выполняться по порядку один за другим, т.к. здесь имеется множество меток и операторов перехода. В результате на экране будет напечатано:
1
5
6
2
3
Метки и оператор перехода следует использовать аккуратно. Они могут привести к тому, что программа «зависнет» или не будут выполнены некоторые операторы (в предыдущем примере не выполнился оператор writeln(4);).
Следует отметить, что в настоящее время использование меток считается «плохим тоном» и не желательно, т.к. это приводит к усложнению понимания текста программы. Кроме того, все метки можно избежать, используя ветвления и циклы.