Оператор варіанту

При написанні програми не рекомендується використовувати багаторазово вкладені один в один умовні оператори – програма стає громіздкою і її важко читати. Вважається, що число рівнів вкладення не повинно перевищувати двох-трьох. Однак на практиці часто зустрічаються задачі, в яких необхідно перевіряти досить багато умов і, в залежності від результату перевірки, виконувати ті чи інші дії. Для реалізації цих цілей і використовують оператор варіанту.

Оператор варіанту є узагальненням умовного оператора і дає можливість виконати одну з декількох дій в залежності від значення деякого виразу.

Оператор варіанту має наступну структуру:

  • case селектор варіанту of
    • мітка_варіанту_1 : оператор_1;
    • мітка_варіанту_n : оператор_n;
  • else
    • оператор_q;
  • end;

Селектор варіанту – змінна або вираз будь-якого скалярного типу, крім real.

Мітка варіанту – константа, тип якої збігається з типом селектора варіанта (усі мітки варіанту мають бути різні!).

Якщо одному оператору в операторі варіанту відповідають кілька міток, то вони перераховуються через кому.

Якщо мітки деякого оператора належать якому-небудь діапазону, причому без пропусків, то їх можна вказати так, як це зроблено в наведеному нижче прикладі.

Приклад:

  • case Ch of
    • 'A' .. 'Z', 'a' .. 'z' : WriteLn('буква');
    • '0' .. '9' : WriteLn('цифра');
    • '+', '-', '*', '/' : WriteLn('знак математической операции');
  • else
    • WriteLn('специальный символ');
  • end;

Оператор варіанту виконується наступним чином. На початку, обчислюється значення селектора варіанта, а потім вибирається для виконання той оператор, перед яким стоїть позначка, що має дане значення. Після – виконується наступний за ключовим словом end оператор.

Якщо відповідної мітки немає, то виконується оператор після ключового слова else. Потім відбувається перехід до першого оператора, що стоїть після оператора варіанту.

Присутність в операторі варіанту елемента else – не обов’язкова.

Якщо відповідної мітки немає, а конструкція else опущена, то відбувається перехід до першого оператора, що стоїть після оператора варіанту.

Завдання: Скласти програму WeekDay. Програма в залежності від зазначеного номера дня тижня виводить його назву.

  • Program WeekDay;
  • var
    • d: integer;
  • begin
    • Writeln('Введіть номер дня тижня');
    • Read(d);
    • case d of
      • 1: WriteLn('Понеділок');
      • 2: WriteLn('Вівторок');
      • 3: WriteLn('Середа');
      • 4: WriteLn('Четвер');
      • 5: WriteLn('П’ятниця');
      • 6: WriteLn('Субота');
      • 7: WriteLn('Неділя');
    • else
      • WriteLn('Такого дня не існує');
    • end;
  • end.