Оператор вибору case of

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

Дивіться також: