Умовна конструкція 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, оператора вибору, використовується для присвоювання змінній інформації про помилку.