Оператор выбора 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.