2. Алгоритми з повторенням і розгалуженням
2.7. Оператори повторення. Цикл із параметром
При складанні програм часто виникає необхідність багато разів повторити один і той же набір команд. У таких випадках застосовуються оператори повторення (циклічні оператори), а команди, що повторюються, називають тілом циклу.
Залежно від того, чи відома заздалегідь кількість повторень, розрізняють цикл з параметром та цикли з умовою.
Оператор циклу з параметром застосовують тоді, коли заздалегідь відоме число повторень певної послідовності
Для підрахунку кількості повторень вводиться змінна-параметр одного з порядкових типів (integer, boolean, char тощо).
Є дві форми запису циклу з параметром:
1. For <параметр>:=А to B do <тіло циклу>;
Для <параметр>:=А до B виконати <тіло циклу>;
2. For <параметр>:=А downto B do <тіло циклу>;
Для <параметр>:=А назадДо B виконати <тіло циклу>;
Де А – початкове значення параметра, В – кінцеве значення параметра, тіло циклу – оператор (простий або складений). Початкове й кінцеве значення параметра циклу можуть бути подані константами, змінними
Розглянемо виконання оператору циклу з параметром виду For <параметр>:=А to B do <тіло циклу>;
Спочатку обчислюються значення виразів А і В.
Якщо А<В, то змінна-параметр послідовно набуває значень рівних А, А+1,…,В-1, В (тобто з кроком 1) і для кожного з цих значень виконується тіло циклу. Якщо на початку А>В, то тіло циклу не буде виконане жодного разу.
У випадку, коли параметр циклу потрібно зменшувати, використовується друга форма оператора із службовим словом downto. Цикл виконується так само, але значення параметра змінюється з кроком, що дорівнює -1.
Якщо потрібно повторити кілька операторів, то вони об’єднуються службовими словами Begin-End.
Приклад №1
З чисел від 10 до 99 вивести ті, сума цифр яких дорівнює N (0<N<18).
Розв’язування
Позначимо через k чергове число, р1 – старшу цифру числа k, р2 – меншу цифру числа k, S – суму.
Число k будемо друкувати лише в тому випадку, коли сума р1 і р2 дорівнюватиме S.
Program Example;
Var k, N, p1, p2, S: integer;
Begin
Write ( ‘N=’ ) ;
Readln (N);
For k:=10 to 99 do Begin
P1:=k div 10;{виділяємо старшу цифру}
P2:=k mod 10;{виділяємо молодшу цифру}
S:=p1+p2; {знаходимо суму цифр}
If S=N then writeln(k)
End
End.
У цій програмі цикл можна було записати коротше:
For k:=10 to 99 do
If k div 10+k mod 10=N then writeln(k);
Проаналізуйте його роботу самостійно.
Приклад №2
Знайти всі двоцифрові числа, що діляться на N або містять цифру N.
Розв’язування
Якщо двоцифрове число задовольняє умову задачі, то для нього виконується хоча б одна з трьох умов: перша цифра дорівнює N (p1=n) або друга цифра дорівнює N (p2=n), або саме число ділиться на N (k mod n = 0).
Яку логічну операцію необхідно використати для об’єднання цих простих умов у складену?
Питання для самоконтролю:
1. У яких випадках використовуються оператори повторення?
2. Які особливості запису циклу з параметром?
3. До якого типу даних належить змінна параметру циклу?
4. В яких випадках при складанні циклу використовуються службові слова Begin-End?
5. Скільки разів буде виконано тіло циклу у фрагменті програми::
For k:=-1 to 1 do…
6. Скільки разів буде виконано тіло циклу у фрагменті програми::
K:=5; r:=15;
For i:=k+1 to r-1 do
7. Скільки разів буде виконано тіло циклу у фрагменті програми::
K:=5; r:=15;
Fori:=0 to k*r do…
8. Скільки разів буде виконано тіло циклу у фрагменті програми::
K:=r;
For i:=k to r do…
9. Визначити значення змінної S після виконання таких операторів: S:=0; N:=10;
For i:=2 to N do S:=S+100 div i;
10. Перевірте роботу даної програми на комп’ютері. Проаналізуйте використання оператору циклу з параметром:
Program Demo;
Var c: boolean;
Begin
For c: = false to true do
Writeln(c);
End.