Слайд 1Лекция 5
Алгоритмы с разветвлением
Слайд 2Блок принятия решения
Событие 1
Событие 2
Сложное решение
Событие 3
Рекомендация: при отсутствии
навыков декомпозиции
сложной
задачи предпочтение следует
отдавать простым решениям
Слайд 3Задание 5.1:
Постановка задачи:
a, b, c – действительные числа. Требуется
найти действительные корни квадратного уравнения
5.1. Пример алгоритма с разветвлением
Слайд 4Начало
Конец
Ввод a, b, c
Печать x
Печать сообщения
"Действительных корней нет"
Печать x1
и x2
d0
Действия, которые выполняются при d ≥ 0
Действия, которые выполняются при d>0
Действия, которые выполняются при d<0
Действия, которые выполняются при d=0
Да, d<0
Да, d>0
Слайд 55.2. Условный оператор
Если истинно ( = True),
то управление передается на , если же
не выполнилось (<логическое выражение> = False),
то начинает работать <оператор 2>. После того, как один из этих двух
операторов отработал (или отсутствует), программа продолжает
выполняться линейно: начинает работать та ее часть, которая
находится непосредственно за условным оператором.
Слайд 6Контрольные примеры:
Контрольный пример 1: 2x2–8x+6=0
Исходные данные:
A=2 B= -8 С=6
Ожидаемый
результат:
Контрольный пример 2: 2x2–8x+16=0
Исходные данные:
A=2 B= -8 С=16
Ожидаемый результат:
Контрольный пример
3: 2x2–8x+16=0
Исходные данные:
A=2 B= -8 С=8
Ожидаемый результат:
x1=1 x2=3
Действительных корней нет
x=2
Слайд 9Начало
Конец
Ввод a, b, c
Печать x
Печать сообщения
"Действительных корней нет"
Печать x1
и x2
d0
Действия, которые выполняются при d ≥ 0
Действия, которые выполняются при d>0
Действия, которые выполняются при d<0
Действия, которые выполняются при d=0
Да, d<0
Да, d>0
Слайд 105.3. Составной оператор
Простым оператором является такой оператор, который не содержит
в себе других операторов.
Структурные операторы строятся из других операторов,
порядок выполнения которых должен быть последовательным (составные операторы и операторы над записями), определяемым условной передачей управления (условные операторы) или повторяющимся (операторы цикла).
Составной оператор — конструкция языка программирования, состоящая из нескольких простых команд (операторов) языка программирования, но участвующая в программе в качестве единого оператора.
Слайд 12В случае невыполнения условия d
сложной структурой
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-Sqr(D))/(2*A);
X2:=(-B+Sqr(D))/(2*A);
WriteLn(’X1=’,X1:5:1,’ X2=’, X2:5:1);
end;
ReadLn;
end.
Слайд 13Контрольный пример 1: 2x2–8x+6=0
Исходные данные:
A=2 B= -8 С=6
Ожидаемый результат:
x1=1 x2=3
Протокол 5.1
Работа программы Quadratic при решении квадратного уравнения 2x2–8x+6=0
1. Печать сообщения
Введите коэффициенты квадратного уравнения:
2. Программа останавливается и ожидает, когда пользователь наберет строку ввода:
2–86
В результате A=2, B=–8, C=6.
3. Вычисление дискриминанта D:=Sqr(B)-4*A*C=(–8)2–4×2×6=16.
4. (D<0)=(16<0)=False
5. (D=0)=(16=0)=False
6. X1:=(-B-Sqr(D))/(2*A)=1
7. X2:=(-B+Sqr(D))/(2*A)=3
8. Печать сообщения «X1=1.0 X2=3.0».
9. Конец работы программы.
Слайд 14Контрольный пример 2: 2x2–8x+16=0
Исходные данные:
A=2 B= -8 С=16
Ожидаемый результат:
Действительных корней
нет
Протокол 5.2
Работа программы Quadratic при решении квадратного уравнения 2x2–8x+16=0
1. Печать сообщения
Введите коэффициенты квадратного уравнения:
Программа останавливается и ожидает, когда пользователь наберет строку ввода:
2–816
В результате A=2, B=–8, C=16.
2. Вычисление дискриминанта D:=Sqr(B)-4*A*C=(–8)2–4×2×16= –64.
3. Печать сообщения «Действительных корней нет».
4. (D<0)=(16<0)=False
5. Конец работы программы.
Слайд 15Контрольный пример 3: 2x2–8x+16=0
Исходные данные:
A=2 B= -8 С=8
Ожидаемый результат:
x=2
Протокол 5.2
Работа программы Quadratic при решении квадратного уравнения 2x2–8x+8=0
1. Печать сообщения
Введите коэффициенты квадратного уравнения:.
Программа останавливается и ожидает, когда пользователь наберет строку ввода:
2–88
В результате A=2, B=–8, C=8.
2. Вычисление дискриминанта D:=Sqr(B)-4*A*C=(–8)2–4×2×8=0.
3. (D<0)=(0<0)=False
4. (D=0)=(16=0)=True
5. X:=-B/(2*A)=8/(2*2)=2
6. Печать сообщения «X=2.0».
7. Конец работы программы.
Слайд 16Для улучшения читабельности программ стандарт структурного программирования предписывает оформлять их
шрифтом Courier New с отступами. Принцип расстановки отступов:
В одной
строке печатается не более 1 простого оператора.
Если оператор составной и/или не может быть напечатан в одну строку – он размещается в нескольких строках. При этом все последующие строки печатаются с одинаковым отступом относительно первой строки. Стандарт рекомендует количество отступов брать кратным 2.
Слайд 17program Quadratic;
var
A,B,C,D,X,X1,X2: Real;
begin
Write(’Введите коэффициенты квадратного уравнения:’);
ReadLn(A,B,C);
D:=Sqr(B)-4*A*C;
if D
нет’)
else
if D=0 then
begin
X:=-B/(2*A);
WriteLn(’X=’, X:5:1);
end
else
begin
X1:=(-B-Sqr(D))/(2*A);
X2:=(-B+Sqr(D))/(2*A);
WriteLn(’X1=’,X1:5:1,’ X2=’, X2:5:1);
end;
end.
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-Sqr(D))/(2*A);
X2:=(-B+Sqr(D))/(2*A);
WriteLn(’X1=’,X1:5:1,’ X2=’, X2:5:1);
end;
ReadLn;
Слайд 18program Quadratic;
var
A,B,C,D,X,X1,X2: Real;
begin
Write(’Введите коэффициенты квадратного уравнения:’);
ReadLn(A,B,C);
D:=Sqr(B)-4*A*C;
if D
ReadLn;
end.
WriteLn(’Действительных корней нет’)
if D=0 then
begin
X:=-B/(2*A);
WriteLn(’X=’, X:5:1);
end
else
begin
X1:=(-B-Sqr(D))/(2*A);
X2:=(-B+Sqr(D))/(2*A);
WriteLn(’X1=’,X1:5:1,’ X2=’, X2:5:1);
end;
Слайд 19program Quadratic;
var
A,B,C,D,X,X1,X2: Real;
begin
Write(’Введите коэффициенты квадратного уравнения:’);
ReadLn(A,B,C);
D:=Sqr(B)-4*A*C;
if D
D=0 then
else
ReadLn;
end.
begin
X:=-B/(2*A);
WriteLn(’X=’, X:5:1);
end
begin
X1:=(-B-Sqr(D))/(2*A);
X2:=(-B+Sqr(D))/(2*A);
WriteLn(’X1=’,X1:5:1,’ X2=’, X2:5:1);
end;
Слайд 20program Quadratic;
var
A,B,C,D,X,X1,X2: Real;
begin
Write(’Введите коэффициенты квадратного уравнения:’);
ReadLn(A,B,C);
D:=Sqr(B)-4*A*C;
if D
D=0 then
begin
end
else
begin
end;
ReadLn;
end.
X:=-B/(2*A);
WriteLn(’X=’, X:5:1);
X1:=(-B-Sqr(D))/(2*A);
X2:=(-B+Sqr(D))/(2*A);
WriteLn(’X1=’,X1:5:1,’ X2=’, X2:5:1);
Слайд 21Задание 5.2:
Постановка задачи:
Заданы три целых числа a, b, c.
Требуется вывести их на экран дисплея в порядке возрастания.
Слайд 22Т.к. a≤b, ясно, что a должно печататься раньше, чем b.
Остается выяснить, в каком месте печатать c: после b, перед
a или между a и b.
Слайд 23program Sorting;
var
A,B,C: Integer;
begin
Write(‘Введите три целых числа: ‘);
ReadLn(A,B,C);
if A
WriteLn(A:3,B:3,C:3) {вариант 1}
else
if A<=C then
WriteLn(A:3,C:3,B:3) {вариант 2}
else
WriteLn(C:3,A:3,B:3) {вариант 5}
else
if C<=B then
WriteLn(C:3,B:3,A:3) {вариант 6}
else
if C<=A then
WriteLn(B:3,C:3,A:3) {вариант 4}
else
WriteLn(B:3,A:3,C:3); {вариант 3}
ReadLn;
end.
Слайд 24Работа программы Sorting при значениях A=7, B=5, C=8
1. Печать сообщения
Введите три целых числа:
2. Программа останавливается
и ожидает, когда пользователь наберет строку ввода:
758
В результате A=7, B=5, C=8.
3. (A≤B)=(7≤5)=False {Возможными остаются варианты 3, 4, 6}.
4. (C≤B)=(8≤5)=False {Возможными остаются варианты 3, 4}.
5. (C≤A)=(8≤7)=False {Остается вариант 3}.
6. Печать C, B, A. На экран выводится сообщение «578».
7. Конец работы программы.
Слайд 255.4. Простейшие логические операции и выражения