русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Цикл із лічильником і дострокове завершення циклів


Дата додавання: 2014-11-28; переглядів: 1559.


Перш, ніж перейти до прикладів, обговоримо ще ряд проблем, пов'язаних із циклами. Як для while, так і для repeat, по-перше, ніде в явному виді не задається число кроків циклу (хоча його звичайно можна обчислити), по-друге, при використанні обох циклів програміст повинен опікуватися про зміну керуючої змінної. Тим часом, досить поширені завдання, де обсяг послідовно оброблюваних даних відомий заздалегідь (а виходить, відомо й необхідне число кроків циклу), а керуюча змінна міняється із кроком, рівним одиниці. Розглянутий вище приклад із двадцятьома значеннями x ставиться саме до таких завдань. Тому для обробки заздалегідь відомого обсягу даних із кроком по керуючій змінній, рівним одиниці, замість циклу while використовується цикл із лічильником (цикл for). Його загальний вид наступний:

for лічильник := початкове_значення to кінцеве_значення do begin

{оператори тіла циклу}

end;

Тут лічильник – цілочисельна змінна, початкове й кінцеве значення – Цілочисельні вирази або константи. Тіло циклу утворене не менш, чим одним оператором, якщо цей оператор єдиний, операторные дужки можна не писати. Працює цикл for у такий спосіб: лічильник автоматично міняється від початкового значення до кінцевого включно, для кожного значення лічильника виконується тіло циклу. Після кожного кроку циклу значення лічильника автоматично збільшується на одиницю. Якщо потрібно, щоб значення лічильника зменшувалося, а не збільшувалося, замість ключового слова to використовується downto.

Подібно while, цикл for може не виконатися й жодного разу – якщо початкове значення керуючої змінної відразу ж більше кінцевого ( при використанні to) або менше ( при використанні downto).

Запишемо розглянутий вище цикл по змінній x за допомогою оператора for:

for x:=1 to 20 do begin

{оператори тіла циклу}

end;

Зручності очевидні – границі зміни x задані відразу ж при вході в цикл, а виконувати крок по x окремим оператором не потрібно. Зрозумілі й обмеження – x повинен бути описаний з типом integer, а у випадку зміни x із кроком, не рівним одиниці, використовувати for замість while не вдалося б.

Друга проблема пов'язана з тим, що при виконанні програми досить часто виникає необхідність завершити цикл достроково – наприклад, якщо шукане в ньому значення вже знайдене або виникла помилка, через якої подальші кроки стають безглуздими. Теоретично цикл можна було б завершити, привласнивши керуючої змінної значення, що виходить за межі її зміни:

x:=1;

while x<10 do begin

y:=ln(x);

if y>2 then x:=10; { При y>2 цикл потрібно завершити}

x:=x+0.5;

end;

Однак, щоб уникнути трудноуловимых помилок, що управляє змінну не прийнято міняти інакше, чому для виконання кроку циклу. Наприклад, після оператора if y>2 then x:=10; у нашім лістингу виконання поточного кроку продовжиться, що чревате зайвими або неправильними обчисленнями. Крім того, текст такої програми сприймається нелегко.

Тому для дострокового виходу із циклу існує оператор break ( від англ. "to break" - перервати), що негайно припиняє його виконання:

x:=1;

while x<10 do begin

y:=ln(x);

if y>2 then break; { При y>2 цикл потрібно завершити}

x:=x+0.5;

end;

Break тут передасть керування на оператор, що випливає безпосередньо за циклом. На відміну від попереднього прикладу, тут не буде виконуватися частина тіла циклу, що випливає за break;.

Для негайного продовження циклу з наступного кроку використовується оператор continue ( від англ. "to continue" – продовжити):

var n:integer;

begin

repeat

writeln ('Уведіть позитивне число:');

read (n);

if n<1 then continue; {Якщо введене n<1, знову запросити число}

{Тут розташовані оператори обробки позитивного числа}

break; {Вихід із циклу обробки}

until false;

end.

У цьому прикладі оператор continue використаний для повторного перехід до введення n, якщо введене n<1. Тому що цикл обробки тут – нескінченний, для виходу з нього необхідний break;. Крім того, приклад показує одну з можливостей контролю правильності введення даних. Указавши директиву {$I-}, вивчену в главі 8, ми могли б захистити програму й від уведення користувачем нечислових значень у якості n.

У темі "Кратні цикли" другої частини курсу буде розглянутий оператор goto, також здатний розв'язати проблему аварійного завершення циклів.

 


<== попередня лекція | наступна лекція ==>
Оператор циклу. Цикли із передумовою і після-умовою | Алгоритм табулювання


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн