Другая структура принятия решений в Pascal – оператор case. Каждый оператор case можно заменить эквивалентным ему оператором if, однако обратное неверно – не всякий оператор if можно заменить эквивалентным case. Тем не менее, оператор case используется довольно часто и поддерживается почти во всех языках высокого уровня. Общий синтаксис оператора case имеет вид
case выражение of
список_значений_ 1: оператор1;
список_значений_ 2: о ператор2;
.
.
.
список_значений_ N: оператор N;
else о ператор X;
end;
В этом синтаксисе выражение сравнивается с выражениями каждого списка. Оно должно быть выражением порядкового типа, т.е. типа Integer, Char, Boolean или других подобных типов. Кроме того, каждое выражение в списках должно быть порядковым и вычисляемым во время компиляции. Например, в списках допустимы выражения 12, True, 4 - 9 * 5 или Integer('Z')
Переменные и вызовы большинства функций в списках значений недопустимы. С писок_значений может также содержать поддиапазон, имеющий форму первое_значени.. последнее_значение, оба из которых должны быть порядковыми, причем первое_значение £ последнее_значение. И наконец, список_значений может быть представлен в форме значение 1, значение 2,..., значениеN в которой каждое значение является порядковым значение или поддиапазоном порядковых значений.
|
|
Оператор case может содержать любое количество списоков_значений и только одно предложение else. Выполнение оператора case аналогично выполнению структуры if-then-else. Если значение управляющего выражения совпадает с любым значением из какого-либо списка, то выполняются операторы этого списка. Затем управление передается на оператор, следующий за оператором case (происходит выход из оператора case). Если управляющее выражение совпадает с значением, присутствующими в нескольких списках, то выполняются операторы самого верхнего из этих списков. Если управляющее выражение не совпадает ни с одним из значений в списках, то выполняются операторы Х предложения else. Включение предложения else в оператор case не обязательно, однако оно гарантирует, что код обработает любое непредвиденное значение управляющего выражения. Если управляющее выражение не совпадает ни с одним из значений в списках и предложение else отсутствует, то не выполняется ни один оператор и происходит выход из оператора case.
Операторы case можно вкладывать друг в друга аналогично вложенным операторам if. Каждый вложенный оператор case должен иметь ассоциированное с ним ключевое слово end.
Рассмотрим использования оператора case на примере приведенном ниже.
program prog_case;
var chChar: Char;
Begin
writeln("Enter a symbol ');
readln(chChar);
case сhChar of
'A'..'Z': writeln(chChar,' uppercase letter.')
'a'..'z': writeln(chChar,' lowercase letter.')
'0'..'9': writeln(chChar,' number.')
' ': writeln(chChar,' space.')
else writeln(chChar,' other symbol.')
readln;
end.