Розгалуження у програмуванні

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

У цьому матеріалі - моя спроба пояснити, що таке конструкція розгалуження і як вона використовується мовами програмування.

Розгалуження і Висловлювання


Розгалуження - це конструкція мови програмування, що містить деяке висловлювання зрозуміле виконавцеві і на яке він, виконавець, може дати відповідь - істинне воно чи хибне. В залежності від істинності чи хибності висловлювання виконавець виконує той чи інший набір команд які також входять до складу розгалуження.
 
У повсякденному житті людина стикається з тим, що "передбачає" для себе план дій на випадок якоїсь ситуації. Наприклад учень, що не виконав домашнє завдання йдучи до школи планує свої дії на випадок якщо  викличе вчитель, а ще планує свої дії на випадок якщо мама лаятиме. Щодня перед тим як перейти дорогу наш мозок робить перевірку істинності висловлювання формулюючи його приблизно так: "якщо машин немає"  і в залежності від істинності дає вказівку ногам "йти" чи "стояти". Отже і для робота програміст повинен передбачити і ситуацію і дії, які потрібно виконати у випадку її настання.

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

  • якщо батарея розрядилась,
  • якщо чайник закипів,
  • якщо надійшов пароль для входу і пароль правильний.

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

Відповідями на висловлювання "батарея розрядилася", "чайник закипів" і безліч інших є два прости слова - ТАК і НІ. Відповідь на висловлювання ТАК означає, що воно істинне, а відповідь НІ означає, що висловлювання хибне.

Що означає висловлювання "пароль правильний"?

Можливо правильніше буде запитати у себе коли висловлювання "пароль правильний" буде істинним? Очевидно, що воно буде істинним тоді, коли комбінація символів яка надійшла виконавцеві співпадає з оригіналом, що  є у виконавця. 
Коли  висловлювання "чайник закипів" буде істинним? І тут є очевидна відповідь - температура води у чайнику дорівнює 100 градусам. І попереднє висловлювання з точки зору математики буде істинним коли фраза (набір символів), що надійшла від користувача дорівнює фразі-оригіналові, що є у виконавця. У якій ситуації Ви зможете прошепотіти на вухо товаришеві якийсь секрет?

Якщо  "відстань від Ваших вуст до його вух" менша  "20 сантиметрів".


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

  1. за зарядом батареї визначити "відстань яку він може подолати"
  2. виміряти відстань до кратера

І на цьому етапі ми і повинні подбати про те, щоб робот мав можливіть виконати правильні команди, а отже нам портібно скласти висловлювання на яке програма скаже так чи ні.  

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

"відстань яку можна подолати" > "відстань до кратера" або "відстань до кратера" <  "відстань яку можна подолати"

Сформулювавши одне з таких висловлювань можна оформити конструкцію у якій виконавець буде виконувати деякі дії якщо відповіддю на висловлювання буде ТАК і передбачити інші команди колли відповіддю буде НІ.

 

Дивлячись на ці приклади можна сказати, що конструкція розгалуження містить висловлювання які мають вигляд:
a = для Pascal чи a ==  для C++
a > b
a < b
У цих висловлюваннях a і являють собою або якусь змінну, що містить якесь значення (температуру води, текст, що означає пароль, відстань до об’єкта). 
Мови програмування дозволяють складати складніші висловлювання. Що означає фраза "невід’ємне число"? Учні 6 класу скажуть, що це число 0 чи будь-яке додатне число. А від так можна скласти наступні висловлювання:
a >= b
a
<= b
a + 5 = b
Ось саме такі приклади і використовують програмісти для складання висловлювань.
Але трапляються ситуаці коли дуже доречним є висловлювання "a  не дорівнює b" У різних мовах програмування воно записується по різному.
У мові Pascal  воно запишеться як a <> b. 
У мові С++ як a != b.
Як можна сказати, що пішохідний світлофор зелений не використовуючи слова зелений? Правильно - "не червоний".
У програмуванні це може бути записано як not (a) чи .

Блок-схема

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

Розгалуження у мовах програмування
У мові програмування  Pascal конструкція розгалуження має вигляд:
IF висловлювання THEN
BEGIN
дія1;
дія2;
END
ELSE
BEGIN
дія3;
дія4;
END;
У мові С++ цю контструкцію записують так:
IF ( висловлювання) {
дія1;
дія2;
} ELSE {
дія3;
дія4;
}

Відмінністю є лише операторні дужики.  У Pascal це - begin ... end, а у С++ { }. А ще у С++ висловлювання записується у дужки.
 

Практичні завдання

Складіть фрагмент коду у якому змінна набуває занчення 1 коли A=B є істинним і 0 в іншому випадку.
 
ПОДІЛИТИСЯ У FACEBOOK