Умовний оператор розгалуження

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

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

Ознакою алгоритму розгалуження є наявність операцій перевірки умови. Розрізняють два види умов – прості і складові.

Простим умовою (ставленням) називається вираз, складене з двох арифметичних виразів або двох текстових величин (інакше їх ще називають операндами), пов’язаних одним із знаків:

< Менше, ніж …
> Більше, ніж …
<= Менше, ніж … або дорівнює
>= Більше, ніж … або дорівнює
<> Не дорівнює
= Дорівнює

Наприклад, простими є такі відношення:

x-y> 10; k <= sqr (c) + abs (a + b); 9 <> 11; ‘Мама’ <> ‘тато’.

У наведених прикладах перші два відношення включають в себе змінні, тому про істинність цих відношень можна судити тільки при підстановці конкретних значень:

якщо х = 25, у = 3, то ставлення x-y > 10 буде істинним, тому що 25-3> 10

якщо х = 5, у = 30, то ставлення x-y> 10 буде хибним, тому що 5-30 <10

Перевір істинність другого відношення при підстановці наступних значень:

k = 5, a = 1, b = -3, c = -8

k = 65, a = 10, b = -3, c = 2

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

Примітка. Назва “булеві” походить від імені математика Джорджа Буля, який розробив в XIX столітті алгебру логіки.

Визначення. Змінна, яка може приймати одне з двох значень: True (істина) або False (хиба), називається булевою (логічною) змінною. Наприклад,

Завдання. Обчислити значення модуля і квадратного кореня з виразу (х-у).

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

У цьому випадку програма буде мати вигляд:

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

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

Завдання. Наберіть текст програми. Протестуйте програму з наступними значеннями змінних і зробіть висновок.

х = 23, у = 5;
х = -5, у = 15;
х = 8, у = 8.

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

Розглянемо оператор If.

Для нашої задачі потрібно виконати наступний алгоритм:

якщо х> = у, то обчислити значення квадратного кореня,
інакше вивести на екран повідомлення про помилкові введенні дані.

Запишемо його за допомогою оператора If. 

Тепер в залежності від введених значень змінних х і у, обчислення квадратного кореня може виконуватися або не виконуватись.

У загальному випадку повна форма конструкції умовного оператора має наступний вигляд:

Умовний оператор працює за наступним алгоритмом.

Спочатку обчислюється значення логічного виразу, розташованого за службовим словом IF. Якщо його результат істинний, виконується <оператор 1>, розташований після слова THEN, а дії після ELSE пропускається; якщо ж результат хибний, то, навпаки, дії після слова THEN пропускається, а після ELSE виконується <оператор 2>.

Якщо в якості оператора повинна виконатися серія операторів, то вони об’єднуються в операторні дужки begin-end. Конструкція begin … end називається складовим оператором.

Визначення. Складовий оператор – об’єднання декількох операторів в одну групу. Група операторів усередині складеного оператора заключається в операторні дужки (begin-end).

З урахуванням отриманих знань змінимо нашу програму.

Складовим оператором є і такий оператор

Cимвол “;” в даному випадку розділяє оператор присвоювання S: = 0 і порожній оператор.

Порожній оператор не тягне за собою ніяких дій і в записі програми не позначається ніяким чином.

Наприклад, складовою оператор

включає лише один порожній оператор.

Якщо ти звернув увагу, програма на мові Паскаль завжди містить один складений оператор – розділ операторів програми.

Увага! Перед службовим словом else роздільник (крапка з комою) не ставиться.

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

  • кожен опис змінної і визначення константи закінчуються крапкою з комою;
  • кожен оператор у тілі програми завершується крапкою з комою, якщо відразу за ним не йдуть зарезервовані слова end, else, until.
  • після певних зарезервованих слів, таких, як then, else, var, const, begin, ніколи не ставиться крапка з комою.

Можна також використовувати і скорочену (неповну) форму запису умовного оператора. Ця форма використовується тоді, коли в разі невиконання умови нічого робити не треба.

Неповна форма умовного оператора має наступний вигляд.

Тоді якщо вираз, розташоване за службовим словом IF, у результаті дає істину, виконуються дії після слова THEN, в іншому випадку ці дії пропускаються.

Завдання. Скласти програму, яка при введенні від’ємного числа змінює його значення на протилежне.

May everyone find his happiness.