Оператор циклу

Вкладені умовні оператори

Короткий умовний оператор

Розгалужується обчислювальний процес і умовний оператор

Головне, чого бракує нашим першим програмам - гнучкості та вміння приймати рішення. Адже вже нескладний алгоритм розв'язання квадратного рівняння передбачає два варіанти розрахунку, реальні ж алгоритми можуть видавати результати, що залежать від десятків та сотень умов.

Обчислювальний процес, що розгалужується (РВП) реалізується по одному з декількох напрямів обчислення (гілок алгоритму). Вибір однієї з гілок залежить від істинності чи хибності деякої умови (логічного виразу), включеної до складу умовного оператора. Програма повинна враховувати всі можливі гілки обчислень. Під час запуску програми, залежно від даних, виконується лише одна з можливих гілок.

Це перший вид умовного оператора, що дозволяє програмі виконати чи пропустити певний блок обчислень. Загальний вигляд короткого умовного оператора:

if логічний_вираз then оператор1;

Спочатку обчислюється логічне вираз, якщо вона має значення true, то виконується оператор1, інакше оператор1 ігнорується.

Коли після ключових слів then чи else знову використовуються умовні оператори, вони називаються вкладеними. Число вкладень може бути довільним, при цьому діє правило: else завжди відноситься до найближчого then. Часто вкладенням умовних операторів можна замінити використання складового.

Як приклад розглянемо програму визначення номера координатної чверті p, у якій перебуває точка з координатами (x,y). Для простоти приймемо, що точка не лежить на осях координат. Без використаннявкладень основна частина програми може мати такий вигляд:

if (x>0) and (y>0) then p:=1

else if (x 0) then p:=2

else if (x 0, x 0 then begin

У першому фрагменті програмі перевіряється від 2 до 6 умов, у другому - завжди лише 2 умови. Тут використання вкладень дало суттєвий виграш у продуктивності.

Циклічний обчислювальний процес (ЦВП) характеризується повторенням тих самих обчислень над деяким набором даних. Числом повторень циклу управляє спеціальна змінна, звана його лічильником або змінною циклу, що управляє. На лічильник накладається умова, що визначає, доки слід виконувати цикл.

Повторюваний блок обчислень називають тілом циклу. У тілі циклу має бути забезпечена зміна значення лічильника, щоб він міг завершитись. Якщо тіло циклу складається з більш ніж одного оператора, воно полягає в операторні дужки begin . end;. Одноразове виконання тіла циклу називають його кроком.

Таким чином, для програмування циклу достатньо визначити умову, що керує числом його повторень та описати оператори, що утворюють тіло циклу. З цієї точки зору, теоретично можливі лише два види циклів - перевірка умови або передує виконанню тіла циклу, або відбувається після нього. Зобразимо ці цикли як блок-схем (рис. 9.1).

У циклі з передумовою спочатку перевіряється умова, потім, залежно від того, істинно воно або хибно, або виконується тіло циклу, або слідує перехід до оператора, що йде за тілом циклу. Після завершення тіла циклу керування знову передається на перевірку умови. Природно, передбачається, що в тілі циклу було забезпечено деяку зміну змінних, що входять в умову - в іншому випадку відбудеться зациклюваннята програма "зависне".

тіло циклу

Мал. 9.1. Блок-схеми циклів з передумовою та постумовою

Для циклу з постумовою спочатку виконується тіло циклу, потім керування передається на перевірку умови. Залежно від істинності чи хибності умови, тіло циклу виконується повторно або відбувається перехід до оператора, наступного за тілом циклу. Все, сказане про можливе зациклювання для циклу з передумовою, справедливо і для циклу з постумовою.

Виходячи з наведених блок-схем, очевидно основна відмінність двох циклів: цикл з постумовою гарантовано виконується хоча б раз, а цикл з передумовою може не виконуватися жодного разу, якщо умова відразу виявиться хибним.

У мові Паскаль реалізовано обидва види циклів. Цикл з передумовою має такий загальний вигляд:

while логічний_вираз do begin

Роботу циклу можна описати словами: "поки логічне вираз істинно, повторюється тіло циклу".

Логічне вираз будується за правилами, вивченими в гол. 7. Тіло циклу можуть утворювати будь-які оператори Паскаля. Якщо в циклі знаходиться лише один оператор, операторні дужки, що показують початок та кінець тіла циклу, можна не писати.

Загальний запис циклу з умовою наступний:

Працює цикл з умовою наступним чином: "тіло циклу повторюється доти, поки логічне вираз не стане істинним". Зверніть увагу, що, на відміну від while, цикл repeat в Паскалі працює, поки умова хибна. Ця відмінність підкреслюється використанням ключового слова until ("доки не") замість while ("до тих пір, поки"). Крім того, як виняток, тіло циклу repeat, навіть якщо воно складається з декількох операторів, можна не укладати в операторні дужки.

Досить часто цикли взаємозамінні.Уявімо, наприклад, що для кожного із значень змінної x=1, 2, . 20 потрібно виконати деякий розрахунок (математично цей закон зміни x можна записати як або ). Це можна зробити як у циклі while:

Як видно з лістингу, що управляє змінною x в обох випадках присвоєно початкове значення 1, обидва цикли змінюють значення x і, відповідно, умова циклу, оператором x:=x+1;, але для циклу repeat умова "перевернута" ("поки x не стане більше 20"), а тіло не укладено в операторні дужки.

Найчастіше використання одного з циклів виглядає кращим. Наприклад, обробка введення користувача з клавіатури зручніша за допомогою repeat (спочатку користувач повинен натиснути клавішу, потім слідують перевірки та обробка).