При вирішенні переважної більшості завдань (у тому числі й досить нескладних) в програмі практично неможливо задати в явному вигляді всі операції, які необхідно виконати. Справді, нехай необхідно обчислити суму перших n членів гармонійного ряду:
Y = 1 + 1/2 + 1/3 + ... + 1/n
Очевидно, що з використанням тільки розглянутих вище типів операторів можна скласти програму лише для фіксованого значення n. Наприклад, при n = 5 необхідні обчислення можна задати за допомогою оператора привласнення види:
Y: = 1 +1/2 +1/3 +1/4 +1/5
Якщо ж значення n не фіксується, а є вихідними даними, що вводиться в процесі виконання програми (і навіть константою, описаної в програмі), то аналогічний оператор присвоювання записати неможливо. Бо запис виду Y: = 1 +1/2 +1/3 + ... +1/n в мовах програмування неприпустима.
Для усунення виникаючих труднощів служать оператори циклу . Вони дозволяють повторювати виконання окремих частин програми. Можна виділити чотири про імператора циклу , присутніх у тому чи іншому вигляді у всіх мовах програмування: простий арифметичний оператор циклу (цикл з параметром з кроком 1), складний арифметичний оператор циклу (цикл з параметром довільного кроку), ітераційний оператор циклу з передумовою , ітераційний оператор циклу з постусловіем .
Простий арифметичний оператор циклу Паскаля (цикл з параметром)
Повернемося до розглянутої вище задачі обчислення суми перших n членів гармонійного ряду, правила якої неможливо задати у вигляді арифметичного виразу, якщо значення n заздалегідь не фіксоване.
Насправді обчислення цієї суми можна здійснити за дуже простим і компактному алгоритмом: попередньо покладемо y = 0 (за допомогою оператора присвоєння y: = 0), а потім виконаємо оператор присвоювання y: = y +1/i для послідовних значень i = 1,2, ..., n. При кожному черговому виконанні цього оператора до поточного значенням y буде додаватися чергове доданок. Як видно, в цьому випадку процес обчислень буде носити циклічний характер: оператор y: = y +1/i повинен виконуватися багаторазово, тобто циклічно, при різних значеннях i.
Цей приклад циклічного обчислювального процесу є вельми типовим; його характерні особливості полягають у тому, що
В· число повторень циклу відомо до початку його виконання (в даному випадку воно дорівнює значенням n, яке передбачається заданим до цього часу);
В· управління циклом здійснюється за допомогою змінної порядкового типу, яка цього циклічному процесі бере послідовні значення від заданого початкового до заданого кінцевого значень (в нашому випадку - це целочисленная мінлива i, приймаюча послідовні значення від 1 до n).
Для компактного завдання подібного роду обчислювальних процесів і служить оператор циклу з параметром . Найчастіше використовується наступний вигляд цього оператора У Паскалі:
For V: = E1 to E2 do S,
де for (Для), to (збільшуючись до) і do (виконувати, робити) - службові слова, V - мінлива порядкового типу, звана параметром циклу, Е1 і Е2 - вираження того ж типу, що й параметр циклу, S - оператор, який і виконується багаторазово в циклі, званий тілом циклу.
Зауважимо, що в Паскалі після do повинен стояти один оператор, якщо необхідно виконати декілька дій, то вони повинні бути об'єднані в один складений оператор шляхом укладення в операторні дужки.
Цей оператор циклу Паскаля передбачає присвоювання параметру циклу V послідовних значень від початкового значення, рівного значенню виразу Е1, до кінцевого значення, рівного значенню виразу Е2, тобто при кожному повторенні виконується оператор присвоювання V: = succ (V) , і виконання оператора S при кожному значенні параметра циклу V. При цьому значення виразів Е1 і Е2 обчислюються один раз, при вході в оператор циклу, а значення параметра циклу V не повинно змінюватися в результаті виконання оператора S. Якщо задане кінцеве значення менше початкового значення (що припустимо), то оператор S не виконується ні разу.
У Паскалі вважається, що при нормальному завершенні виконання оператора циклу значення параметра циклу не визначено.
З використанням оператора циклу з параметром алгоритм обчислення суми перших n членів гармонійного ряду може бути заданий наступним чином:
Приклад коду програми для підсумовування перших n членів гармонійного ряду
Readln (n);
Y: = 0;
For i: = 1 to n do y: = y +1/i;
У деяких випадках буває зручно, щоб параметр циклу Паскаля брав послідовні, але не зростаючі, а убуваючі значення. Для таких випадків у Паскалі передбачений оператор циклу з параметром такого вигляду:
For V: = E1 downto E2 do S,...