Оператор выбора Case.
Представим, что нам нужно сделать определённые дела в зависимости от дня недели, например, в понедельник сходить в кино, во вторник пригласить мастера по стиральным машинам, в среду перевезти мебель в гараж, а в четверг купить продукты. Конечно, мы могли бы описать эти действия с помощью условного оператора if, как это показано ниже:
Var
den’_nedeli=1..4 // переменная принимает одно из 4-х возможных значений – 1 – 4 - в зависимости от текущего дня недели
Begin
If den’_nedeli=1 then writeln(‘Сегодняидёмвкино’)
else If den’_nedeli=2 then writeln(‘Сегодня приглашаем мастера по стиральным машинам’)
else If den’_nedeli=3 then writeln(‘Сегодня перевозим мебель в гараж)’
else If den’_nedeli=4 then writeln(‘Сегодня покупаем продукты’);
Но, как мы видим, такое описание очень громоздкое и сложноватое. А если нам нужно описать много пунктов, в зависимости от которых будут выполняться различные действия, то нам будет совсем трудно воспринимать и дорабатывать такую программу.
Для того, чтобы упросить написание программы, в языке Pascal имеется наряду с оператором выбора If специальный для таких случаев второй условный оператор выбора Case, который описывается следующим образом:
case переменная of
a: действие 1;
b: действие 2;
…
n: действия n;
else иное действие;
end;
Как мы видим, в данном случае перед словом else «;» ставить нужно.
Иное действие можно не выполнять. В таком случае мы просто не пишем ветку else и тогда, если переменная не совпала ни с одним значением a, b.. n, то программа будет выполняться дальше и опустит оператор выбора Case.
Кроме чисел вместо a, b,…, n можно вставлять определённые диапазоны, которые не должны перекрываться друг с другом, например:
Case p of
1..4: действие 1;
56..225: действие 2;
226..259: действие 3;
end;
Переменная p должна иметь простой порядковый (целый) тип данных и наши диапазоны или числа a, b,…, n должны быть того же типа, что и тип переменной p, или совместимого с ней типа.
Для того, чтобы проиллюстрировать применение оператора Case, давайте напишем программу сравнения 2-х чисел x и y. Если числа равны, значит, их разница равна 0, иначе числа не равны.
program matching;
var x,y: integer; //наши числа
begin
write('Введите значение x ');
read(x);
write('Введите значение y ');
readln(y);
case x-y of
0: writeln (‘x и y равны между собой’); //если разница равна 0, то наши числа равны
//между собой
else
writeln (‘x и y не равны'); //иначе не равны
end;
readln;
end.
Конечно, эту конструкцию с оператором caseможно было бы легко описать с помощью оператора If, поэтому данная программа скорее носит своей целью проиллюстрировать на лёгком примере применение нашего оператора.
Если какое-либо условие в своём теле содержит более одного оператора, то возникающую последовательность операторов необходимо, как и в случае с оператором If, заключить в операторные скобки Begin end. Это иллюстрирует пример программы, вычисляющей значение выражения в зависимости от отрицательного, нулевого или единичного, или положительного (начиная с 2-х) значения x. Если х – число отрицательное, то выражение для вычисления 25*х, если х – 0 или 1, то выражение будет 25*х2, а если х – положительное неединичное число, то выражение – 25*х3:
Program computation;
Var
x, znach: integer;
Begin
Write(‘Введитезначениеx: ‘);
Readln(x);
Case x of
-32768..-1: begin
znach:=25*x;
writeln(‘Поскольку число х отрицательное, то значение выражения вычислялось по формуле 25*х и результат равен ‘, znach);
end;
0, 1: begin
znach:=25*x*x;
writeln(‘Поскольку число х отрицательное, то значение выражения вычислялось по формуле 25*х*x и результат равен ‘, znach);
end;
2..32767: begin
znach:=25*x*x*x;
writeln(‘Поскольку число х отрицательное, то значение выражения вычислялось по формуле 25*х*x*x и результат равен ‘, znach);
end;
Readln;
End.