Кроме оператора if в языке программирования Паскаль предусмотрен так называемый переключатель case. Его можно трактовать как некий вопрос, имеющий большое число ответов (а не только два, как это имеет место в операторе if- else). Однако в отличие от if, case имеет ряд принципиальных ограничений. Его формат следующий:
case селектор of значение1: оператор1; значение2: оператор2; значение3: оператор3;... else операторNend;В заголовке оператора case вместо логического выражения фигурирует переменная, которую называют селектором. До этого в программе ей присваивается какое-либо значение. Эта переменная может иметь только перечисляемый тип (например, она не может быть вещественного типа). По ходу выполнения оператора case, значение переменной-селектора сравнивается с различными, описанными в нем альтернативами (метками-значениями). Как только совпадение будет найдено, то выполняется блок кода при данной метке и происходит выход в основную ветку программы. Значения-метки являются константами, которые может принимать селектор. Их тип и тип селектора должны быть совместимы по присваиванию.
|
|
Если совпадений не будет, то выполняется блок else. Если блок else отсутствует (он является не обязательным), то никакой блок кода в операторе case не выполняется.
var n: integer; begin write ('Введите класс школы: '); readln (n); case n of 1..4: writeln ('Младшие классы.'); 5..8: writeln ('Средняя школа.'); 9,11: writeln ('Старшие классы. Выпускной.'); 10: writeln ('Старшие классы.'); else writeln ('Error') end; readln end.На использование оператора выбора накладываются следующие ограничения:
· селектор должен иметь какой-либо порядковый тип;
· каждая альтернатива должна быть константой, диапазоном, списком диапазонов, но не переменной или выражением.
Вложенные конструкции if-else
Следует быть внимательными при использовании вложенных операторов if. Предпочтительнее пользоваться схемой else-if (т.е. вкладывать во внешнюю ветку else), а не then-if (т.е не вкладывать во внешнюю ветку if). Так как в последнем случае придется следить за тем, к какой ветке относится соответствующее else. Пренебрежение этим правилом приводит к нагромождению закрывающих else.
Сравните две программы ниже. Они делают одно и то же. Однако предпочтительной является первая.