Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция Pascal_mat №6_7.doc
Скачиваний:
5
Добавлен:
02.12.2018
Размер:
149.5 Кб
Скачать

Оператор циклу з лічильником (з параметром) 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.

Помітимо, що для оператора for, на відміну від while і repeat, установка початкового значення лічильника циклів (i:=l) виконується не перед заголовком циклу, а прямо в заголовку. Крім того, після закінчення тіла циклу нарощування/ зменшення значення лічильника відбувається автоматично. Таким чином, спеціальний оператор для збільшення значення лічильника (i:=i+l) не потрібний. Більше того, такий оператор приведе до неправильної роботи циклу.

Приклад з помилкою.

Begin

. . .

Summa := 0;

for i := 1 to n do

Begin

Summa := Summa + A[i] ;

i := i + 1 Помилка!

end '

end.

У більшості реалізацій мови Pascal зміна значень змінних, використовуваних у заголовку циклу for, заборонене й приводить до видачі повідомлення про помилку на етапі компіляції. У реалізації Turbo Pascal ця заборона знята, однак такі дії в рамках циклу for, як правило, приводять до його непередбаченого поводження й вважаються поганим стилем програмування.

В Turbo Pascal, також як і у всіх інших реалізаціях мови Pascal, оператор for має два істотних обмеження:

  1. Крок зміни лічильника циклів може бути тільки або +1 (якщо використається ключове слово to), або -1 (якщо використається ключове слово downto).

  2. Змінна, що виступає в ролі лічильника циклів, може бути тільки порядкового типу й повинна бути локальною для того блоку, у якому перебуває оператор 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];