Оператор выбора
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.
Итак, вооружившись новыми знаниями, усовершенствуем наш калькулятор. Теперь пользователь сможет выбрать операцию (одну из четырёх).
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. Разобраться с принципом работы оператора выбора.