Оператор перехода

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

Понятие составного оператора

Составные операторы задают порядок выполнения операторов, являющихся их элементами.

Составные операторы представляют собой набор обычных операторов, разделенных между собой символами «;», заключенных в ограничители 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);).

Следует отметить, что в настоящее время использование меток считается «плохим тоном» и не желательно, т.к. это приводит к усложнению понимания текста программы. Кроме того, все метки можно избежать, используя ветвления и циклы.