Условный оператор позволяет в процессе выполнения программы выбирать одно из двух возможных действий в зависимости от значения логического выражения. Оператор выбора (или оператор варианта) дает возможность выполнить одно из нескольких действий в зависимости от значения скалярного выражения или выражения ограниченного типа.
Формат оператора варианта:
case <селектор> of <константа 1> : <оператор 1>; ... <константа N> : <оператор N>else <оператор>end;
Здесь <селектор> – это выражение любого порядкового типа; <константа> - постоянная величина того же типа, что и селектор, представляет собой различные значения, которые может иметь селектор варианта, называется меткой варианта. После каждой метки располагается оператор. Когда одно и то же действие необходимо выполнить для нескольких различных значений селектора варианта, эти значения можно записать в виде списка через запятую.
Выполнение оператора выбора происходит так:
§ вычисляется выражение-селектор;
§ затем в списках констант ищется такое значение, которое совпадает с полученным значением селектора;
§ далее исполняется оператор, помеченный данной константой. Если такой константы не найдено, то происходит переход к выполнению оператора, следующего после else. Эта ветка является необязательной.
Изображение оператора варианта на блок-схеме приведено на рисунке.
Изображение оператора варианта на блок-схеме
Селектор интервального типа:
case I of 1..10 : writeln('число ', I:4, ' в диапазоне 1 - 10'); 11..20 : writeln('число ', I:4, ' в диапазоне 11 - 20'); 21..30 : writeln('число ', I:4, ' в диапазоне 21 - 30')else writeln('число ', I:4, ' вне пределов контроля')end;
Селектор целочисленного типа:
case I of 1 : Z := I + 10; 2 : Z := I + 100; 3 : Z := I + 1000end;
Селектор перечисляемого пользовательского типа:
var Season: (Winter, Spring, Summer, Autumn);begin . . . case Season of Winter: writeln('Зима'); Spring: writeln('Весна'); Summer: writeln('Лето'); Autumn: writeln('Осень') end;end.
Пример программы с использованием оператора case, которая по введенному номеру дня недели выводит на экран его название на русском языке.
program Day_Week;var Day: byte;begin write('Введите номер дня недели: '); readln(Day); case Day of {Вычисление значения селектора и выбор} 1: writeln('Понедельник'); 2: writeln('Вторник'); 3: writeln('Среда'); 4: writeln('Четверг'); 5: writeln('Пятница'); 6: writeln('Суббота'); else 7: writeln('Воскресенье'); end;end.
В отличие от оператора If перед else и end можно ставить точку с запятой. Оператор варианта всегда можно заменить набором условных инструкций, но не рекомендуется.