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

Смотрите также: