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

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

  1. Печать сообщения

Введите коэффициенты квадратного уравнения:

  1. Программа останавливается и ожидает, когда пользователь наберет строку ввода:

2–86

В результате A=2, B=–8, C=6.

  1. Вычисление дискриминанта D:=Sqr(B)-4*A*C=(–8)2–4×2×6=16.

  2. (D<0)=(16<0)=False

  3. (D=0)=(16=0)=False

  4. X1:=(-B-Sqrt(D))/(2*A)=1

  5. X2:=(-B+Sqrt(D))/(2*A)=3

  6. Печать сообщения «X1=1.0 X2=3.0».

  7. Конец работы программы.

Протокол 5.2

Работа программы Quadratic при решении квадратного уравнения 2x2–8x+16=0

  1. Печать сообщения

Введите коэффициенты квадратного уравнения:

  1. Программа останавливается и ожидает, когда пользователь наберет строку ввода:

2–816

В результате A=2, B=–8, C=16.

  1. Вычисление дискриминанта D:=Sqr(B)-4*A*C=(–8)2–4×2×16=–64.

  2. (D<0)=(64<0)=True

  3. Печать сообщения «Действительных корней нет».

  4. Конец работы программы.

Протокол 5.3

Работа программы Quadratic при решении квадратного уравнения 2x2–8x+8=0

  1. Печать сообщения

Введите коэффициенты квадратного уравнения:.

  1. Программа останавливается и ожидает, когда пользователь наберет строку ввода:

2–88

В результате A=2, B=–8, C=8.

  1. Вычисление дискриминанта D:=Sqr(B)-4*A*C=(–8)2–4×2×8=0.

  2. (D<0)=(0<0)=False

  3. (D=0)=(16=0)=True

  4. X:=-B/(2*A)=8/(2*2)=2

  5. Печать сообщения «X=2.0».

  6. Конец работы программы.

Задание 5.2:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]