
Оператор циклу з лічильником (з параметром) for
Оператор циклу з лічильником підходить для програмування тільки таких циклічних фрагментів, у яких до виконання циклу відомі початкове й кінцеве значення лічильника повторень циклу. Це обумовлює його менш широку сферу застосування, чим більше універсальних операторів while і repeat. Однак у тих випадках, коли його використання можливо, оператор for, завдяки своїй високій наочності, має безсумнівну перевагу перед операторами циклу з умовами.
Спрощено загальну структуру оператора циклу з лічильником можна представити одним з наступних способів.
1) Якщо лічильник при виконанні циклу нарощує своє значення:
for Змінна := ПочатковеЗначенхяЛічильника to КінцевеЗначенняЛічильника do Оператор |
Щоб Оператор ВИКОНАВСЯ ХОЧА б ОДИН раз ПочатковеЗначенхяЛічильника повинне бути не більше, ніж КінцевеЗначенняЛічильника.
2) Якщо лічильник при виконанні циклу зменшує своє значення:
for Змінна := ПочатковеЗначенхяЛічильника downto КінцевеЗначенняЛічильника do Оператор |
Щоб Оператор ВИКОНАВСЯ ХОЧА б ОДИН раз ПочатковеЗначенхяЛічильника ПОВИННЕ бути не менше, ніж КінцевеЗначенняЛічильника.
Приклад.
Begin . . . Summa := 0; for i := 1 to n do Summa := Summa + A[i] ; . . . end. |
Приклад з помилкою.
Begin . . . Summa := 0; for i := 1 to n do Begin Summa := Summa + A[i] ; i := i + 1 ← Помилка! end ' end. |
В Turbo Pascal, також як і у всіх інших реалізаціях мови Pascal, оператор for має два істотних обмеження:
-
Крок зміни лічильника циклів може бути тільки або +1 (якщо використається ключове слово to), або -1 (якщо використається ключове слово downto).
-
Змінна, що виступає в ролі лічильника циклів, може бути тільки порядкового типу й повинна бути локальною для того блоку, у якому перебуває оператор for.
Порівняння роботи операторів while, repeat і for
Відзначимо відмінності й особливості гарного стилю роботи з розглянутими циклічними операторами.
Цикл з передумовою while (поки умова істинна) |
Цикл з післяумовою repeat (до істинності умови) |
|
1) До початку циклу повинні бути зроблені початкові установки змінних, керуючих умовою циклу, для коректного входу в цикл |
||
2) У тілі циклу повинні бути присутнім оператори, що змінюють змінні умови так, щоб цикл через деяке число ітерацій завершився |
||
3) Цикл працює поки умова істинна (поки True) |
3) Цикл працює поки умова хибна (поки False) |
|
4) Цикл завершується, коли умова стає помилковою (до False) |
4) Цикл завершується, коли умова стає істинною (до True) |
|
5) Цикл може не виконатися жодного разу, якщо вихідне значення умови при вході в цикл дорівнює False, |
5) Цикл обов'язково виконується як мінімум один раз |
|
6) Якщо в тілі циклу потрібно більше одного оператора, то необхідно використати складений оператор |
6) Незалежно від кількості операторів у тілі циклу використання складеного оператора не потрібно |
|
Цикл з лічильником for |
||
1) Початкова установка змінної лічильника циклів до заголовка не потрібна |
||
2) Зміна в тілі циклу значень змінних, що стоять у заголовку циклу, не допускається |
||
3) Кількість ітерацій циклу незмінне й точно визначається значеннями нижньої й верхньої границь і кроку циклу |
||
4) Нормальний хід роботи циклу може бути порушений оператором goto або процедурами Break і Continue |
||
5) Цикл може не виконатися жодного разу, якщо крок циклу буде змінювати значення лічильника від нижньої границі в напрямку, протилежному верхній границі |
Для наочності порівняння запису циклів while, repeat і for зберемо воєдино розглянуті для них приклади.
S: =0 ; i: =1 ; while i<=n do begin S:=S+A[i] ; i:=i+l ; end |
S:=0; i: =1; repeat S:=S+A[i]; i:=i+l; until i>n |
S: =0; for i:=l to n do S:=S+A[i]; |