Цикли
У більшості завдань, що зустрічаються на практиці, необхідно здійснювати багаторазове виконання однієї дії. Ділянка обчислювального процесу, що багаторазово повторюється, називається циклом.
Якщо заздалегідь відомо кількість необхідних повторень, то цикл називається арифметичним. Якщо ж кількість повторень заздалегідь невідомо, то говорять про ітераційний цикл.
В ітераційних циклах відбувається перевірка деякої умови і в залежності від результату цієї перевірки відбувається або вихід з циклу, або повторення виконання тіла циклу. Якщо перевірка умови відбувається перед виконанням блоку операторів, то такий ітераційний цикл називається циклом з передумовою (цикл "поки"), а якщо перевірка проводиться після виконання тіла циклу, то це цикл з післяумовою (цикл "до").
Особливість цих циклів полягає в тому, що тіло циклу з післяумовою завжди виконується хоча б один раз, а тіло циклу з передумовою може жодного разу не виконатися. В залежності від умови задачі необхідно використовувати той чи інший вид ітераційних циклів.
Арифметичні цикли
Синтаксис:
for змінна := значення 1 to значення 2 do оператор
або
for змінна := значення 1 downto значення 2 do оператор
Оператор for викликає оператор, що знаходиться після слова do, по одному разу для кожного значення в діапазоні від значення 1 до значення 2.
Змінна циклу, початкове і кінцеве значення повинні мати порядковий тип. Зі словом to, значення змінної циклу збільшується на 1 при кожній ітерації циклу. Зі словом downto, значення змінної циклу зменшується на 1 при кожній ітерації циклу. Не слід самостійно змінювати значення керуючої змінної всередині циклу.
Як і у випадку використання оператора умовного переходу, слід пам'ятати, що синтаксис мови допускає запис тільки одного оператора після ключового слова do, тому, якщо ви хочете в циклі виконати групу операторів, обов'язково треба об'єднати їх у складений оператор (обмежувати операторними дужками begin .. . end). В іншому випадку буде зроблена логічна помилка програми.
Приклад 1. Квадрати чисел від 2-х до 10-и.
for x:=2 to 10 do WriteLn(x*x);
Приклад 2. Латинський алфавіт.
for ch:='A' to 'Z' do Writeln(ch);
Приклад 3. Використання циклу з downto.
for i:=10 downto 1 do WriteLn(i);
Приклад 4. Використання складеного оператора.
for x:=1 to 10 do begin y:=2*x+3; WriteLn('f(',x,')=',y); end;
Ітераційні цикли з передумовою
Синтаксис:
while вираз do оператор
Оператор після do буде виконуватися доки логічний вираз приймає істинне значення (True). Логічний вираз є умовою поновлення циклу. Його істинність перевіряється щораз перед черговим повторенням оператора циклу, який буде виконуватися лише до тих пір, поки логічне вираз істинний. Як тільки логічний вираз приймає значення неправда (False), здійснюється перехід до оператора, наступного за while.
Істинність виразу перевіряється до виконання оператора, тому якщо він із самого початку буде мати значення неправда (False), то оператор не виконається жодного разу.
Тут також варто пам'ятати, що дозволяється використовувати тільки один оператор після ключового слова do. Якщо необхідно виконати групу операторів, то варто використовувати складений оператор.
Приклад.
eps:=0.001;
while x > eps do x:=x/2;
Ітераційні цикли з післяумовою
Синтаксис:
repeat оператор; оператор; ... оператор until вираз
Оператори між словами repeat і until повторюються, поки логічний вираз є не істинним (False). Як тільки логічний вираз набуває значення істина (True), відбувається вихід із циклу.
Так як вираз оцінюється після виконання операторів, то в будь-якому випадку оператори виконаються хоча б один раз.
Приклад.
repeat WriteLn('Введіть додатнє число'); ReadLn(x); until x>0;
Оператори завершення циклу
Для всіх операторів циклу вихід із циклу здійснюється як внаслідок природного закінчення оператора циклу, так і за допомогою операторів переходу і виходу.
У версії Турбо Паскаль 7.0 визначені стандартні процедури:
Break
Continue
Процедура Break виконує безумовний вихід із циклу. Процедура Continue здійснює перехід до початку чергової ітерації циклу.
Зауважимо, що хоча й існує можливість виходу з циклу за допомогою оператора безумовного переходу goto, реалізовувати її не бажано. У всіх випадках можна скористатися спеціально призначеними для цього процедурами Break і Continue.