Тема 2. Основні поняття мови Паскаль. Стандартні типи даних.  Оператори воду-виводу

Лекція 6

 

Оператори циклу: цикл з параметром,  цикли з передумовою та післямовою  

Цикл — це послідовність операторів, що може виконуватися більше одного разу. Він використовується при розв'язуванні таких задач, де необхідно повторити деяку послідовність команд більше одного разу.

 Відомі два типи команди повторення, що суттєво розрізняються:

 - цикл з відомою заздалегідь кількістю повторів;

 - цикл з невідомою кількістю повторів.

 Циклічний обчислювальний процес характеризується повторенням одних і тих же обчислень над деяким набором даних. Числом повторень циклу управляє спеціальна змінна, звана його лічильником або керуючої змінної циклу. На лічильник накладається умова, що визначає, до яких пір слід виконувати цикл.

 Повторюваний блок обчислень називають тілом циклу. У тілі циклу має бути забезпечено зміна значення лічильника, щоб він міг завершитися. Якщо тіло циклу складається більш ніж з одного оператора, воновкладається в операторні дужки begin ... end;. Одноразове виконання тіла циклу називають його кроком.

 Таким чином, для програмування циклу досить визначити умову, що управляє числом його повторень і описати оператори, що утворюють тіло циклу. З цієї точки зору, теоретично можливі всього два види циклів — перевірка умови або передує виконання тіла циклу, або відбувається після нього. 

В мові програмування Паскаль існує три типи циклів: for, repeat та while. Якщо кількість повторів відома заздалегідь, використовується оператор for, якщо кількість повторів невідома, застосовуються оператори repeat або while.

Оператор повтору for.

 Цей оператор повторення інакше називається циклом з параметром (або лічильником). Він складається із заголовка та тіла циклу та може бути поданий у двох форматах.

 1. for <параметр циклу> := <S1> to <S2> do

begin

 <серія>;

end;

 2. for <параметр циклу> := <S1> downto <S2> do

begin

 <серія>;

end;

 де S1 і S2 — вирази, що визначають відповідно початкове і кінцеве значення параметру циклу;

for.. do — заголовок циклу;

 <серія> — тіло циклу. Тіло циклу може бути простим або складеним.

 Цей оператор забезпечує виконання тіла циклу доти, поки не будуть перебрані всі значення параметра циклу від початкового до кінцевого.

 Параметр циклу, його початкове і кінцеве значення повинні належати до одного типу даних. При цьому можливо використання будь-якого скалярного типу, крім дійсного, тобто цілого (integer, byte, word, longint), булівського (boolean) та символьного (char). Значення параметра циклу послідовно збільшується при for... to або зменшується при for... downto на одиницю при кожному повторі.

 Кількість повторів тіла циклу в операторі for можна визначити за наступною таблицею:

Оператор

S1 < S2

S1 = S2

S1 > S2

for...to

S2-S1+1 разів

 1 раз

Не виконується

for...downto

Не виконується

 1 раз

 S1-S2+1 разів

 

В операторі for після do може знаходитися складений оператор, в тілі якого заборонені оператори, що змінюють значення параметра циклу. Після нормального завершення циклу значення параметра циклу дорівнює кінцевому значенню.

 Цикл може не виконатися зовсім (дивись таблицю), але ніколи не може зациклитись на відміну від наступних двох операторів повторення.

Приклад. Знайти суму всіх натуральних чисел від 1 до 100.

Program Example_1;

 Var Sum, i : integer;

Begin

     Sum := 0;

        For i := 1 to 100 do

                Sum := Sum + i;

     Writeln(‘Sum = ‘, Sum);

End.

Приклади застосування конструкції for:

·         побудова таблиць;

·         обчислення елементів послідовності;

·         пошук потрібних елементів за певною ознакою.

Цикл з передумовою While

Цикл while (доки) використовують, якщо значення зміни параметра циклу є інше, ніж одиниця або якщо кількість елементів (доданків) в програмі наперед не відома. В операторі while  перевірка умови виконання тіла циклу робиться на самому початку оператора, тому цикл інакше називається циклом із предумовою.

Для цього циклу потрібно знати умову продовження виконання обчислень у циклі. Тому його називають циклом з передумовою.

Формат опису:

while <умова> do

begin

 <серія>;

end;

Умова — булівський вираз, а серія — простий або складений оператор. Перед кожним виконанням тіла циклу обчислюється значення виразу умови. Якщо результат являється істинним (true), тіло циклу виконується, у протилежному випадку відбувається вихід із циклу і перехід до першого після while оператору. Якщо перед першим виконанням циклу значення виразу було хибним (false), то тіло циклу взагалі не виконується і відбувається перехід на наступний оператор.

Приклад. Дано натуральне число N. Визначити кількість цифр в числі.

Program Example_3;

  Var N : longint; Counter : integer;

Begin

  Write(‘Введіть число: ’);

  Readln(N);

  Counter := 0;

  While N > 0 do

   Begin

    Counter:=Counter+1; {Підрахунок кількості цифр}

   N:=N div 10;        {Відкидання останньої цифри}

   End;

Writeln(‘Кількість цифр у заданому числі дорівнює’, N);

End.

 

Оператор повтору repeat

 Наступний оператор циклу складається з заголовка (repeat), тіла та умови закінчення (until).

 Формат опису:

repeat

 <серія>

until <умова>;

Умова — вираз булівського типу. 

 В цьому циклі спочатку виконується серія (тіло циклу), а потім перевіряється умова виходу з циклу. Саме тому ця команда повторення інакше називається циклом із післяумовою. Якщо умова виходу з циклу хибна (false), цикл активізується ще раз, якщо результат істинний (true), відбувається вихід із циклу.

Дія команди: команди виконуються в циклі до тих пір, доки значення логічного виразу не стане істинним. Істинний логічний вираз задає умову виходу з циклу.

Цей оператор повтору має наступні характерні риси:

 - використовується у випадках, коди користувачу не відома заздалегідь кількість повторень;

 - тіло циклу виконується хоча б один раз;

 - тіло циклу виконується, поки умова хибна false;

 - у тілі може знаходитися будь-яка кількість операторів без операторних дужок begin... end;

 - принаймні один оператор у тілі циклу повинен змінювати значення умови, інакше цикл буде виконуватися нескінченно.

 Для передчасного виходу з циклу можна присвоїти параметру циклу значення, що виходить за діапазон дозволених значень.

Наприклад, написати програму, яка вгадує задумане число.

 

program Game;

var answer,n: integer;

begin

writeln (‘вгадай число від 1 до 100’);

randomize;

n:=random(n);

repeat

write (‘введіть число: ’);

readln (answer);

                   if   answer > n

                             then writeln (‘перебір’);

                   if answer < n

                             then writeln (‘недобір’);

until answer =  n;

  writeln (‘число   вгадане’)

end. 

 

Контрольні запитання:

1. Поняття циклу.

2. Що таке цикл з лічильником.

3. Цикли з передумовою і післямовою.