2.5.1. Операторы выбора
Как вы уже знаете одним из трех основных действий (см ) является «ВЫБОР». "Выбор" того или иного действия происходит при выполнении или невыполнении определенного условия. По этому перед рассмотрением формата операторов выбора применяемых в языке Pascal, рассмотрим два вида операций: Булевские (логические) операции и операции отношения.
Булевские (логические) операции
Результатом выполнения булевских (логических) операций является одно из двух значений: True – истина, False – ложь.
В таблице приведены виды булевских (логических) операций и типы результатов получаемых при различных типах операторов.
Операции
|
Действие
|
Тип операндов
|
Тип результата
|
Унарная
|
Not
|
Логическое отрицание
|
Булевский
|
Булевский
|
Бинарная
|
And
|
Логическое И
|
Булевский
|
Булевский
|
Or
|
Логическое ИЛИ
|
Булевский
|
Булевский
|
Xor
|
Логическое исключающие ИЛИ
|
Булевский
|
Булевский
|
Операции отношения
Действие операций отношения соответствуют их математическому пониманию. Результатом этих операций является булевское выражение (True, False), например:
Отношение
|
Результат
|
3=5
|
False (ложь)
|
3<5
|
True (истина)
|
3<>5
|
True (истина)
|
3>5
|
False (ложь)
|
Оператор if … then
Оператор имеет следующий формат
If <условие> then <действие1> else <действие2>;
Как мы уже отмечали, если при невыполнении условия мы не производим никаких действий, то:
If <условие> then <действие1>;
Перед ключевым словом else символ ";" никогда не ставится.
program Primer_5;
var
Chislo1,Chislo2:Integer;
Resultat:Real;
Znak:Char;
procedure Init;
begin
Writeln('Insert chislo 1');
Readln(Chislo1);
Writeln('Insert Znak');
Readln(Znak);
Writeln('Insert chislo 2');
Readln(Chislo2);
end;
procedure Work;
begin
if znak = '+' then resultat:=chislo1 + chislo2;
if znak = '-' then resultat:=chislo1 - chislo2;
if znak = '*' then resultat:=chislo1 * chislo2;
if znak = '/' then resultat:=chislo1 / chislo2;
if znak = 'd' then resultat:=chislo1 div chislo2;
if znak = 'm' then resultat:=chislo1 mod chislo2;
end;
procedure Exi;
begin
writeln(resultat);
end;
begin
Init;
Work;
Exi;
end.
Если вы проведете трассировку данной программы, то вы безусловно заметите, что даже если знаком действия был знак "+" , то программа будут проверять все остальные возможности. То есть вне зависимости от знака программа выполнит 6 действий сравнения. Можно ли уменьшить количество сравнений, то есть увеличить скорость выполнения программы? Оказывается можно. Для этого воспользуемся вложенными операторами выбора. Изменения коснутся только процедуры Work, поэтому текст других процедур приводить не будем.
procedure Work;
begin
if znak = '+' then resultat:=chislo1 + chislo2 else
if znak = '-' then resultat:=chislo1 - chislo2 else
if znak = '*' then resultat:=chislo1 * chislo2 else
if znak = '/' then resultat:=chislo1 / chislo2 else
if znak = 'd' then resultat:=chislo1 div chislo2 else
if znak = 'm' then resultat:=chislo1 mod chislo2;
end;
В данном примере, если znak = '+', то программа просуммирует два числа и прекратит проверку других условий. Если znak <> '+', то программа проверит следующее условие znak = '-'. Проверка условия будет происходить до тех пор пока условие не выполниться. Можно ожидать, что данная программа будет работать в среднем в 2 раза быстрее, чем предыдущая.
Оператор case
Вторым оператором выбора в языке Паскаль является оператор выбора Case. Оператор выбора Case является обобщением оператора if , он дает возможность выполнять один из нескольких действий в зависимости от значения ключа. Основной формат является следующим:
Case <Имя ключа> of
<Первое значение ключа> : <Действие 1>;
<Второе значение ключа > : < Действие 2>;
. . . .
< N-ое значение ключа > : < Действие N>
else < Действие >
end;
Перепишем программу с использованием оператора case, изменения будут затрагивать только процедуру Work:
procedure Work;
begin
case znak of
'+': resultat:=chislo1 + chislo2;
'-': resultat:=chislo1 - chislo2;
'*': resultat:=chislo1 * chislo2;
'/': resultat:=chislo1 / chislo2;
'd': resultat:=chislo1 div chislo2;
'm': resultat:=chislo1 mod chislo2
else resultat:=0;
end;
end;
Проведите трассировку программы, сравните процесс работы с предыдущими программами. Заметьте, что если вы введете знак действия отличный от +,-,/,*,d,m, то программа выдаст результат равный нулю. Сохраните эту программу под именем Primer_6.pas.
5>
Достарыңызбен бөлісу: |