Программирование циклических алгоритмов

1.

ПРОГРАММИРОВАНИЕ
ЦИКЛИЧЕСКИХ
АЛГОРИТМОВ
НАЧАЛА ПРОГРАММИРОВАНИЯ

2.

Ключевые слова
•while ( цикл-ПОКА)
•repeat (цикл-ДО)
•for (цикл с параметрами)

3.

Программирование циклов с заданным
условием продолжения работы
нет
Условие
да
Тело цикла
Общий вид оператора:
while <условие> do <оператор>
Здесь:
<условие> - логическое выражение;
пока оно истинно, выполняется тело цикла;
<оператор> - простой или составной оператор,
с помощью которого записано тело цикла.

4.

Начало
Список данных
x, y, r, q - цел
x, y
r:=x
q:=0
r >=у
да
r:= r - y
q:= q +1
q, r
Конец
нет
program n_14;
var x, y, q, r: integer;
begin
writeln ('Частное и остаток');
write ('Введите делимое x>>');
readln (x);
write ('Введите делитель y>>');
read (y);
r:=x;
q:=0;
while r>=y do
begin
r:=r-y;
q:=q+1
end;
writeln ('Частное q=', q);
writeln ('Остаток r=', r)
end.

5.

Программирование циклов с заданным
условием окончания работы
Тело цикла
да
Условие
нет
Общий вид оператора:
repeat <оператор1; оператор2; …; > until <условие>
Здесь:
<оператор1>; <оператор2>; … - операторы, образующие
тело цикла;
<условие> - логическое выражение; если оно ложно, то
выполняется тело цикла.

6.

program n_15;
var i: integer; x: real;
begin
writeln ('График тренировок');
i:=1;
x:=10;
repeat
i:=i+1;
x:=x+0.1*x;
until x>=25;
writeln
('Начиная с ', i, '-го
дня спортсмен будет пробегать 25
км')
Начало
Список данных
i – цел
x- вещ
i := 1
x := 10
i := i +1
x := x +0.1*x
end.
x>= 25
да
i
нет
Конец

7.

Программирование циклов с заданным
числом повторений
i = i1, i2
Тело цикла
Общий вид оператора:
for <параметр>:=<начальное_значение>
to <конечное_значение> do <оператор>
Здесь:
<параметр> - переменная целого типа;
<начальное_значение> и <конечное_значение> выражения того же типа, что и параметр;
<оператор> - простой или составной оператор - тело цикла.

8.

Программирование циклов с заданным
числом повторений
i = i1, i2
Тело цикла
Общий вид оператора:
for <параметр>:=<начальное_значение>
to <конечное_значение> do <оператор>
После каждого выполнения тела цикла происходит
увеличение на единицу параметра цикла; условие выхода из
цикла – превышение параметром конечного значения.

9.

program n_16;
var i,n:integer;a,y:real;
begin
writeln ('Возведение в степень');
write ('Введите основание a>>');
readln (a);
write ('Введите показатель n>>');
readln (n);
y:=1;
for i:=1 to n do y:=y*a;
writeln ('y=', y)
end.
Начало
Список данных
i, n – цел
a, y – вещ
a, n
y := 1
i = 1, n
y := y * a
y
Конец

10.

Различные варианты
программирования циклического
алгоритма
Для решения одной и той же задачи могут быть созданы
разные программы.
Организуем ввод целых чисел и подсчёт количества
введённых положительных и отрицательных чисел. Ввод
должен осуществляться до тех пор, пока не будет введён
ноль.
В задаче в явном виде задано условие окончания работы.
Воспользуемся оператором repeat.

11.

Начало
program n_17;
var n, k1, k2: integer;
Список данных
begin
n, k1, k2 - цел
k1:=0;
k1:=0
k2:=0;
k2:=0
repeat
write ('Введите целое число>>');
n
да
readln (n);
k1:=k1+1
n>0
if n>0 then k1:=k1+1;
нет
да
if n<0 then k2:=k2+1;
n<0
k2:=k2+1
until n=0;
нет
нет
writeln ('Введено:');
n=0
да
writeln ('положительных чисел – ', k1);
k1, k2
writeln ('отрицательных чисел – ', k2)
end.
Конец

12.

Ввод осуществляется до тех пор, пока не будет введён ноль.
Работа продолжается, пока n 0.
Воспользуемся оператором while:
program n_18;
var n, k1, k2: integer;
begin
k1:=0;
k2:=0;
n:=1;
while n<>0 do
begin
writeln ('Введите целое число>>');
read (n);
if n>0 then k1:=k1+1;
if n<0 then k2:=k2+1;
end;
writeln ('Введено:');
writeln ('положительных – ', k1);
writeln ('отрицательных – ', k2)
end.
Начало
Список данных
n, k1, k2 - цел
k1:=0
k2:=0
n:=1
n <> 0
да
n
да
k1:=k1+1
k2:=k2+1
n>0
нет
k1, k2
Конец
нет

13.

Самое главное
В языке Паскаль имеются три вида операторов цикла:
while (цикл-ПОКА)
repeat (цикл-ДО)
for (цикл с параметром).
Если число повторений тела цикла известно, то лучше
воспользоваться оператором for; в остальных случаях
используются операторы while и repeat.

14.

Вопросы и задания
1. Дана последовательность операторов:
a:=1;
b:=2;
while a+b<8 do
begin
a:=a+1;
b:=b+2;
end;
s:=a+b
Сколько раз будет повторен цикл и какими будут
значения переменных a, b, s после исполнения этой
последовательности операторов?

15.

Вопросы и задания
2. Требовалось написать программу вычисления факториала числа
n (факториал числа n есть произведение всех целых чисел от 1 до
n).
Программист торопился и написал программу неправильно.
Ниже приведён фрагмент его программы, в котором содержится
пять ошибок:
k:=1;
f:=0;
while k<n do
f:=f*k;
k:=k+1
Найдите ошибки. Допишите необходимые операторы.
Пример входных данных
Пример выходных данных
Введите n> 5
5! = 120
Введите n> 6
6! = 720

16.

Вопросы и задания
3. Дана последовательность операторов:
a:=1;
b:=1;
repeat
a:=a+1;
b:=b*2;
until b>8;
s:=a+b
Сколько раз будет повторён цикл и какими будут значения
переменных a, b, s после исполнения этой
последовательности операторов?

17.

Вопросы и задания
4. Напишите программу, в которой осуществляется ввод
целых чисел (ввод осуществляется до тех пор, пока не
будет введён ноль) и подсчёт суммы и среднего
арифметического введённых положительных чисел.
Используйте оператор repeat.

18.

Вопросы и задания
5. Напишите программу, в которой осуществляется ввод
целых чисел (ввод осуществляется до тех пор, пока не будет
введён ноль) и определение максимального (наибольшего)
из введённых чисел.
Используйте оператор repeat.

19.

Вопросы и задания
6. Напишите программу вычисления наибольшего общего
делителя двух целых чисел:
а) используйте оператор repeat;
б) используйте оператор while.

