CASEвыражение OF

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

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

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

[;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записывается в виде: