БАЗОВЫЕ АЛГОРИТМИЧЕСКИЕ КОНСТРУКЦИИ ЦИКЛЫ

Download Report

Transcript БАЗОВЫЕ АЛГОРИТМИЧЕСКИЕ КОНСТРУКЦИИ ЦИКЛЫ

БАЗОВЫЕ АЛГОРИТМИЧЕСКИЕ
КОНСТРУКЦИИ
ПОВТОРЕНИЕ
НЕОПРЕДЕЛЕННЫЕ ЦИКЛЫ
1
Повторение – это составная
команда алгоритма, в которой в
зависимости от соблюдения
условия может повторяться
команда или серия команд.
Цикл – это команды алгоритма, которые
позволяют несколько раз повторить одну и
ту же группу команд.
2
Цикл с предусловием (цикл «пока»)
УЦ
да
Тело цикла
нет
While <УЦ> do
(Тело цикла);
ПОКА
условие цикла (УЦ)
соблюдается –
делай
В цикле с предусловием (цикл «пока») команда
или серия команд повторяется, если условие
выполнения цикла соблюдается.
3
Цикл с постусловием (цикл «до»)
Тело цикла
нет
Repeat
Тело цикла;
Until <УЦ> ;
УЦ
да
В цикле с постусловием (цикл «до») – команда
или серия команд повторяются, если условие
4
выхода из цикла не соблюдается.
Это неопределенные циклы, так как количество
выполнений тела цикла зависит от условия.
В УЦ обязательно должна быть переменная,
от значения которой зависит будут
выполняться команды тела цикла или нет.
В теле цикла ОБЯЗАТЕЛЬНО значение этой
переменной должно изменяться.
Для того, чтобы при переводе записи алгоритма с
языка блок-схем на язык программирования
исключить внесение изменений в конструкцию
команды, следует использовать приведенные
выше алгоритмические конструкции,
так как на языке программирования команды
повторения реализуются именно таким образом.
6
Задача: Найти сумму вводимых с клавиатуры
положительных чисел.
Конец вводимой последовательности – ввод 0.
Дано:
Последовательность любых чисел.
0 – конец последовательности.
Получить: Сумму чисел больших нуля.
Связи:
а – переменная-ячейка для
последовательного ввода чисел.
Тип переменной а – вещественное число.
S – переменная-ячейка для накопления суммы.
7
Вопросы:
•
•
•
•
•
Какая задача решается?
Какие числа будем вводить?
Какие числа будем суммировать?
Каким образом организовать накопление суммы?
Как обходиться с отрицательными числами,
которые вводим?
• Какую циклическую конструкцию удобнее
использовать при составлении алгоритма?
• По какому условию должно происходить
прерывание цикла?
• Может случиться ситуация, что ничего
8
суммировать не надо?
Программа:
S=0
Ввод A
A≠0
Да
Да
A>0
S=S+A
Ввод A
Вывод
S
Анализ
результатов:
нет
Program Symma1;
Var a, s: real;
Трассировочная
таблица
Begin
s
a
Знак a
S:=0;
Write(‘ Введите число: ’);
0
1
>0
Readln(a);
While
1 a<>03 do
>0
Begin
4 If a>0 then
2 S:=S+a;
>0
число:
’);
6 Write(‘Введите
-2
<0
Readln(a);
0
=0
End;
Writeln(‘Sum = ’ , S:7:1);
End.
Ввести числа: 1, 3, 2, -2, 0.
Предполагаемый результат: Sum = 6.0
S=0
Ввод
A
да
A>0
S=S+A
нет
А=0
да
Вывод
S
нет
Программа:
Program
Symma2;
Трассировочная
таблица
Var a, s: real;
s
a
Знак a
Begin
0
S:=0;
Repeat
1
1
>0
4Write( ‘Введите
3
>0число: ’);
Readln(a);
6If a>0 then
2 S:=S+a;
>0
<0
Until a =-2
0;
Writeln( ‘Summa
= ’ , S:7:1);
0
=0
End.
Анализ результатов:
Ввести числа: 1, 3, 2, -2, 0.
Предполагаемый результат: Sum = 6.0
S=0
S=0
Ввод A
Ввод
A
A≠0
да
Да
Да
A>0
A>0
нет
нет
S=S+A
S=S+A
Ввод A
нет
А=0
да
Вывод
S
Вывод
S
12
начало
Открыть дневник
Прочитать 1-ю
запись в дневнике
Выучить уроки.
нет
Есть задание?
Да
Выучить урок
Прочитать следующую
запись в дневнике
Конец
13
Самостоятельная работа
Написать алгоритм на бытовую тему с
использованием алгоритмической
структуры «неопределенные циклы»
14
Задача: Найти сумму и количество вводимых с
клавиатуры чисел.
Конец вводимой последовательности – ввод 0.
Дано:
Последовательность любых чисел.
0 – конец последовательности.
Получить:
Сумму чисел вводимой последовательности.
Количество введенных чисел.
Связи:
а – переменная-ячейка для
последовательного ввода чисел.
Тип переменной а – вещественное число.
S – переменная-ячейка для накопления суммы. 15
K – переменная-ячейка для накопления количества.
 Написать алгоритм.
 Для проверки алгоритма составить
трассировочную таблицу.
 Написать программу.
 Выполнить программу.
 Произвести анализ полученного результата.
 Показать учителю.
1. Какие алгоритмические структуры присутствуют в вашем алгоритме?
16
S=0
K=0
Ввод A
A≠0
Да
S=S+A
k=k+1
Ввод A
Вывод
S
Анализ
результатов:
Вывод k
Нет
Program Symma1;
Var a, s: real; k: integer;
Begin
S:=0; k:=0;
Write(‘ Введите число: ’);
Readln(a);
While a<>0 do
Begin
S:=S+a;
k:=k + 1;
Write(‘Введите число: ’);
Readln(a);
End;
Writeln(‘Sum = ’ , S:7:1);
Writeln(‘kol-vo = ’ , k);
End.
Ввести числа: 1, 3, 2, -2, 0.
Предполагаемый результат?
Задание:
1.Изменить алгоритм и программу используя
алгоритмическую структуру ЦИКЛ-”ДО”.
2.Проверить правильность алгоритма с
помощью трассировочной таблицы.
Задача. Известны оценки абитуриента на
четырех экзаменах. Определить сколько
«пятерок» он получил.
18
Задача.
Протабулировать функцию Y = X2 на интервале от
1 до -1 с шагом -0.2.
Результат представить в виде:
X
Y
1.00
1.00
0.80
0.64
…
-1.00
…
1.00
19
Математическая модель
Дано:
Х= 1, 0.8, 0.6, …,-0.8, -1 ,т.е.
Начальное Х = 1, конечное Х = -1, шаг = -0.2
Получить: таблицу значений Х, Y в виде:
X
Y
1.00
1.00
0.80
0.64
…
…
Связи: Y=Х2, для каждого Х
20
Программа:
Program Tabl1;
Var x, y: real;
Begin
x:= 1;
Writeln(‘X’:5, ‘Y’:13);
While x>= -1 do
Begin
y:= x*x;
Writeln(x:8:2, y:10:2);
x:= x - 0.2;
End;
Writeln;
End.
Проверить
программу с
помощью
трассировочной
таблицы
Для данной программы написать алгоритм в виде блок-схемы.
ЗАДАЧИ:
1. Протабулировать функцию
Y = sin(X), для Х от 0 до 6.28
с шагом 0.3
2. Протабулировать функцию
Y = 3(X – 2)2 - 4 на интервале
от -4 до 8 с шагом 0.5.
22
3. Написать программу, вычисляющую сумму и
среднее арифметическое последовательности
положительных чисел, которые вводятся с
клавиатуры. Рекомендуемый вид экрана во время
работы программы:
Вычисление среднего арифметического
последовательности положительных чисел.
Вводите после стрелки числа. Для завершения ввода
нажмите ноль.
-> 45
->23
-> 15
-> 0
Введено чисел: 3
Сумма чисел: 83
Среднее арифметическое: 27.67
23
4. Написать программу, которая определяет
максимальное число из введенной с клавиатуры
последовательности положительных чисел.
Рекомендуемый вид экрана во время работы
программы:
Определение максимального числа последовательности
положительных чисел.
Вводите после стрелки числа. Для завершения ввода
нажмите ноль.
-> 23
->45
-> 15
-> 0
Максимальное число: 45
24
5. Дана непустая последовательность
натуральных чисел, за которой
следует 0. Составить алгоритм поиска
в данной последовательности
порядкового номера наименьшего
элемента.
25
ЗАДАЧА. Дан прямоугольник с размерами a Х b. От него
отрезают квадраты максимального размера, пока это
возможно. Затем от оставшегося прямоугольника вновь
отрезают квадраты максимально возможного размера и т.д.
На какие квадраты и в каком их количестве будет разрезан
исходный прямоугольник?
Дано: a, b – целые числа,
Получить: квадраты мах размера. Сколько их и
какого размера. Например, 27 Х 8
3 квадрата 8х8;
27
2 квадрата 3х3;
3
1 квадрат 2х2;
8
2 квадрата 1х1.
26
Трассировочная
таблица
a,b
да
Fp:= 0
A>B
да
A:= A – B
Fp:= Fp + 1
A≠0
или
B≠ 0
да
A>B
A
нет
0
нет
B>A
нет
19
1
11
2
3
3
0
да
B:= B – A
Fl:= Fl + 1
5
1
2
2
0
1
B, Fp
Fp Fl
27 8
Fl:= 0
нет
B
1
0
A, Fl
1
1
0
2
Ещё много интересных задач
28