Caseвыражение Of

список значений : оператор/блок

..................................

список значений: оператор/блок

[Elseоператор/блок]

End;

Здесь выражение - это любое выражение порядкового типа, список значений - это список разделенных запятыми константных выражений или диапазонов, диапазон - это конструкция вида константное выражение .. константное выражение. Константным будем называть любое выражение, в которое входят только неименованные и нетипизированные константы (т.е. в константное выражение не могут входить имена переменных, функции и типизированные константы). На самом деле константные выражения - это выражения, которые могут быть вычислены до выполнения программы, а отсюда уже и вытекают ограничения на их вид. Выражение, стоящее после Case, и все константные выражения должны быть все одного типа либо все иметь целочисленные типы.

Оператор выбора выполняется следующим образом: вычисляется выражение, стоящее после Case, затем просматриваются все списки значений, и, если значение выражения попало в список значений, выполняется соответствующий оператор или блок и выполнение оператора Caseзаканчивается; если значение выражения не содержится ни в одном из списков, то выполняется оператор или блок, стоящий после Else. Конструкция Else может отсутствовать, в этом случае оператор Case может не выполнить никаких действий. В качестве примера использования оператора выбора решим предыдущую задачу о правильной дате.

 

Var d,m : Byte;

y : Word;

Valid : Boolean;

Begin

Write('Введите дату ');

Read(d,m,y);

Case m Of

1,3,5,7,8,10,12 :

Case d Of 1..31 : Valid:=True

Else Valid:=False

End;

4,6,9,11 :

Case d Of 1..30 : Valid:=True

Else Valid:=False

End;

2 : Case d Of 1..28 : Valid:=True;

29 : Valid:=(y Mod 4=0)And(y Mod 100>0);

Else Valid:=False

End;

Else Valid:=False;

End;

If Valid Then WriteLn('Дата верна')

Else WriteLn('Дата не верна');

End.

 

Вы можете видеть, что задачи такого типа решаются оператором Caseгораздо проще, чем оператором If. Решим еще одну задачу: определить, какого рода символ введен - цифра, латинская буква, русская буква или ни то, ни другое и ни третье.

 

Var c : Char;

Begin

Write('Введите символ '); Read(c);

Case c Of

'0'..'9' : WriteLn('Вы ввели цифру');

' a'..'z','A'..'Z' : WriteLn('Вы ввели латинскую букву');

'а'..'п','р'..'я','А'..'Я' : WriteLn('Вы ввели русскую букву');

Else WriteLn('Вы ввели неизвестно что !');

End;

End.