RSS

2.4.4 Оператор выбора

Оператор выбора позволяет выбрать одно из нескольких возможных продолжений программы. Параметром, по которому осуществляется выбор, служит ключ выбора -выражение любого порядкового типа (любого из рассмотренных, кроме типов 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.