20.

Вопросы и задания
7. Сколько раз будет выполнен цикл?
а) for i:=0 to 15 do s:=s+1;
б) for i:=10 to 15 do s:=s+1;
в) for i:=-1 to 1 do s:=s+1;
г) for i:=10 to 10 do s:=s+1;
д) k:=5;
for i:=k-1 to k+1 do s:=s+1;

21.

Вопросы и задания
8. Напишите программу, которая 10 раз выводит на экран ваши
имя и фамилию.

22.

Вопросы и задания
9. Напишите программу, выводящую на экран изображение
шахматной доски, где чёрные клетки изображаются
звёздочками, а белые - пробелами. Рекомендуемый вид
экрана после выполнения программы представлен ниже:
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

23.

Вопросы и задания
10. Напишите программу, которая вычисляет сумму:
а) первых n натуральных чисел;
б) квадратов первых n натуральных чисел;
в) всех чётных чисел в диапазоне от 1 до n;
г) всех двузначных чисел.

24.

Вопросы и задания
11. Напишите программу, которая генерирует 10 случайных
чисел в диапазоне от 1 до 20, выводит эти числа на экран
и вычисляет их среднее арифметическое.

25.

Вопросы и задания
12. Напишите программу, которая выводит на экран таблицу
степеней двойки (от нулевой до десятой).
Рекомендуемый вид экрана после выполнения программы
представлен ниже:
Таблица степеней двойки:
0
1
1
2
2
4
3
8
4
16
5
32
6
64
7
128
8
256
9
512
10
1024

26.

Вопросы и задания
13. Напишите программу, которая выводит на экран таблицу
умножения на n (n - целое число в диапазоне от 2 до 10,
вводимое с клавиатуры).
Пример входных данных
Введите n> 5
Пример выходных данных
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
5 * 10 = 50

27.

Вопросы и задания
14. Какой из трёх рассмотренных операторов цикла
является, по вашему мнению, основным, т. е. таким, что
им можно заменить два других?
Обоснуйте свою точку зрения.

28.

Опорный конспект
В языке Паскаль имеются три вида операторов цикла:
for (цикл с параметром)
repeat
Число повторений
цикла известно
(цикл-ДО)
Число повторений
цикла неизвестно
while
(цикл-ПОКA)
English     Русский Правила