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

Общий вид:

Case выражение - селектор of

Список констант выбора 1: оператор 1;

Список констант выбора 2: оператор 2 ;

- - - - - - - - - - - - - - - - - - - - - - - - - -

Список констант выбора n оператор n;

else оператор end;

Здесь выражение-селектор есть выражение, которое после выполнения имеет любое скалярное значение, кроме вещественного, т.е. выражение-селектор может быть байтового, целого, логического, символьного, перечисляемого и интервального типов.

Список констант выбора состоит из перечня констант, разделенных запятыми, либо из констант, заданных интервалом, либо из комбинаций перечня констант и интервалов. Тип констант в списках Case должен соответствовать типу выражения селектор. Значения констант в списках не должны повторяться.

Работа оператора. вначале вычисляется выражение-селектор, затем полученное значение сравнивается с константами выбора, и, если значение выражения-селектора совпадает с какой-либо константой выбора, то выполняется оператор, стоящий после списка констант, в котором есть константа, совпадающая со значением выражения-селектора. если значение выражения-селектора не совпадает ни с одной из констант выбора, то выполняется оператор, следующий за else. Else может в Case отсутствовать, тогда в случае несовпадения констант оператор Case игнорируется.

Примеры:

1. Селектор целого типа, список констант представлены перечнем констант:


Program Prim7;
Var i,z:integer;
BEGIN
writeln('введите целое i');
readln(i);

Case i of

1,2,5: writeln('i=',i,' z=',i+10);

12,16: writeln('i=',i,' z=',i+100);

31,35,46: writeln('i=',i,' z=',i+1000);

else writeln('неправильно задано i');
end;

readln;
END.

2. Селектор целого типа - список констант представлен диапазоном.

вводится целое i, определить, находится ли оно в диапазоне 1-10 или 11-100, или 101-1000, либо вне этих диапазонов.

Program Prim8;
Var i:integer;
BEGIN
writeln('введите целое i');
readln(i);

Case i of

1..10: writeln(' число в диапазоне 1-10');

11..100: writeln(' число в диапазоне 11-100');

101..1000: writeln(' число в диапазоне 101-1000');

else writeln('число вне диапазона 1-1000');
end;

readln;
END.

3. Селектор целого типа, список констант представлены перечнем констант и диапазоном:

Program Prim9;
Var i:integer;
x,m,a,b,c,d:real;
BEGIN
writeln('введите значание i');
readln(i);
writeln('введите значения x,m,a,b,c,d');
readln(x,m,a,b,c,d);

Case i of

1,2,4,8,11..20,24,28,30: writeln('y=',(x+1)/(sqr(x)+2)-ln(m)+2a/b);

31,45..55: writeln('y=',(sqr(a)+m)/sqrt(b+m)-3ab/c+d);

58,60,63..76,78,93,100: writeln('y=',sqr(x)-ax+sqr(sin(ax)-exp(x))

/(1-ln(sqr(x)-exp(х/2))));

else writeln('неправильно задано i');
end;

readln;
END.

4. Селектор знакового типа:

Program Prim10;
Var name:char;

BEGIN
writeln('введите шифр');
readln(name);

Case name of

'S','s': writeln('факультет самолето- и вертолетостроения');

'D','d': writeln(' факультет авиадвигателестороения');

'Y','y': writeln(' факультет систем управления');

'L','l': writeln(' факультет летательныхаппаратов');

'R','r': writeln(' факультет радиотехнический');

'M','m': writeln(' факультет инженерно - менеджерский');

'Z','z': writeln(' факультет заочногообучения');

else writeln('введенный шифр не соответствует ни одному из факультетов ХАИ');
end;
readln;
END.


5. Селектор перечисляемого типа:

Program Prim11;
Var season:(winter,spring,summer,autumn); rez:integer;
BEGIN
season:=spring;
Writeln('результат ord(season)=',ord(season));

case season of winter: writeln('winter');

spring: writeln('spring');

summer: writeln('summer');

autumn: writeln('autumn');

end;
readln;

END.