- •1 Общие положения
- •2 Выражения
- •2.1 Арифметические выражения
- •2.2 Логические выражения
- •3 Операторы передачи управления
- •3.1 Программа разветвляющейся структуры
- •3.2 Оператор безусловного перехода
- •3.3 Оператор условного перехода if
- •3.4 Оператор выбора case
- •4 Примеры выполнения заданий алгоритмов разветвляющей структуры
- •Контрольные вопросы
- •Задания для самостоятельной подготовки
- •Отчет по лабораторной работе
- •Список рекомендуемой литературы
- •Задание к лабораторной работе
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.
