2. 2
Цикли
Цикл – це багаторазове виконаннѐ однакової послідовності
дій.
• цикл з відомим числом кроків
• цикл з невідомим числом кроків(цикл з умовоя)
Задача. Вивести на экран 5 раз слово «Привіт».
Особливість: одинакові дїї виконуятьсѐ 5 разів.
Чи можна розвѐзати задачу відомими способами??
4. 4
Цикли
program qq;
begin
{ виконай 5 раз }
writeln('Привіт');
end.
Як відрахувти рівно 5 раз??
Як запамѐтати скільки разів вже
виконали?
?
i := i + 1;
6. 6
Цикли
program qq;
var i: integer;
begin
for i:=1 to 5 do
writeln('Привіт');
end.
«Длѐ всіх i від 1 до 5
роби …»
for i:=1 to 5 do
Якщо в циклі більше одного оператора:
for i:=1 to 5 do begin
write('Привіт');
writeln(', Вася!');
end;
begin
end;
Що вийде??
7. 7
Цикли
Задача. Вивести на екран квадрати і куби цілих чисел от 1 до 8
(від a до b).
Особливість: одинакові дії виконуятьсѐ 8 раз.
Чи можна розвѐзати відомими способами??
i := 1; { Наступне число}
i2 := i*i; { його квадрат}
i3 := i2*i; { куб }
writeln(i:4, i2:4, i3:4);
i := 2;
... А ѐкщо початкове і кінцеве значеннѐ
вводитьсѐ з клавіатури?
?
8. 8
Алгоритм
початок
i, i2, i3
кінець
ні
да
i <= 8?
i := 1;
i := i + 1;
i2 := i * i;
i3 := i2 * i;
Задати початкове значеннѐ
змінної
Провірити чи все зробили
обчисляюмо квадрат і куб
вивід результата
перейти до
наступного i
9. 9
Алгоритм (з блоком «цикл»)
початок
i, i2, i3
кінець
i2 := i * i;
i3 := i2 * i;
i := 1,8
блок «цикл»
тіло цикла
10. 10
Програма
program qq;
var i, i2, i3: integer;
begin
for i:=1 to 8 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
end.
змінна
цикла
Початкове значеннѐ
Кінцеве значеннѐ
11. 11
Цикл зі зменшеннѐм змінної
Задача. Вивести на экран квадрати і куби цілих чисел від 8 до 1
(в оберненому порѐдку).
Особливість: змінна циклу повинна зменшуватись.
Решение:
for i:=8 1 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
downto
12. 12
Цикл з змінноя
for <змінна> := <початкове значення> to
<Кінцеве значення> do begin
{тіло цикла}
end;
Збільшеннѐ змінної на 1:
for <Змінна> := <Початкове значення>
downto
<кінцеве значення> do begin
{тіло цикла}
end;
Зменшеннѐ змінної на 1:
13. 13
Цикл з змінноя
Особливості:
• переменнаѐ циклу може бути тільки цілоя (integer)
• шаг зміни змінної завжди рівний 1 (to) чи -1
(downto)
• Якщо в тілі цикла тільки один оператор, слова begin и
end можна не писать:
• Якщо кінцеве значеннѐ менше початкового , цикл (to)
не виконуютьсѐ ні разу(перевірка умови в початку
цикла, цикл з передумовоя)
for i:=1 to 8 do
writeln('Привет');
14. 14
Цикл з змінноя
Особливості:
• в тілі цикла не дозволѐютьсѐ змінявати змінну цикла
(чому?)
• При зміні початкового і кінцевого значеннѐ в тілі цикла
кількість кроків не змінитьсѐ:
n := 8;
for i:=1 to n do begin
writeln('Привет');
n := n + 1;
end;
Немаю
зацикляваннѐ
15. 15
Цикл з змінноя
Особливості:
• післѐ виконаннѐ цикла в багатьох системах
встановляютьсѐ перше значеннѐ змінної циклу, в ѐкому
нарушено умову:
for i:=1 to 8 do
writeln('Привіт');
writeln('i=', i);
for i:=8 downto 1 do
writeln('Привіт');
writeln('i=', i);
i=9
i=0
16. 16
Скільки раз виконуютьсѐ цикл?
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 downto 3 do a :=a+1; a= 1
a:=1;
for i:=3 downto 1 do a :=a+1; a= 4
17. 17
for i:=1 to 9 do begin
if ??? then begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
end;
Як змінити крок?
Задача. Вивести на экран квадрати и куби непарних цілих чисел від
1 до 9.
Особливість: змінна цикла повинна збільшуватись на 2.
Проблема: в Паскалі шаг може буть 1 чи -1.
Розвѐзаннѐ:
i mod 2 = 1
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
Виконуютьсѐ
тільки длѐ
непарнихi
Що погано??
18. 18
Як змінити крок?
– IIІдеѐ: Треба вивести всього 5 чисел, змінна k зміняютьсѐ від 1 до 5.
Початкове значеннѐ i рівне 1, з кожним шагом циклаi
збільшуютьсѐ на 2.
Вирішеннѐ:
???
for k:=1 to 5 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
???
end;
i := i + 2;
i := 1;
19. 19
Як змінити крок?– III
Ідеѐ: Треба вивести всього 5 чисел, змінна k зміняютьсѐ від 1 до 5.
Знаячи k, треба розрахувати i.
Вирішеннѐ:
k 1 2 3 4 5
i 1 3 5 7 9
i= 2k-1
for k:=1 to 5 do begin
???
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
i := 2*k – 1;
20. 20
Завданнѐ
«4»: Ввести a і b і вивести квадрати и куби чисел від a до b.
Приклад:
Введіть границі інтервала:
4 6
4 16 64
5 25 125
6 36 216
«5»: Вивести квадрати и куби 10 чисел послідовності: 1, 2, 4, 7, 11, 16, …
Приклад:
1 1 1
2 4 8
4 16 64
...
46 2116 97336