В языке Паскаль алгоритмическая базовая конструкция выбора может быть реализована с помощью двух структурных операторов – IF и CASE, называемых операторами выбора. С их помощью можно выбрать для выполнения один из составных операторов (или ни одного оператора).
4.2.1. Оператор ветвления IF
Оператор IF можно представить в виде синтаксической диаграммы, представленной на рис. 19.
Конструкция «Условие» есть логическое выражение, которое принимает два значения типа BOOLEAN: TRUE, FALSE (истинно или ложно).
Само логическое выражение складывается из операций сравнения: >, >=, <, <=, =, <>. Результат сравнения может быть TRUE или FALSE.
Логические выражения могут формироваться также и с помощью трех логических операций: NOT, AND, OR. Приоритеты всех используемых в Паскале операций таковы:
Высший: ( )
NOT *, /, DIV, MOD
AND
OR +, -
Низший: >, =, < , >=, <>, <=
В качестве условия может быть использована и логическая переменная, например:
I and J or K ---> (I and J) or K;
not X and Y ---> (not X) and Y, где I, J, K, X, Y – переменные типа BOOLEAN;
(A < B) or (B = 0), где A, B – переменные простого типа.
В операторе IF всегда за словами THEN и ELSE должен следовать один оператор. Этим оператором может быть не только оператор присваивания, но и любой другой. Если хотя бы один из них является снова оператором IF, то полученную конструкцию называют вложением.
П р и м е р :
IF <условие1> THEN <ветвь 1>
ELSE IF <условие2> THEN <ветвь 2>
ELSE <ветвь 3>;
Такое вложение используется для уменьшения числа необходимых проверок. Этот метод часто обеспечивает большую эффективность, чем составное условие, однако одновременно он уменьшает надежность программы. Не рекомендуется использовать более двух-трех уровней вложения IF. Вложения могут идти и после слова THEN.
На рис. 20, 21 представлены два способа вложения конструкции IF в конструкцию IF.
1-й способ
2-й способ
IF c1 THEN S1
IF c1 THEN IF c2 THEN IF c3 THEN S3
ELSE IF c2 THEN S2
ELSE S4
ELSE IF c3 THEN S3
ELSE S2
ELSE S4
ELSE S1
Рис. 20. Вложения операторов IF
Первый способ предпочтительнее, чем второй, так как конструкция THEN-IF менее удобна, чем ELSE-IF. С помощью конструкции ELSE-IF чаще всего осуществляется выбор одного из нескольких альтернативных вариантов. Заметим, однако, что иногда такое вложение можно заменить на последовательность операторов короткой формы IF-THEN. Это видно на следующем примере:
program QUARD;
var A, B, C : real; D : real;
begin
read (A, B, C); D := sqr (B) – 4 * A - C;
1-й вариант
2-й вариант
if D < 0 then write ('Не имеет корней');
if D < 0 then write ('Нет корней')
else if D = 0 then write ('Один корень')
if D = 0 then write ('Один корень');
if D > 0 then write ('Два корня');
else write ('Два корня');
end.
Рис. 21. Пример программы вложений
Однако в данном примере 2-й вариант более эффективен, так как имеет на одно сравнение меньше, и в случае D < 0 сразу же дает ответ, не делая последующих проверок.
В Паскале существует специальный оператор, позволяющий сделать выбор из нескольких альтернатив – множественное ветвление, или оператор варианта.
4.2.2.Оператор варианта CASE
Оператор варианта состоит из выражения и списка операторов, каждому из которых предшествует одна или более констант, называемых константами выбора, что видно из рис. 22.
Рис. 22. Синтаксическая диаграмма оператора варианта CASE