Учебник Turbo Pascal. Введение - Оператор case...of...end

ОГЛАВЛЕНИЕ

Оператор case...of...end

Для ситуаций, где имеется несколько (три и более) альтернатив, больше подходит оператор case. Этот оператор называется оператором выбора и имеет следующий вид:

case expression of
    values_l: statement_l;
    values_2: statement_2;
    ...
    values_n: statement_n;
else
    statement;
end;

Рассмотрим элементы этой конструкции. Во-первых, это три зарезервированных слова: case, of и end. Между case и of находится выражение expression, принимающее значение, которое, возможно, имеется в одном из списков значений, находящихся слева от двоеточий. Данное выражение называется селектором оператора case. Каждый оператор, идущий за двоеточием, отделяется от следующего списка значений точкой с запятой. Ветвь else, отвечающая всем не перечисленным значениям выражения expression, необязательна. При выполнении данного оператора вначале вычисляется значение селектора. Затем выбирается тот список значений, которому принадлежит полученное значение, и выполняется соответствующий оператор.

В списках значений оператора case допустимыми являются типы переменных, называемые скалярными (они будут обсуждаться позже), включая целые и исключая вещественные типы. Любое заданное значение селектора может входить в список значений неоднократно, но выполняться будет лишь первая подходящая ветвь. Замечу, что «стилистически» такая конструкция выглядит не очень изящно. Если значение селектора отсутствует в списках значений, ни одна из альтернатив выполняться не будет. В этом случае выполняется ветвь else оператора case или (если эта ветвь отсутствует) следующий за case оператор.

Поясню применение данного оператора следующим примером. Пусть необходимо преобразовать целое число N в зависимости от величины остатка от его деления на 17 следующим образом:

если N mod 17 = 0, то N := 0;

если N mod 17 = 1 или 6, то N := -N;

если N mod 17 = 2, 3 или 5, то N := 2xN;

если N mod 17 = 4, то N := ЗхN;

во всех прочих случаях N :=* 5xN.

Решение этой задачи на Паскале выглядит следующим образом:

case N mod 17 of
    0                : N := 0;
    1, 6        : N := -N;
    2, 3, 5    : N := 2 * N;
    4                : N := 3 * N;
else                N := 5 * N;
end;

В данном примере селектором является выражение N mod 17. Кроме того, имеются 4 списка значений и ветвь else.