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

Case выражение of

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

Ранее Вы познакомились с условным оператором If, который позволяет программе выполнять переходы на ту или иную ветвь по значению булева условия. Используя несколько операторов If, можно производить ветвление по последовательности условий. В приведенном фрагменте показано, как при помощи ряда операторов If можно преобразовать целое число (в диапазоне 0-9) к его словесному представлению:

if Ziphra = 0 then write (‘Нуль‘);

if Ziphra = 1 then write (‘Единица‘);

if Ziphra = 2 then write (‘Два‘);

и т.д.

Оператор выбора позволяет выбрать одно из нескольких возможных продолжений программы. Параметром, по которому осуществляется выбор, служит так называемый ключ выбора (или селектор)– выражение любого типа (кроме типов REAL и STRING).

Общая форма записи следующая:

значение1 : оператор (группа операторов);

значение2 : оператор (группа операторов);

. . . . . . . . . . . . . . . . . . . . . .

значениеN : оператор (группа операторов)

else оператор (группа операторов);

end;

Оператор выбора работает следующим образом. Сначала вычисляется значение выражения, стоящее после зарезервированного слова case, а затем выполняется оператор (или составной оператор), соответствующий результату вычисления выражения.Может случиться, что в списке выбора не окажется константы равной вычисленному значению ключа. В этом случае управление передается оператору, стоящему за словом ELSE.

Например,

case NUMBER mod 2 of

0 : writeln (NUMBER, ‘- число четное‘)

else : writeln (NUMBER, ‘- число нечетное‘);

end;

Если один оператор выполняется при нескольких значениях, то их можно перечислить через запятую.

case MONTH of

1, 2, 3 : writeln (‘Первый квартал‘);

4, 5, 6 : writeln (‘Второй квартал‘);

7, 8, 9 : writeln (‘Третий квартал‘);

10, 11, 12 : writeln (‘Четвёртый квартал‘);

end;

Оператором может являться не только простой оператор, но также составной и пустой операторы.

case CODE of

1 : writeln (‘*******‘);

2 : begin {составной оператор}

x:=sqr(y-1);

writeln (x);

end;

3 : {пустой оператор}

end;

Если оператор должен выполняться при нескольких значениях селектора следующих друг за другом, образуя некоторый промежуток, то это можно записать в более сжатой форме. Например,

case Chislo of

0..9 : write (‘Это число является цифрой‘);

В языке принят естественный порядок выполнения программы: последовательный. Однако в практике программирования задач возникает необходимость безусловного перехода для выполнения нужной последовательности операторов. Например, необходимо обойти участок программы, а вернуться к нему позже. Для этого предназначен оператор безусловного перехода, который имеет следующую форму записи: goto метка;

Метка представляет собою число без знака в диапазоне 1-9999 либо последовательность латинских букв и цифр.

Перед использованием метка должна быть объявлена в разделе описания меток, который сразу следует за разделом описания используемых модулей:

Uses Crt, Graph;

Label

Metka1, Metka2;

Const P=3.14;

Var x : integer;

После описания метки ее можно использовать в программе. Метка записывается перед помечаемым оператором и отделяется от него двоеточием. А оператор goto должен помещен в то место программы, откуда выполняется переход. Оператор goto передает управление на оператор с заданной меткой. Оператор goto можно вставлять в любое место программы, где могут располагаться операторы языка. Приведём пример программы, применив в ней оператор безусловного перехода.

Program Number2;

Label Metka;

Var a, b, c : integer;

Begin

Metka : writeln(‘Введите цифру ‘);

readln(a);

case a of

0 : writeln (‘ноль‘); 1 : writeln (‘один‘); 2 : writeln (‘два‘); 3 : writeln (‘три‘);

4 : writeln (‘четыре‘); 5 : writeln (‘пять‘); 6 : writeln (‘шесть‘); 7 : writeln (‘семь‘);

8 : writeln (‘восемь‘); 9 : writeln (‘девять‘)

else

begin

writeln (‘Это число не является цифрой‘);

goto Metka;

end;

end; readln;End.

Теперь в этой программе мы заставляем пользователя правильно ввести цифру. Сколько бы раз пользователь ни вводил числа не из промежутка 0..9, программа будет выдавать сообщение об ошибочном вводе и снова просить ввести цифру.