- •Практична робота № 9 Тема:Реалізація циклічних алгоритмів
- •Загальні відомості
- •2.1. Оператор циклу з передумовою (while)
- •2.2. Оператор циклу з постумовою (repeat...Until)
- •2.3. Оператор циклу з параметром (for-do)
- •Практична частина
- •Додаток Приклад програми з використанням операторів повторення
- •Реалізація задачі за допомогою оператора повторення з передумовою
- •Реалізація задачі за допомогою оператора повторення з постумовою
- •Реалізація задачі з використанням оператора повторювання з параметром
- •Варіанти завдань
2.3. Оператор циклу з параметром (for-do)
Оператори циклів з перед- і з постумовою, хоча і мають значну гнучкість, не занадто зручні для організації «строгих» циклів, що повинні бути пророблені дане число раз. Цикл із параметром уводиться саме для таких випадків. Синтаксис оформлення циклів з параметром наступний:
FOR Параметрцикла:=Младшеезнач ТЕ Старшеезнач DO Оператор;
або
FOR Параметрцикла:=Старшеезнач DOWNTO Младшеезнач DO Оператор;
Слова FOR...TO (DOWNTO)...DO можна перевести як «для параметра від...до...робити».
Оператор, що представляє собою тіло циклу, може бути простим, складеним або порожнім. В останньому випадку за словом DO відразу ставиться крапка з комою. Параметр циклу, а також діапазон його зміни (від стартового до кінцевого значення включно) може бути тільки цілочисленного типу, або типу що перелічується. Сам параметр повинний бути описаний разом з іншими перемінними. Крок циклу FOR завжди постійний і дорівнює «інтервалові» між двома найближчими значеннями типу параметра циклу.
Зміна параметра циклу може бути зростаючої, але може бути й убутної. У першому випадку Молодше_Значення повинне бути не більше чим Старше, а в другому — навпаки. Приклад оформлення циклів з параметром:
VAR
I: Integer; { опис параметрів циклів)
С: Char;
B: Boolean;
BEGIN
FOR i = -10 TO 10 DO Writeln( i )
FOR i = 10 DOWNTO -10 DO Writeln( i )
FOR з = 'a' TO 'z' DO Writeln( с);
FOR b =True DOWNTO False DO Writeln( b );
END.
Якщо параметр зростає, то між границями його значень ставиться слово ТО, якщо ж убуває, те ставиться слово DOWNTO. Відповідно з цим міняються місцями старше і молодше значення в заголовку циклу. На місці старших і молодших значень можуть стояти константи, а можуть і перемінні або вираження, сумісні по присвоюванню з параметром циклу.
Виконання циклу починається з присвоювання параметрові стартового значення. Потім випливає перевірка, чи не перевершує параметр кінцеве значення (випадок з ТО) або чи не є він менше кінцевого значення (випадок з DOWNTO). Якщо результат перевірки стверджувальний, то цикл вважається завершеним і керування передається наступний за тілом циклу операторові. У противному випадку виконується тіло циклу, і після цього параметр змінює своє значення на наступне, відповідно до заголовка циклу. Далі знову виробляється перевірка значення параметра циклу, тобто алгоритм повторюється. З цього випливає, що будуть зігноровані цикли
FOR i : = 5 ТЕ 4 DO ...;
FOR i := 4 DOWNTO 5 DO ...;
а цикл FOR i := N TO N DO ...;
виконає оператори свого тіла строго один раз.
Забороняється змінювати параметр циклу і його старше і молодше значення (якщо вони задані перемінними або вираженнями з ними) зсередини тіла циклу. Крім того, параметр циклу не може брати участь у побудові діапазонів цього ж циклу. Компілятор таких «незаконних» дій не зауважує, але програма, що містить цикл із заголовком типу
FOR i := i-5 TO i+5 DO ...
не заслуговує ніякої довіри, навіть якщо запускається. Якщо ж необхідно достроково завершити цикл FOR (для чого велика спокуса штучно «підростити» параметр циклу), то можна скористатися оператором переходу Goto .
Цикли з параметром — дуже швидкі і генерують компактний здійсненний код. Але усім їм властивий один традиційний у Паскале недолік — параметр повинний належати до перечислимому типу, а крок не може бути змінений. Наслідком цього є проблеми організації циклів із кроком, відмінним, наприклад, від 1, а тим більше циклів з речовинним параметром.
Для дозволу таких проблем приходиться використовувати обхідні шляхи: звертатися до циклів з умовами. Так, цикл із речовинним параметром від 3,20 до 4,10 із кроком 0,05 можна запрограмувати циклом WHILE:
г:=3.20;
WHILE r<=4.10 DO
begin
г := м + 0.05
end;
Повертаючи до циклів FOR, помітимо, що вони допускають вкладеність за умови, що ніякий із вкладених циклів, поряд з іншими операторами, не використовує і не модифікує перемінні — параметри зовнішніх циклів.
