Оператор ветвления 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.

Однако в Паскале существует оператор, позволяющий сделать выбор из нескольких альтернатив - множественное ветвление.