Оператор выбора
Оператор выбора позволяет выбрать одно из нескольких возможных продолжений программы. Параметром, по которому осуществляется выбор, служит ключ выбора – выражение любого порядкового типа (любого из рассмотренных, кроме типов REAL и STRING, см. гл. 4).
Структура оператора выбора такова:
CASE <ключ_выбора> OF <список_выбора> [ELSE <операторы>] END
Здесь:
- CASE, OF, ELSE, END – зарезервированные слова (случай, из, иначе, конец);
- <ключ_выбора> – ключ выбора;
- <список_выбора> – одна или более конструкций вида:
- <константа_выбора>: <оператор>;
- <константа_выбора> – константа того же типа, что и выражение<ключ_выбopa>;
- <операторы> – произвольные операторы Турбо Паскаля.
Оператор выбора работает следующим образом. Вначале вычисляется значение выражения <ключ_выбора>, а затем в последовательности операторов <список_выбора> отыскивается такой, которому предшествует константа, равная вычисленному значению. Найденный оператор выполняется, после чего оператор выбора завершает свою работу. Если в списке выбора не будет найдена константа, соответствующая вычисленному значению ключа выбора, управление передается операторам, стоящим за словом ELSE. Часть ELSE <оператор> можно опускать. Тогда при отсутствии в списке выбора нужной константы ничего не произойдет и оператор выбора просто завершит свою работу.
Составим программу (пример 2.8), имитирующую работу микрокалькулятора. Программа вводит две строки: первая содержит два произвольных числа, разделенных пробелом, вторая – символ арифметического действия, например:
2 2 *
…или:
18.35 0.12 /
Над введенными числами осуществляется соответствующее действие и результат выводится на экран. Признаком конца работы программы служит ввод любого символа, отличного от +, -, *, /.
Пример 2.8.
Program Calc; {Программа вводит два числа в первой строке и один из знаков +, -, *, / – во второй и выводит на экран результат соответствующего арифметического действия} var operation: Char; {Знак операции} х, у, z: Real; {Операнды и результат } stop: Boolean; {Признак ошибочной операции и останова} begin stop: = false; repeat WriteLn; {Пустая строка-разделитель} Write('x,y= '); ReadLn(x,y); Write('операция: '); ReadLn(operation); case operation of
' + ': | z: = | x + y; |
' – ': | z: = | x – y; |
' * ': | z: = | x * y; |
' / ': | z: = | x / y; |
else | ||
stop | := true; | |
end; | ||
if not | stop | then |
WriteLn('результат=',z) until stop end.
Любому из операторов списка выбора может предшествовать не одна, а несколько констант выбора, разделенных запятыми. Например, следующая программа при вводе одного из символов: у или Y выведет на экран слово "Да", а при вводе n или N – слово "Нет":
var ch: Char; begin ReadLn (ch); case ch of 'n','N': WriteLn ('Нет'); 'y','Y': WriteLn ('Да') end end.