Условная конструкция if then else позволяет нам реализовать несколько ветвлений в программе. Та же задача может быть реализована, более простым способом, с помощью оператора выбора - case of.
Синтаксис оператора case следующий:
case (выражение) of
метка1: оператор1;
метка2: оператор2;
...
меткаN: операторN
else
операторE;
end;
Где метка1..N - метки регистра или входные значения, которые могут быть целыми числами, символами, логическими или перечисляемыми элементами данных.
Оператор1..N - оператор Паскаля, каждый из них может иметь одну или несколько меток регистра, связанных с ним.
ОператорE - выполняется только в том случае, если не было совпадения метки и выражения.
Оператор case в Паскале, может содержать необязательный блок else, и должен завершается ключевым словом end.
При использовании оператора case of соблюдать следующие правила:
- Выражение, используемое в операторе case, должно иметь целочисленный, перечисляемый, логический или символьный тип данных;
- Операторы case могут быть составными, то есть быть блоками begin end, if then else, содержать в себе второй case of;
- Метка должна быть константой или литералом, и быть того же типа, что и выражение в операторе;
- Если оператору соответствует несколько меток, их записывают через запятую, или указывают диапазон значений: 1..4, ‘a’..‘c’. При этом нужно следить чтобы диапазоны не перекрывались, поскольку дублирование меток в Free Pascal запрещено;
- Если одно из значений метки регистра соответствует значению выражения, выполняется инструкция, следующая за этой меткой. После этого программа выходит из блока case;
- Если ни одна из меток case of не соответствует значению выражения, выполняется список операторов после ключевого слова else.
Рассмотрим пример программы конвертации оценок пятибалльной шкалы в текст с помощью оператора ветвления if:
{$CODEPAGE UTF8}
program RatingToText;
var
rate : integer;
begin
write('Введите оценку 1-5 ');
readln(rate);
if (rate = 1) or (rate = 2) then
writeln('Неудовлетворительно');
if rate = 3 then
writeln('Удовлетворительно');
if rate = 4 then
writeln('Хорошо');
if rate = 5 then
writeln('Отлично');
readln;
end.
Более простая запись того же кода с использованием конструкции case of:
{$CODEPAGE UTF8}
program RateToText;
var
rating : integer;
begin
write('Введите оценку 1-5 ');
readln(rating);
case(rating) of
1,2: writeln('Неудовлетворительно');
3: writeln('Удовлетворительно');
4: writeln('Хорошо');
5: writeln('Отлично');
end;
readln;
end.
Рассмотрим пример программы конвертации номера дня недели в название:
{$CODEPAGE UTF8}
program NumDayToText;
var
day : integer;
dayName : string;
begin
write('Номер дня недели ');
readln(day);
case(day) of
1: dayName := 'Понедельник';
2: dayName := 'Вторник';
3: dayName := 'Среда';
4: dayName := 'Четверг';
5: dayName := 'Пятница';
6: dayName := 'Суббота';
7: dayName := 'Воскресение'
else
dayName := 'Ошибка: Значение не определено';
end;
write(dayName);
readln;
end.
В данном примере блок else, оператора выбора, используется для присваивания переменной информации об ошибке.