Оператори циклів


1. Команда циклу з лічильником у Lazarus.
У мові програмування Lazarus є кілька команд, які можуть реалізувати цикл. Одна з них – команда циклу з лічильником. Її доцільно використовувати в тих випадках, коли кількість повторень команд тіла циклу відома до початку виконання команди циклу. Загальний вигляд цієї команди такий:
for <ім’я змінної> := <вираз 1> to <вираз 2> do
begin
<команди тіла циклу>
end;
Рядок for … to … do (англ. for – для, to – до, do – робити, виконувати) називається рядком заголовка команди циклу з лічильником. Змінна в рядку заголовка команди циклу з лічильником, що стоїть перед знаком присвоювання, називається лічильником циклу.
Лічильник циклу, вираз 1 і вираз 2 мають набувати тільки цілих значень. Якщо тіло циклу складається лише з однієї команди, операторні дужки begin і end можна не ставити.
Виконується команда циклу з лічильником так:
1. Надати лічильнику циклу (наприклад, змінній i) значення <вираз 1>.
2. Обчислити значення логічного виразу i <= вираз 2.
3. Якщо значення логічного виразу, яке обчислено в команді 2, true, то виконати команди тіла циклу і перейти до виконання команди 4, інакше виконати команду, наступну за командою циклу.
4. Збільшити значення лічильника циклу на 1.
5. Перейти до виконання команди 2.
Блок-схема виконання команди циклу з лічильником наведена на рисунку.
Для ілюстрації виконання команди циклу з лічильником розглянемо фрагмент програми, в якому обчислюється сума 1! + 2! + 3! + 4! (нагадаємо, що n! = 1 * 2 * 3 * ... * n):
var a, s, i: Integer;
begin
s := 0; a := 1;
For i := 1 to 4 do
begin
a := a*i;
s := s + a;
end;
Label1.Caption := IntToStr (s);
end;
Виконаємо цей фрагмент програми.
Зверніть увагу:
1. Після закінчення виконання команди циклу з лічильником лічильник циклу має значення на 1 більше, ніж значення вираз 2, і це значення, за потреби, можна використовувати в наступних командах.
2. Існує різновид команди циклу з лічильником, який змінюється в зворотному порядку:
for <ім’я змінної> := <вираз 1> downto <вираз 2> do
begin
<команди тіла циклу>
end;
(англ. down – униз), який відрізняється від попереднього лише тим, що після кожного виконання команд тіла циклу значення лічильника циклу не збільшується на 1, а зменшується на 1.

2. Команди циклу з передумовою та циклу з післяумовою в Lazarus.
Якщо кількість повторень команд тіла циклу до початку виконання команди циклу невідома, потрібно використовувати команду циклу з передумовою або команду циклу з післяумовою.
Загальний вигляд команди циклу з передумовою такий:
while <логічний вираз> do
begin
<команди тіла циклу>
end;
(англ. while – поки). Якщо тіло циклу складається лише з однієї команди, операторні дужки begin і end можна не ставити.
Виконується команда циклу з передумовою так:
1. Обчислити значення логічного виразу.
2. Якщо це значення true, то виконати команди тіла циклу і перейти до команди 1, а якщо false, то виконати команду, наступну за командою циклу.
Для ілюстрації виконання команди циклу з передумовою розглянемо фрагмент програми для розв’язування наступної задачі.
Задача. Обчислити суму додатних членів арифметичної прогресії з додатним першим членом і від’ємною різницею.
Домовимося вводити перший член прогресії в поле Edit1, а її різницю – в поле Edit2.
var a, d, s: Real;
begin
a := StrToFloat (Edit1.Text);
d := StrToFloat (Edit2.Text);
s := 0;
while a > 0 do
begin
s := s + a;
a := a + d;
end;
Label1.Caption := FloatToStr (s);
end;
Виконаємо цей фрагмент програми для деякого набору значень a і d.
Загальний вигляд команди циклу з післяумовою такий:
repeat
<команди тіла циклу>
until <логічний вираз>;
(англ. repeat – повторити, until – доки, не раніше як).
Виконується команда циклу з передумовою так:
1. Виконати команди тіла циклу.
2. Обчислити значення логічного виразу.
3. Якщо це значення false, то виконати п.1, а якщо true, то виконати команду, наступну за командою циклу.
Команду циклу з післяумовою доцільно використовувати в тих випадках, коли команди тіла циклу повинні виконатися хоча б один раз.
Проілюструємо, як виглядатиме фрагмент програми для розв’язування попередньої задачі з використанням циклу з післяумовою:
var a, d, s: Real;
begin
a := StrToFloat (Edit1.Text);
d := StrToFloat (Edit2.Text);
s := 0;
repeat
s := s + a;
a := a + d;
until a <= 0;
Label1.Caption := FloatToStr (s);
end;
Виконаємо цей фрагмент програми для деякого набору значень a і d.
Зверніть увагу:
1. У команді циклу з післяумовою операторні дужки не використовують незалежно від кількості команд у тілі циклу.
2. Якщо цикл з передумовою замінити на цикл з післяумовою або навпаки, то логічний вираз одного є запереченням логічного виразу іншого.

Практичні завдання:
1. Виконайте в таблиці фрагмент програми та з’ясуйте, якими будуть значення змінних після його завершення:
а) р := 1; a := 2;
for i := 1 to 5 do
begin
a := 3*a + 1;
р := р*a;
end;
б) k := 1; a := 12;
while a < 100 do
begin
а := 2*а – 4;
k := k + 1;
end;
в) s := 0; a := 1; k := 1;
repeat
s := s + a;
k := k + 1;
a := k*k;
until a > 50;

2. Виконайте фрагмент програми та з’ясуйте, якими будуть значення змінних після його завершення:
а) р := 1; a := 8;
for i := 1 to 4 do
begin
a := 2*a – 5;
р := р*a;
end;
б) k := 1; a := 100;
while a > 10 do
begin
а := а div 2;
k := k + 1;
end;
в) s := 0; a := 5428;
repeat
c := a mod 10;
s := s + c;
a := a div 10;
until a < 1;

3.    Створіть проект, у якому можна обчислити добуток перших N членів послідовності чисел, перше з яких дорівнює x, а кожне наступне вдвічі менше за попереднє. Створіть у власній папці папку Проект 1 і збережіть у ній проект.
4. Створіть проект, в якому можна обчислити кількість двоцифрових чисел у арифметичній прогресії. Перший член прогресії більший за 10, різниця більша за 0. Створіть у власній папці папку Проект 2 і збережіть у ній проект.
5. Створіть проект, у якому можна знайти кількість дільників заданого натурального числа. Створіть у власній папці папку Проект 3 і збережіть у ній проект.

Комментариев нет:

Отправить комментарий