список значений : оператор/блок
..................................
список значений: оператор/блок
[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.