Иногда его называют также оператором выбора. Это оператор CASE, который является обобщением оператора IF и позволяет сделать выбор из произвольного числа имеющихся вариантов.
Формат оператора варианта:
CASE <Выражение-селектор> OF
< Список 1>: <Оператор 1 >;
<Список 2>: <Оператор 2 >;
…
<Список N>: <Оператор N >
[ ELSE <Оператор N+1> ];
END;
В этой конструкции <Выражение селектор> может быть любого перечисляемого типа: стандартного (INTEGER, BOOLEAN, CHAR и т.д.) или пользовательского. <Список i> представляет собой подмножество значений, разделенных через запятую, выражения-селектора при которых следует выполнить <оператор i>. Оператор ELSE может отсутствовать. Если выражение-селектор принимает значение, которое не входит ни в один из списков 1,2,N, то в этом случае выполняется оператор N+1, стоящий за ELSE. Когда оператор ELSE отсутствует, вместо оператора N+1 выполняется пустой оператор. Далее приведен алгоритм оператора CASE ... OF:
Вариант, помеченный словом 'Иначе', соответствует ветке ELSE оператора CASE. Если ELSE отсутствует, то в блок-схеме нет этой ветви. Оператор CASE ... OF работает следующим образом:
Пример 12. Составить программу для вычисления площади одной из пяти геометрических фигур (прямоугольника, треугольника, трапеции, круга и сектора).
PROGRAM PR12;
VAR
S, А, В, Н, R, FI: REAL; N: INTEGER;
BEGIN
WRITELN('l - прямоугольник');
WRITELN('2 — треугольник');
WRITELN('3 - трапеция');
WRITELN('4 - круг');
WRITELN('5 - сектор');
READLN(N);
S:=0;
CASE N OF
1: BEGIN
WRITELN('Введите стороны - А, В');
READ(A, В);
S:= A*B;
END;
2: BEGIN
WRITELN('Введите основание и высоту - А, Н');
READ(A, Н);
S:=A*H/2;
END;
3: BEGIN
WRITELN('Введите основания и высоту - А, В, Н');
READ(A, В, Н);
S:= (А + В)*Н/2;
END;
4: BEGIN
WRITELN('Введите радиус – R');
READ(R);
S:= PI*R*R;
END;
5: BEGIN
WRITELN('Введите радиус и угол, град - R, FI');
READ(R, FI);
S:=PI*R*R*FI/360;
END;
END; {CASE}
WRITELN(фигуры = ', S:8:2)
END.
В этой программе оператор CASE используется для организации простейшего меню для выбора фигуры по предлагаемому номеру из списка номеров. Оператор указывает номер фигуры, и управление передается соответствующей ветви вычислительного процесса.
Пример 13. Для заданного целого положительного K и значения вещественного числа X вычислить Y = F(X) по формуле:
PROGRAM PR13;
VAR X, Y: REAL; К: INTEGER;
BEGIN WRITELN('Введите X и К');
READLN(X, K);
CASE К OF
2, 3 : Y := EXP(K *LN(X)) + X + 1; { Список 1}
4 .. 6: Y:= 1/ABS(X+1); {Список 2}
ELSE Y:= SQRT(ABS(X +K))+SQRT(ABS(X-K)) { В противном случае}
END; { CASE}
WRITELN('Y = ',Y:5:1)
END.
В примерах 12, и 13 не следует путать метки — значения выражения селектора CASE с метками, используемыми оператором GOTO. Попытка войти в метку оператора CASE оператором безусловного перехода приведет к ошибке.
Предыдущая статья: Организация условного перехода. Оператор IF.
Оглавление: Лекции по Pascal.
Следующая статья: Программирование циклов. Оператор безусловного перехода.
Комментарии