Оператор ветвления IF
Организация ветвлений. Операторы выбора
СИНТАКСИЧЕСКАЯ ДИАГРАММА
Как видно из диаграммы, пустой оператор состоит только из разделителя операторов ";". Зачем он нужен? Действительно, если оператор не выполняет действий, то стоит ли его писать? Однако практика показывает, что иногда полезно иметь такое средство, например, при выполнении искусственной задержки выполнения программы:
FOR I:=1 TO 10000 DO;
При выполнении данного цикла машина переменной I последовательно присвоит значения от 1 до 10000. В теле цикла нет операторов, значит, кроме счета ничего не будет выполнено, однако время на это затрачивается, и, следовательно, некоторое время программа "висит" на данном операторе.
Существуют и другие примеры использования пустого оператора, когда по синтаксису оператор формально необходим, но никаких действий внутри него не производится.
В языке Паскаль алгоритмическая базовая конструкция выбора может быть реализована с помощью двух структурных операторов - IF и CASE, называемых операторами выбора. С помощью них можно выбрать для выполнения один из составных операторов (или ни одного оператора).
Оператор IF можно представить в виде следующей синтаксической диаграммы:
Конструкция "Условие" есть логическое выражение, которое принимает два значения типа 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.
Ниже следуют два способа вложения конструкции IF в конструкцию IF:
1 способ | 2 способ |
IF c1 THEN | IF c1 THEN |
s1 | IF c2 THEN |
ELSE IF c2 THEN | IF c3 THEN |
s2 | ELSE s2 |
ELSE IF c3 THEN | ELSE s3 |
ELSE s4 | ELSE s4 |
Первый способ предпочтительнее, чем второй, т.к. конструкция THEN-IF менее удобна, чем ELSE-IF. С помощью конструкции ELSE-IF чаще всего осуществляется выбор одного из нескольких альтернативных путей. Заметим, однако, что иногда такое вложение лучше заменить на последовательность короткой формы оператора IF-THEN. Это видно на следующем примере:
program QUARD;
var A,B,C : real; DETER : real;
begin
read(A,B,C); DETER := sqr(B)-4*A-C;
1 вариант | 2 вариант | ||
if DETER<0 then | if DETER<0 then | ||
write('Не имеет корней'); | write('Нет корней') | ||
if DETER=0 then | else | ||
write('Один корень'); | if DETER=0 then | ||
if DETER>0 then | write('Один корень') | ||
write('Два корня'); | else | ||
write('Два корня'); |
end.
Однако в Паскале существует оператор, позволяющий сделать выбор из нескольких альтернатив - множественное ветвление.