Условный оператор с несколькими условиями

Вышеприведённая схема каскада условных операторов используется достаточно часто, поэтому ряд языков программирования содержит специальную конструкцию для неё, позволяющую записать множественное ветвление несколько компактнее и менее подверженную ошибкам написания:

if условие1 then команды1elsif условие2 then команды2elsif условие3 then команды3...else командыN end;

порядок выполнения этого оператора в точности соответствует вышеприведённому каскаду простых операторов if-then-else, а отличие чисто формальное: вместо вложенных нескольких условных операторов эта конструкция является единым целым и содержит дополнительное ключевое слово elsif, требующее после себя очередное условие.

[править]Реализация

[править]Algol, Pascal

Паскаль унаследовал от Алгола-60 синтаксис, согласно которому в ветвях условного оператора может быть помещена только одна команда. Поэтому для размещения там большего количества команд они группируются в составной оператор с помощью пары ключевых слов begin и end. Ветвь else необязательна. begin и end необходимы, только если операторов несколько (например, из соображений единообразия оформления кода). В примере — оператор выбора в Паскале:

If условие then begin операторы; end else begin операторы; end;

Оператор выбора (CASE OF). Его параметры, синтаксис.

Условный оператор позволяет в процессе выполнения программы выбирать одно из двух возможных действий в зависимости от значения логического выражения. Оператор выбора (или оператор варианта) дает возможность выполнить одно из нескольких действий в зависимости от значения скалярного выражения или выражения ограниченного типа.

Формат оператора варианта:

case <селектор> of <константа 1> : <оператор 1>; ... <константа N> : <оператор N>else <оператор>end;

Здесь <селектор> – это выражение любого порядкового типа; <константа> - постоянная величина того же типа, что и селектор, представляет собой различные значения, которые может иметь селектор варианта, называется меткой варианта. После каждой метки располагается оператор. Когда одно и то же действие необходимо выполнить для нескольких различных значений селектора варианта, эти значения можно записать в виде списка.

Выполнение оператора выбора происходит так:

§ вычисляется выражение-селектор;

§ затем в списках констант ищется такое значение, которое совпадает с полученным значением селектора;

§ далее исполняется оператор, помеченный данной константой. Если такой константы не найдено, то происходит переход к выполнению оператора, следующего после else.

Изображение оператора варианта на блок-схеме приведено на рисунке.

Условный оператор с несколькими условиями - student2.ru

Изображение оператора варианта на блок-схеме

Примеры использования

Селектор интервального типа:

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.

В данном примере на экран выводится приглашение "Введите номер дня недели: ", с клавиатуры считывается целочисленное значение дня недели и присваивается переменной Day. Затем, в зависимости от значения селектора Day, обеспечивается реализация того оператора, константа выбора которого равна текущему значению селектора. Например, если значение Day равно 3, то реализуется оператор writeln('Среда'). Если значение Day равно 7, а ни одна из констант не равна этому значению селектора, то выполняется оператор, стоящий за словом else (на экран выводится текст "Воскресенье"). Если слово else отсутствует, то активизируется оператор, находящийся за словом end, т.е. первый оператор, за границей case. Если значение Day не равно значению ни одной из констант выбора (например, Day=8 или Day=0), то активизируется оператор, находящийся за словом end, т.е. первый оператор за границей case - оператор end.

Наши рекомендации