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

Lazarus IDE: Основы программирования в Windows Lazarus IDE: Основы программирования в Windows

Несмотря на то, что всё потихоньку уходит в сеть, программирование для настольных компьютеров остаётся востребованным. И будет таковым ещё долго. Ну а самая распространённая операционная система для настольных компьютеров – это по-прежнему Windows. Поэтому любой программист, даже если он собирается стать веб-разработчиком, должен знать хотя бы основы создания программ для Windows. Подробнее...

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

То есть вполне работоспособным будет следующее выражение:

if x > 0 then if x <> 1 then x := 2;

Как видите, здесь после слова then следуюет ещё один оператор if. То есть после проверки условия (х > 0) мы ещё проверяем, не равен ли х единице. Второй оператор if как раз таки и является вложенным оператором, так как он входит в состав первого оператора if. Советую над этим подумать и разобраться в сути. Иначе в будущем проблем вам не избежать.

А теперь давайте попробуем усовершенствовать наш калькулятор. Как вы помните из предыдущих уроков, наш простейший калькулятор приминает от пользователя два числа и выполняет с ними операции сложения, вычитания, умножения и деления.

Однако пользователю наверняка нужно выполнить только одну операцию. Поэтому его будет раздражать вывод лишних данных. Как быть? Вариантов много. Но мы будем получать от пользователя не только два числа, но и вид операции. То есть пользователь сначала должен будет ввести два числа, а потом знак операции. Допустим, что знак операции мы прочитаем в переменную op. Тогда определить, какую операцию нужно выполнить, мы сможем с помощью такой конструкции:

if op = '+' then WriteLn('x + y = ', x + y)
  else if op = '-' then WriteLn('x - y = ', x - y)
       else if op = '*' then WriteLn('x * y = ', x * y);

Эта конструкция вполне работоспособна. Можете проверить её на практике.

Но, согласитесь, что выглядит этот код не очень “читабельно”. А если придётся проверить больше вариантов?

Для таких случаев существует оператор выбора. В некоторых источниках его называют оператор варианта. Этот оператор позволяет выбрать из нескольких вариантов. В Паскале он обозначается словом case, а вся конструкция выбора выглядит примерно так:

case ПорядковаяПеременная of
Значение_1 : Операторы_1;
Значение_2 : Операторы_2;
...        : ...;
Значение_N : Операторы_N;
else Операторы;
end;

Здесь ПорядковаяПеременная – это переменная порядкового типа (число или символ, или выражение, результатом которого является число или символ), значение которой проверяется в конструкции CASE. Если значение этой переменной равно Значение_1, то выполняются операторы, которые следуют после двоеточия за этим значением (Операторы_1). Если значение переменной ПорядковаяПеременная – равно Значение_2, то выполняются операторы, которые следуют после двоеточия за этим значением. Если же значение переменной ПорядковаяПеременная не соответствует ни одному из значений Значение_1 … Значение_N, то выполняются операторы, размещенные после слова ELSE. Обратите внимание, что перед словом ELSE стоит точка с запятой.

Если необходимо проверить, попадает ли значение ПорядковаяПеременная в какой либо диапазон, то можно записать этот диапазон следующим образом:

Case Х of
1, 4, 6   : Оператор_1;
10 .. 100 : Оператор_2;
End;

В этом случае Оператор_1 будет выполнен, если Х = 1 или Х = 4 или Х = 6, а Оператор_2 будет выполнен в том случае, если 10 <= X <= 100.

Итак, вооружившись новыми знаниями, усовершенствуем наш калькулятор. Теперь пользователь сможет выбрать операцию (одну из четырёх).

Листинг 19.2. Использование оператора выбора.
program mycalc;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var x, y  : integer;
    op    : char;

begin
  Write('x = ');
  ReadLn(x);
  Write('y = ');
  ReadLn(y);
  Write('Operation (+, -, *, /): ');
  ReadLn(op);
  case op of
  '+' : WriteLn('x + y = ', x + y);
  '-' : WriteLn('x - y = ', x - y);
  '*' : WriteLn('x * y = ', x * y);
  '/' : if y = 0 then
          WriteLn('!!! Error: Division by ZERO !!!')
        else
          WriteLn('x div y = ', x div y);
  else WriteLn('!!! Error: Unsupported operation !!!');
  end;
  ReadLn;
end.
Домашнее задание:

Повторить программу из листинга 19.2. Разобраться с принципом работы оператора выбора.


Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика