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

Что делать, чтобы стать программистом Что делать, чтобы стать программистом

Многие сегодня хотят стать программистами. Хотят. Но ничего не делают для этого. Не делают даже простых вещей. Не хотят даже прочитать книжку из 10 страниц. В итоге так и остаются никем. Потому что мечты не сбываются никогда. Сбываются только планы… Подробнее...

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

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