Оператор циклу задає повторне виконання певних операторів. Для реалізації циклів в Паскалі передбачено три різних структурних оператора: WHILE, REPEAT, FOR. Перші два використовуються, якщо число повторень (ітерацій) заздалегідь не визначено, але відомо умова завершення циклу. Оператор FOR застосовується тоді, коли число повторень тіла циклу відомо заздалегідь.
Цей оператор є найбільш потужним з усіх трьох, що реалізують цикли. Два інших оператора можна виразити за його допомогою (див. Рис. 23).
Логічне вираз, що стоїть після WHILE, називається умовою відновлення циклу і має мати булевский тип. Оператор, наступний за DO, є тілом циклу. Він повторюється до тих пір, поки істинно умова відновлення циклу. Як тільки умова відновлення циклу стає хибним, управління переходить до оператора, що стоїть за WHILE. Якщо умова відновлення не задовольняється до початку виконання циклу, то тіло циклу пропускається.
Мал. 23. Синтаксична діаграма оператора циклу WHILE
Із зазначеного опису видно, що оператор WHILE реалізує базову структуру «цикл-поки», так як тут перевірка умови йде до тіла циклу. Тому оператор WHILE називають оператором циклу з передумовою. На рис. 24 представлена блок-схема даного оператора.
Мал. 24. Блок-схема оператора WHILE
П р и м і р. Дано числа A, B (A> 1). Отримати всі ступені числа A, менші числа B.
readln (A, B); C: = A;
while C
Примітка. Грамотне використання оператора WHILE передбачає вміння правильно написати умову відновлення циклу. Тут треба мати на увазі наступні рекомендації:
1. У умови, як в логічному вираженні, повинні обов'язково фігурувати змінні, які змінюють свої значення в тілі циклу.
2. Щоб уникнути зациклення краще спочатку написати умова припинення циклу і взяти потім в операторі його заперечення.
3. Змінні логічного виразу повинні отримати свої вихідні значення до входу в оператор WHILE.
Оператор REPEAT називають оператором циклу з умовою поста, так як тут вираз, що управляє повторним виконанням послідовності операторів, поміщається після тіла циклу (див. Рис. 25).
Мал. 25. Синтаксична діаграма оператора циклу REPEAT
З синтаксичної діаграми видно, що в цьому операторі не обов'язково використовувати для тіла циклу операторні дужки. Тут ключові слова REPEAT і UNTIL самі грають роль цих дужок.
У цьому операторі тіло циклу виконується до тих пір, поки помилково умова, що стоїть після UNTIL. Умовою виходу з циклу є істинність виразу. Ми бачимо, що це є форма «циклу-до». Даний оператор представлений на рис. 26.
Примітка. Між операторами WHILE і REPEAT існує три основних відмінності:
1. В операторі REPEAT перевірка умови виходу з циклу виконується в кінці, а не на початку циклу, як в операторі WHILE, тому в операторі REPEAT тіло циклу виконується хоча б один раз.
2. У REPEAT вихід з циклу здійснюється по істинності умови, а в WHILE - по хибності.
3. В операторі WHILE тіло циклу найчастіше має форму складеного оператора, в операторі REPEAT для організації тіла циклу операторні дужки не потрібні.
Оператор FOR призначений для організації циклів, коли заздалегідь відомо, скільки разів має повторитися тіло циклу. Тут управління числом повторень здійснюється за допомогою спеціальної змінної - параметра циклу (керуючоїзмінної), якій присвоюється зростаюча (спадна) послідовність значень. Оператор FOR представлений на рис. 27.
Мал. 27. Синтаксична діаграма оператора циклу FOR
Тут «змінна» є параметр циклу, «вираз 1» - початкове значення параметра, «вираз 2» - його кінцеве значення. У якості керуючої змінної повинна бути змінна, оголошена локальної в блоці, який містить даний оператор FOR. Керуюча змінна повинна мати ординальне тип. Початкове і кінцеве значення мають тип, сумісний з типом параметра циклу.
Коли починає виконуватися оператор FOR, початкове і кінцеве значення визначаються один раз, і ці значення зберігаються протягом усього виконання оператора.
Оператор, який міститься в тілі циклу, виконується один раз для кожного значення керуючої змінної в діапазоні між початковим і кінцевим значеннями. Керуюча змінна завжди ініціалізується початковим значенням. Вона приймає всі свої значення з діапазону з кроком 1, якщо TO, і з кроком -1, якщо DOWNTO.
У разі TO, якщо початкове значення перевищує кінцеве, тіло циклу не виконується.
Для випадку DOWNTO це має місце, коли початкове значення менше, ніж кінцеве. Звідси робимо висновок, що оператор циклу FOR реалізує, як і WHILE, схему циклу «поки» - перевірка умови повторення циклу йде до тіла циклу.
1. Якщо тіло циклу в цьому операторі складається з більш одного оператора, то вони все полягають в операторні дужки (реалізують конструкцію складеного оператора).
2. На відміну від шкільного алгоритмічної мови, оператор FOR можна перервати шляхом привласнення керуючоїзмінної її кінцевого значення. Зміни змінної циклу не впливають на кількість повторень тіла циклу.
3. Після виконання оператора значення керуючої змінної стає невизначеним, якщо тільки виконання оператора FOR не було перервано за допомогою оператора переходу.
Розглянемо приклади використання оператора FOR для організації циклічних процесів.
П р и м і р 1. Друк відліку цифр при старті.
var SEC: integer;
writeln ( 'До старту залишилося.');
for SEC: = 10 downto 1 do
writeln ( 'нуль'); writeln ( 'Старт.')
В даному прикладі керуюча змінна SEC приймає значення типу INTEGER, проте в Паскалі вона визначена як змінна ординальне типу і, отже, може приймати значення типу CHAR або належати перелічуваних типу, як показано в прикладі 2.
П р и м і р 2. Підрахунок числа годин робочого тижня.
type DAYS = (MO, TU, WE, TH, FR, SA, SU);
var DEN: DAYS; WT: integer;
for DEN: = MO to SA do
if DEN <> SA then WT: = WT + 8
else WT: = WT + 7; writeln (WT);
1. Що таке структурний оператор?
2. Яке призначення складеного оператора?
3. Які оператори використовуються для організації розгалуження (вибору)?
4. Що використовується в операторі IF для здійснення вибору одного варіанта з двох?
5. Що використовується в операторі CASE для здійснення вибору одного варіанта з багатьох?
6. Як здійснюється вкладення одного оператора IF в інший?
7. У чому відмінність (з функціональної точки зору) повної і неповної версій оператора CASE?
8. Які типи циклів (цикл-поки або цикл-до) реалізують оператори WHILE і REPEAT?
9. Що використовується в операторах WHILE і REPEAT для перевірки закінчення роботи циклу?
10. Яка роль керуючої змінної в операторі FOR?
11. Який тип керуючої змінної можна використовувати в операторі FOR?
12. Чим відрізняються оператори WHILE, REPEAT і FOR з точки зору числа повторень тіла циклу?
13. У яких операторах Паскаля тіло циклу може не виконуватися жодного разу?