Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разветвляющиеся структуры.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
351.74 Кб
Скачать

3.3 Оператор условного перехода if

Полная форма условного оператора имеет вид:

if < логическое_выражение > then оператор_1 [else оператор_2];

Если логическое выражение истинно, то выполняется оператор 1; иначе выполняется оператор 2. Квадратные скобки в записи полной формы условного оператора означают, что конструкция else с оператором 2 может отсутствовать. В этом случае имеем краткую форму условного оператора:

if логическое выражение_ then оператор 1.

Например:

if A>25 then Y: =X-6;

Z: =SUM+1

В этом фрагменте представлено два независимых оператора. Один из них условный, другой оператор присваивания. Если условие А>25 истинно, то вычисляется значение Y и происходит передача управления на вычисления значения Z.

Если условие А>25 ложно, т. е. А 25, то сразу выполняется оператор присваивания Z=SUM+1.

Целесообразно при написании программ использовать следующую форму записи оператора if:

if логическое выражение then

оператор 1

else

оператор 2

Следует помнить, что перед else точка с запятой не ставится.

Оператор 1,2-это простые или составные операторы. Если логическое выражение истинно, то выполняется оператор 1, иначе - оператор 2 (или следующий за if оператор, если else отсутствует). В качестве операторов 1,2 могут использоваться другие операторы if. В этом случае каждое else относится к ближайшему слева if, не имеющему else.

Условные операторы имеют вложенную конструкцию, когда после then или else используется также условный оператор. При этом справедливо следующее правило: else всегда относится к ближайшему слева оператору if.

Действие условного оператора можно расписать путем использования составного оператора. В этом случае после слов then и else могут быть составные операторы;

if < логическое_выражение> then

begin

оператор 1;

оператор 2;

. . . . . . . . . . .

оператор n-1;

оператор n

end

else

begin

оператор 1;

оператор 2;

. . . . . . . . . .

оператор n-1;

оператор n;

end

Перед служебным словом else не ставится знак точки с запятой. Внутри составных операторов могут быть также условные операторы, содержащие простые или составные операторы.

Пример 1.

Для программной реализации этих вычислений можно использовать вложенную конструкцию условного оператора.

if x>0 then

if x>=1 then

Y: =Sqrt(X)*Sin(X)

else

Y: =Exp(1/3*Ln(X))*Cos(X)

else

Y: =Exp(1/4*Ln(Abs(X)))/4;

или

 

if X>=1 then

Y: =Sqrt(X)*Sin(X)

 

else

if X>0 then

Y: =Exp(1/3*Ln(X))*Cos(X)

else

Y: =Exp(1/4)*Ln(Abs(X)))/4;

Второй вариант записи более предпочтителен с точки зрения удобства чтения и наглядности программы.

Пример 2. Запишем оператор if для следующей алгебраической схемы:

if A=B then

if C<D then

X: =1

else

X: =2

else

X: =3;

Заметим, что точка с запятой ставится в конце оператора. Этот же оператор можно записать с использованием трех операторов if:

if (A=B) and (C<D) then X: =1;

if (A=B) and (C>=D) then X: =2;

if A<>B then X: =3;

В этом примере наличие скобок в логических выражениях операторов if является обязательным, так как операции сравнения имеют более низкий приоритет, чем логические операции. Ввиду этого следующий оператор if не приведет к желаемой цели

if A=B and C=D then

X: =1;

В состав условного оператора может входить только один оператор. Если в какую либо ветвь требуется вставить несколько операторов, то они объединяются в один составной оператор, для чего в начале записывается слово begin (начало), а в конце служебное слово end (конец).

Пример 3. Составить программу для вычисления следующего выражения:

где a=2, 34*10 ; b=17, 2

program raz1;

const

A=2. 34E+2;

B=17. 2;

var

K, K1, K2: real;

begin

K1: =Sqrt(15*A*A+21*B*B);

K2: =Sqrt(15*B*B+21*A*A);

if A>B then

K: =K1;

if (A>1) and (A<=B) then

K: =K2;

if A<=1 then

Writeln (' Результат не определен ' )

else

Write (' K=', k )

end.

Другой менее удачный вариант этой же программы:

Program raz2;

label 10;

const

A=2.34E+2;

B=17. 2;

var

K: real;

begin

if A>B then

K: =Sqrt(15*A*A+21*B*B);

if (A>1) and (A<=B) then

K: =Sqrt(15*B*B+21*A*A);

if A<=1 then

begin

write (' Результат не определен' );

goto 10;

end;

Write(' K=', K);

10: ;

end.