список значений :оператор/блок
..................................
список значений :оператор/блок
[;ELSEоператор/блок]
END;
Здесь выражение - это любое выражение порядкового типа, список значений - это список разделенных запятыми константных выражений или диапазонов, диапазон - это конструкция вида константное выражение ..константное выражение. Константным будем называть любое выражение, в которое входят только неименованные и нетипизированные константы (т.е. в константное выражение не могут входить имена переменных, функции и типизированные константы). На самом деле константные выражения - это выражения, которые могут быть вычислены до выполнения программы, а отсюда уже и вытекают ограничения на их вид. Выражение, стоящее после CASE, и все константные выражения должны быть одного типа либо все иметь целочисленные типы. Обратите внимание, что в операторе выбора перед ELSE";" может стоять в отличие от условного оператора.
Оператор выбора выполняется следующим образом: вычисляется выражение, стоящее после 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.
Решим еще одну задачу: определить, какое число, меньшее 1000, введено пользователем.
var N:Word;
begin writeln('Введите натуральное число N<1000');
readln(N);
case N of
0..9: writeln('однозначное');
10..99: writeln('двузначное');
100..999: writeln('трехзначное')
else writeln('Число "N" не входит в указанный диапазон')
end;
readln;
end.
11. Операторы цикла
Для реализации циклических алгоритмов, т.е. алгоритмов, содержащих многократно повторяющиеся одинаковые операции, применяются специальные операторы цикла. В Паскале есть три вида циклов: FOR, WHILEи REPEAT. Оператор цикла FORзаписывается в виде: