- •5. Алгоритмы с разветвлением
- •5.1. Пример алгоритма с разветвлением
- •1) Постановка задачи:
- •2) Выбор метода решения и проектирование
- •5.2. Условный оператор
- •5.3. Составной оператор
- •2) Текст программы
- •3) Текст программы
- •3) Теcтирование и отладка программы
- •1) Постановка задачи:
- •2) Выбор метода решения и проектирование
- •5.4. Простейшие логические операции и выражения
- •5.5. Задания для самостоятельного выполнения
5.3. Составной оператор
В примерах, разобранных выше, в случае истинности (ложности) логического выражения управление передавалось оператору, который определял какую-то одну более или менее простую инструкцию: X:=1, или X:=-10, или X:=Sqr(A)+Sqrt(B), или WriteLn(A,B) и т.д. Часто возникает необходимость передать управление на целую серию инструкций. Вернемся к задаче нахождения корней квадратного уравнения. На рисунке 5.1 пунктиром отмечены действия, которые необходимо выполнять при выполнении тех или иных условий. Так, если дискриминант отрицательный, то необходимо только напечатать соответствующее сообщение «Действительных корней нет». Если же он положителен, то этих действий уже три:
1) вычислить значение x1;
2) вычислить значение x2;
3) напечатать получившиеся результаты x1, x2.
Несколько элементарных действий можно объединять в блок. Для этого вводится понятие составного оператора:
Составной оператор может включать в себя несколько более простых операторов (в том числе составных). Рассмотрим несколько примеров с использованием составных операторов.
Фрагмент программы |
Комментарии |
X:=5; if X>0 then begin A:=’круть’; B:=’верть’; end else begin A:=’верть’; B:=’круть’; end; WriteLn(A,’–’,B); |
Т.к. логическое выражение X>0 истинно, управление передается составному оператору
begin A:=’круть’; B:=’верть’; end.
В результате работы приведенного фрагмента программы на экран поступит сообщение круть–верть |
X:=–5; if X>0 then begin A:=’круть’; B:=’верть’; end else begin A:=’верть’; B:=’круть’; end; WriteLn(A,’–’,B); |
Т.к. логическое выражение X>0 ложно, управление передается составному оператору
begin A:=’верть’; B:=’круть’; end;
В результате работы приведенного фрагмента программы на экран поступит сообщение верть–круть |
Используя понятие составного оператора не трудно программно реализовать алгоритм нахождения действительных корней квадратного уравнения, представленный блочной схемой на рисунке 5.11.
2) Текст программы
program Quadratic;
var
A,B,C,D,X,X1,X2: Real;
begin
Write(’Введите коэффициенты квадратного уравнения:’);
ReadLn(A,B,C);
D:=Sqr(B)-4*A*C;
if D< 0 then
WriteLn(’Действительных корней нет’)
else
if D=0 then
begin
X:=-B/(2*A);
WriteLn(’X=’, X:5:1);
end
else
begin
X1:=(-B-Sqrt(D))/(2*A);
X2:=(-B+Sqrt(D))/(2*A);
WriteLn(’X1=’,X1:5:1,’ X2=’, X2:5:1);
end;
ReadLn;
end.
В Протоколах 5.1, 5.2, 5.3 продемонстрированы различные варианты работы программы. Проанализировав их, вы легко можете убедиться, что в отличие от линейных алгоритмов, ход выполнения программы с разветвлением может зависеть от исходных данных.
Протокол 5.1
Работа программы Quadratic при решении квадратного уравнения 2x2–8x+6=0
Печать сообщения
Введите коэффициенты квадратного уравнения:
Программа останавливается и ожидает, когда пользователь наберет строку ввода:
2–86
В результате A=2, B=–8, C=6.
Вычисление дискриминанта D:=Sqr(B)-4*A*C=(–8)2–4×2×6=16.
(D<0)=(16<0)=False
(D=0)=(16=0)=False
X1:=(-B-Sqrt(D))/(2*A)=1
X2:=(-B+Sqrt(D))/(2*A)=3
Печать сообщения «X1=1.0 X2=3.0».
Конец работы программы.
Протокол 5.2
Работа программы Quadratic при решении квадратного уравнения 2x2–8x+16=0
Печать сообщения
Введите коэффициенты квадратного уравнения:
Программа останавливается и ожидает, когда пользователь наберет строку ввода:
2–816
В результате A=2, B=–8, C=16.
Вычисление дискриминанта D:=Sqr(B)-4*A*C=(–8)2–4×2×16=–64.
(D<0)=(64<0)=True
Печать сообщения «Действительных корней нет».
Конец работы программы.
Протокол 5.3
Работа программы Quadratic при решении квадратного уравнения 2x2–8x+8=0
Печать сообщения
Введите коэффициенты квадратного уравнения:.
Программа останавливается и ожидает, когда пользователь наберет строку ввода:
2–88
В результате A=2, B=–8, C=8.
Вычисление дискриминанта D:=Sqr(B)-4*A*C=(–8)2–4×2×8=0.
(D<0)=(0<0)=False
(D=0)=(16=0)=True
X:=-B/(2*A)=8/(2*2)=2
Печать сообщения «X=2.0».
Конец работы программы.
Задание 5.2:
