Урок №5
Оператор выбора
Для случаев, когда требуется выбор одного значения из произвольного количества вариантов, (оператор if позволяет сделать выбор из двух вариантов) удобнее использовать оператором выбора (переключателем) case:
case выражение of
список1: оператор1;
список2: оператор2;
. . .
списокN: операторN;
else оператор0;
end;
.
Выражение должно иметь порядковый тип (Integer или Char). Элементы списка могут перечисляются через запятую. В операторе Case точку с запятой перед Else можно ставить и можно не ставить
Пример №1. По номеру месяца m определим число дней d в нем:
program v11;
var
d, m:integer;
begin
writeln ('case');
write ('введите номер месяца ');
read (m);
case m of
1,3,5,7,8,10,12: d:=31;
2: d:=28;
4,6,9,11: d:=30;
else
writeln ('такого месяца нет');
end;
writeln (' в ', m, ' месяце ',d,' дней');
writeln;
writeln
end;
Элементы могут быть константы и диапазоны значений того же типа, что тип выражения. Диапазоны указываются в виде:
Мин. значение.. Макс. значение
Оператор диапазона записывается как два рядом стоящих символа точки. В диапазон входят все значения от минимального до максимального включительно.
Пример №2. Ввести номер месяца, вывести к какому времени году он относится
program v11;
var
d, m:integer;
begin
writeln ('case');
write ('введите номер месяца ');
read (m);
case m of
1,2,12: writeln('зима');
3..5: writeln('весна');
6..8: writeln('лето');
9..11: writeln('осень');
else
writeln ('такого месяца нет');
end;
end.
Попробуем поработать с символьными данными
Пример №3. По первой букве времени года выдадим название месяцев, которые входят в это время года (вводи «л» выводим «июнь, июль, август»)
program v11;
var
m:char;
begin
writeln ('case');
write ('введите первую букву времени года ');
readln (m);
case m of
'з': writeln('декабрь, январь, февраль');
'в': writeln('март, апрель, май');
'л': writeln('июнь, июль, август');
'о: writeln('сентябрь, октябрь, ноябрь');
else
writeln ('íневерная информация');
end;
end.
Пример №4. По заданному символу c определяет, какой это символ латинский, русский или это цифра. Надо учесть, что русские и латинские символы имеют два типа начертания прописной и строчный и что цифры при печати имеют символьный вид.
program v11;
var
m:char;
begin
writeln ('case');
write ('введите символ ');
readln (m);
case m of
'A'..'Z','a'..'z':
writeln ('латинская бкува');
'А'..'Я','а'..'я':
writeln ('русская буква');
'0'..'9':
writeln ('цифра');
else writeln ('неизвестный символ');
end;
end.
Здесь отдельные диапазоны для русских букв от "а" до "п" и от "р" до "я" связаны с тем, что между "п" и "р" в кодовой таблице DOS находится ряд небуквенных символов (см. Приложение 1).
Если по ветви оператора case нужно выполнить несколько операторов, действует то же правило, что для оператора if, т. е. ветвь алгоритма заключается в операторные скобки begin... end;.
Домашнее задание
Произвести расчета площадей геометрических фигур используя следующее меню.
Найти площадь:
1. квадрата
2. прямоугольника
3. круга
4. равнобедренной трапеции


