Циклы
Циклы
Цикл – это многократное выполнение одинаковой последовательности действий.
- цикл с известным числом шагов цикл с неизвестным числом шагов (цикл с условием)
- цикл с известным числом шагов
- цикл с неизвестным числом шагов (цикл с условием)
Задача. Вывести на экран 5 раз слово «Привет».
Особенность: одинаковые действия выполняются 5 раз.
?
Можно ли решить известными методами ?
2
Цикл for
Задача: Вывести на экран 5 раз « Hello ». Решение: умеем составлять линейный алгоритм
program primer 1;
begin
writeln(' Hello');
writeln(' Hello ');
writeln(' Hello ');
writeln(' Hello ');
writeln(' Hello ');
end.
Неэффективная программа
Циклы
program qq;
begin
{ сделай 5 раз }
writeln(' Привет ');
end.
?
Как отсчитать ровно 5 раз ?
?
Как запоминать, сколько раз уже сделали ?
i := i + 1;
5
Алгоритм
начало
еще не сделали ни одного раза
i := 0 ;
проверить, все ли сделали
да
i = 5 ?
конец
нет
вывод на экран
Привет!
i := i + 1;
считаем очередной шаг
5
5
Для записи повторяющейся последовательности операторов используют циклы
Program primer 1;
var i: integer;
begin
for i:=1 to 5 do
begin
writeln(‘Hello’);
end;
end.
Здесь переменная i запоминает сколько раз выполнилась повторяющаяся команда (тело цикла)
- Цикл – это повторяющаяся последовательность операторов.
- Циклы бывают арифметические и итерационные
- Арифметический цикл – это такой цикл, число повторений которого известно заранее. В Pascal такой цикл обычно реализуется с помощью оператора for .
- Итерационный цикл – это такой цикл, число повторений которого заранее неизвестно и выход из цикла производится в случае выполнения или невыполнения какого-то условия. В Pascal такие циклы обычно реализуются с помощью операторов while и repeat
Цикл for
Принцип работы: Сначала счетчику цикла присваивается начальное значение. Если это значение не больше конечного значения, то выполняется тело цикла. Затем значение счетчика увеличивается на 1 и опять сравнивается с конечным значением. Если оно по-прежнему не больше конечного значения, то оператор выполняется еще раз и так далее.
Замечание: если тело цикла состоит из одного оператора, то begin и end можно опустить
Принцип работы: как и в первом случае, только значение счетчика уменьшается. Затем значение счетчика уменьшается на 1
Цикл с переменной
Увеличение переменной на 1:
for := to
do begin
{ тело цикла }
end;
Уменьшение переменной на 1:
for := downto
do begin
{ тело цикла }
end;
Сколько раз выполняется цикл?
a := 1;
for i:= 1 to 3 do a := a+1;
a = 4
a := 1;
for i:=3 to 1 do a := a+1;
a = 1
a := 1;
for i:= 1 down to 3 do a := a+1;
a = 1
a := 1;
for i:= 3 down to 1 do a := a+1;
a = 4
Задачи:
Решение
1) Написать программу, которая выводит на экран все натуральные числа от 1 до n
2) Написать программу, которая подсчитывает сумму натуральных чисел от 1 до n
3) Написать программу, которая считает x n
для вещественного x и натурального n
4) Написать программу, которая выводит на экран: 20 40 80 160 320
5) Написать программу, которая подсчитывает произведение натуральных чисел от 1 до n
Решение задач ОГЭ
Дан фрагмент программы. Чему будет равна
переменная s в результате работы данной
программы?
Решение:
В этой задаче есть цикл for. Тело цикла будет выполняться 4 раза (при n=2,3,4,5 ) .
s=2
n=2 s=2+2*2=6
n=3 s=6+3*2=12
n=4 s=12+4*2=20
n=5 s=20+5*2=30
Программа выводит значение переменной s , значит на экране будет число 30
Ответ: 30
Задачи Даны фрагменты программы. Что будет напечатано на экране в результате работы данных программ?
Ответы:
1) 14
2) 99
3) 11
4) 59
5) 120
Цикл While (цикл с предусловием)
Цикл с условием
while do begin
{ тело цикла }
end;
Особенности:
- можно использовать сложные условия: если в теле цикла только один оператор, слова begin и end можно не писать:
- можно использовать сложные условия:
- если в теле цикла только один оператор, слова begin и end можно не писать:
while (a
{ тело цикла }
end;
while a
a := a + 1;
b d o a := a – b; a := 4; b := 6; while a d := a + b; " width="640"
Цикл с условием
Особенности:
- условие пересчитывается каждый раз при входе в цикл если условие на входе в цикл ложно, цикл не выполняется ни разу если условие никогда не станет ложным, программа зацикливается
- условие пересчитывается каждый раз при входе в цикл
- если условие на входе в цикл ложно, цикл не выполняется ни разу
- если условие никогда не станет ложным, программа зацикливается
a := 4; b := 6;
while a b d o
a := a – b;
a := 4; b := 6;
while a
d := a + b;
b d o a := a + 1; 1 раз b = -2 a := 4; b := 6; while a зацикливание a := 4; b := 6; while a " width="640"
Сколько раз выполняется цикл ?
2 раза
a = 6
a := 4; b := 6;
while a
1 раз
a = 10
a := 4; b := 6;
while a
0 раз
a = 4
a := 4; b := 6;
while a b d o a := a + 1;
1 раз
b = -2
a := 4; b := 6;
while a
зацикливание
a := 4; b := 6;
while a
= b d o begin { тело цикла } i := i - 1; end; for i:=a downto b d o begin { тело цикла } end; Замена цикла for на while возможна всегда . Замена while на for возможна только тогда, когда можно заранее рассчитать число шагов цикла . " width="640"
Замена for на while и наоборот
i := 1;
while i
{ тело цикла }
i := i + 1;
end;
for i:=1 to 10 d o begin
{ тело цикла }
end;
i := a;
while i = b d o begin
{ тело цикла }
i := i - 1;
end;
for i:=a downto b d o
begin
{ тело цикла }
end;
Замена цикла for на while возможна всегда .
Замена while на for возможна только тогда, когда можно заранее рассчитать число шагов цикла .
Задача: написать программу, которая выводит на экран все натуральные числа от 1 до n Решение: умеем составлять алгоритм с циклом for
Программа с циклом for
Program m 1 ;
var i,n:integer;
begin
writeln('Введите n');
readln(n);
for i:=1 to n do
write(i,' ');
end .
Программа с циклом while
Program m2;
var i,n:integer;
begin
writeln('Введите n'); readln(n);
i:=1;
while ido
begin
write(i,' '); i:=i+1;
end ;
end .
Программа
program qq;
var n, count: integer;
begin
writeln(' Введите целое число ');
read(n);
count := 0;
while n 0 do begin
count := count + 1;
n := n div 10;
end;
writeln(' В числе ' , n, ' нашли ',
count, ' цифр ' );
end.
, n1: integer;
n1 := n;
выполнять «пока n 0 »
while n 0 do begin
count := count + 1;
n := n div 10;
end;
n1,
?
Что плохо ?
23
Задача: написать программу, которая выводит на экран все натуральные числа от 1 до n
Пока истинно условие
i , будет выполняться
тело цикла: 1) вывод числа i 2) увеличиваем на единицу значение i
Общий вид цикла while
Цикл while организует выполнение тела цикла неизвестное заранее число раз. Выход осуществляется, если условие окажется ложным.
Принцип работы: перед каждым выполнением цикла анализируется условие: если оно истинно, выполняется тело цикла и управление передается на повторную проверку условия. Если условие ложно – цикл завершается и управление передается на оператор, следующий за циклом while .
Замечания :
- Если условие во время цикла не будет изменяться, то возможна ситуация зацикливания, т.е. цикл не закончится никогда. Поэтому внутри цикла должны находится операторы, приводящие к изменению условия, чтобы цикл мог корректно завершиться
- Если тело цикла состоит из одного оператора, то begin и end можно опустить
Задачи:
Решение
1) Напечатать целые числа -10, -5, 0, 5…20
2) Найти произведение чисел из диапазона от A до B ( A
Вход: 1 15 5 Вход: 10 100 30
Выход: 66 Выход: 2800000
3) Для заданного натурального n и действительного x подсчитать сумму
Вход: 3 Вход: 2
Выход: 14 Выход: 5
4) Напечатать таблицу перевода расстояний в дюймах в сантиметры для значений 10, 11, 12,…20 дюймов (1 дюйм=2,54 см)
Выход:
10 дюймов=25,4 см
11 дюймов=27,94 см
…
20 дюймов=50,8 см
Задачи:
Решение
5) Напечатать все целые значения от A до B с шагом h .
Вход: 1 10 2 Вход: 5 20 5
Выход: 1 3 5 7 9 Выход: 5 10 15 20
6) Найти сумму чисел из диапазона от A до B с шагом 3.
Вход: 1 15 Вход: 0 10
Выход: 35 Выход: 18
7) Для заданного натурального n и действительного x подсчитать сумму
Вход: 3 Вход: 5
Выход: 1.83 Выход: 2.28
8) Напечатать таблицу соответствия между весом в фунтах и весом в килограммах для значений 5,10,15…50 фунтов (1 фунт=0,453 кг)
Выход:
5 фунтов=2,265 кг
10 фунтов=4,53 кг
…
50 фунтов=22,65 кг
Цикл repeat (цикл с постусловием)
0? нет условие ВЫХОДА да основной алгоритм блок «типовой процесс» конец " width="640"
Цикл с постусловием: алгоритм
начало
ввод n
тело цикла
n 0?
нет
условие ВЫХОДА
да
основной алгоритм
блок «типовой процесс»
конец
Общий вид цикла
Принцип работы: выполняется тело цикла. Если истинно, то выполнение цикла завершится. Если ложно, то снова выполняется тело цикла
Замечания:
- т. к. условие завершения цикла проверяется в конце цикла, то операторы тела цикла выполнятся хотя бы один раз
- В цикле repeat , так же как и в операторе while возможна ситуация зацикливания в случае, если всегда будет оставаться ложным
0; ... { основной алгоритм } end. repeat writeln(' Введите положительное число '); read(n); until n 0; условие ВЫХОДА until n 0; Особенности: тело цикла всегда выполняется хотя бы один раз после слова until ("до тех пор, пока не…") ставится условие ВЫХОДА из цикла тело цикла всегда выполняется хотя бы один раз после слова until ("до тех пор, пока не…") ставится условие ВЫХОДА из цикла " width="640"
Программа
program qq;
var n: integer;
begin
repeat
writeln(' Введите положительное число ');
read(n);
until n 0;
... { основной алгоритм }
end.
repeat
writeln(' Введите положительное число ');
read(n);
until n 0;
условие ВЫХОДА
until n 0;
Особенности:
- тело цикла всегда выполняется хотя бы один раз после слова until ("до тех пор, пока не…") ставится условие ВЫХОДА из цикла
- тело цикла всегда выполняется хотя бы один раз
- после слова until ("до тех пор, пока не…") ставится условие ВЫХОДА из цикла
b; 1 раз a = 10 a := 4; b := 6; repeat a := a + b ; until a b; a := 4; b := 6; repeat a := a + b ; until a зацикливание a := 4; b := 6; repeat b := a - b ; until a 2 раза b = 6 a := 4; b := 6; repeat a := a + 2 ; until a зацикливание " width="640"
Сколько раз выполняется цикл ?
3 раза
a = 7
a := 4; b := 6;
repeat a := a + 1; until a b;
1 раз
a = 10
a := 4; b := 6;
repeat a := a + b ; until a b;
a := 4; b := 6;
repeat a := a + b ; until a
зацикливание
a := 4; b := 6;
repeat b := a - b ; until a
2 раза
b = 6
a := 4; b := 6;
repeat a := a + 2 ; until a
зацикливание
n end . Программа с циклом while Program m2; var i,n:integer; begin writeln('Введите n'); readln(n); i:=1; while ido begin write(i,' '); i:=i+1; end ; end . " width="640"
Задача: написать программу, которая выводит на экран все натуральные числа от 1 до n
Программа с циклом repeat
Program m 3 ;
var i,n:integer;
begin
writeln('Введите n'); readln(n);
i:=1;
repeat
write(i,' ');
i:=i+1;
until in
end .
Программа с циклом while
Program m2;
var i,n:integer;
begin
writeln('Введите n'); readln(n);
i:=1;
while ido
begin
write(i,' '); i:=i+1;
end ;
end .
Задачи:
Решение
1 ) Напечатать все целые значения от A до B с шагом h .
Вход: 1 10 2 Вход: 5 20 5
Выход: 1 3 5 7 9 Выход: 5 10 15 20
2 ) Для заданного натурального n и действительного x подсчитать
сумму
Вход: 3 Вход: 2
Выход: 14 Выход: 5
3 ) Для заданного натурального n и действительного x подсчитать
сумму
Вход: 3 Вход: 5
Выход: 1.83 Выход: 2.28
Источники информации
- М. В. Огнева, Е. В. Шуринова, Turbo Pascal : первые шаги. Саратов: издательство «Стило», 2001
- http://opengia.ru/subjects/informatics-9
- http://kpolyakov.spb.ru