2. Алгоритми з повторенням і розгалуженням
2.9. Цикл з передумовою
У випадку, коли число повторень тіла циклу заздалегідь невідоме, а задається лише умова виконання циклу, використовуються цикли з умовою, а саме цикл з передумовою та цикл з післяумовою. У цьому параграфі розглянемо перший з них.
Оператор циклу з передумовою має вигляд:
While <умова> Do <тіло циклу>;
Або
Поки <умова> Виконати <тіло циклу>;
Виконання оператора циклу з передумовою починається з перевірки умови, записаної після слова While. Якщо вона
Якщо під час чергової перевірки з’ясується, що умова не виконується, то тіло циклу виконуватися не буде. Керування перейде до оператора, що після циклу.
Примітки
Якщо тіло циклу складається з кількох операторів, то вони об’ єднуються службовими словами Begin-End. У тілі циклу обов’язково має бути оператор, що впливає на істинність умови, інакше станеться зациклювання: оператори тіла циклу будуть повторюватися “вічно”.
Приклад №1
Підрахувати кількість цифр заданого натурального числа n.
Розв’язування
Раніше
Тому, поки число не стане рівне 0, будемо виконувати таку послідовність команд: збільшувати лічильник кількості цифр числа на одиницю, а число зменшувати в 10 разів (за допомогою цілочисельного ділення позбавлятимемося останньої цифри числа).
Program Example;
Var m, n, k: integer;
Begin
Write( ‘ Введіть натуральне число: ‘);
Readln (n);
M: = n; {копіюємо введене число}
K: = 0; {змінна-лічильник кількості цифр}
While m<>0 Do
Begin
K: = k + 1; {збільшуємо лічильник цифр}
M:=m div 10 {відкидаємо останню цифру} End;
Writeln (‘ У числі ‘, n,’ – ‘, k, ‘ цифр’)
End.
Роботу цієї програми цікаво спостерігати в покроковому режимі виконання, слідкуючи за зміною значень m і k.
Приклад №2
Підрахувати суму цифр заданого натурального числа n.
Розв’язування
Щоб розв’язати цю задачу, досить зробити незначні зміни в попередній програмі. Потрібно, як і раніше, відділяти останню цифру числа, але перед цим її потрібно запам’ятовувати в додаткову змінну (наприклад, а) і додавати до суми S.
Фрагмент програми:
While m<>0 Do
Begin
A:=m mod 10;
S:=s+a; m:=m div 10
End;
Питання для самоконтролю:
У яких випадках використовується цикл із передумовою та які особливості його запису? У даному фрагменті програми обчислення кількості цифр числа а знайдіть помилку та виправте її.
Ck: = 0;
While a>=0 Do
Begin
Ck:=ck+1;
A:=a div 10 End;
Дано послідовність операторів:
A:=1; b:=1;
While a+b<8 Do
Begin a:=a+1; b:=b+2 End;
S:=a+b;
Скільки разів буде повторюватись тіло циклу? Якими будуть значення змінних а, b і s після виконання цієї послідовності операторів?
Якими будуть значення змінних а і b після виконання послідовності операторів:
A:=1; b:=1;
While a<=3 Do a:=a+1; b:=b+1;
Знайдіть значення змінної s після виконання таких операторів:
А) s:=0; i:=0;
While i<5 Do i:=i+1; s:=s+100 div i;
Б) s:=0; i:=0;
While i>1 Do
Begin s:=s+10 0 div і; i:=i-1 End;
Яким умовам повинно задовольняти значення змінної k, щоб такі цикли були нескінченними:
А) While c<0 Do c:=c+k;
Б) While k<>0 Do k:=k+1;
В) While k<>0 Do k:=k+2;