Якщо уважно придивитися, то вся наша повсякденне життя складається з одних «якщо» На кожному шагуделается вибір: «якщо – то, інакше – це» Але свобода вибору – річ вельми ілюзорна, що підтверджується багатовіковим досвідом людства У програмуванні ситуація аналогічна Широко застосовуються оператори розгалужень «if», «if-else», «switch» используюталгоритмыдвоиого і множинного вибору Логіка застосовується жорстка, з чітким зазначенням дальнейшіхдействій Свобода є, тільки дуже вже вона регламентована ..

Оператор «if» (у перекладі з англ «Якщо»)

Схема алгоритму оператора «if» показана на Рис 620, а Якщо умова перевірки виконується, то здійснюється перехід до «Оператору-1», якщо ні, то даний оператор ігнорується і обходиться стороною

Существуютдве форми запису оператора «if» (Мал 620, б, в) У простій формі відсутні фігурні дужки, тому що є один-єдиний виконуваний оператор У складовою формі операторів багато, тому їх виділяють в окремий блок, старт і фініш якого обрамляють фігурними дужками

Рис 620 Оператор «if»: а) схема алгоритму б) проста форма в) складова форма

І в тій, і раптом формі умовою перевірки виступає деякий логічне вираження, яке може бути істинним або хибним Наприклад, «6> 5 »- це істина,« 100 < 99 »- це брехня. У Табл. 6.8 представлені варіанти допустимих логічних перевірок в мові Сі. Запам'ятати їх легко мнемонічно, оскільки знаки записуються в такому порядку, в якому читаються, наприклад, «менше або дорівнює» (<=), «більше або дорівнює» (> =), «Не дорівнює» ( =)

Таблиця 68 Умови логічних перевірок в мові Сі

Проверяемое умова може бути як одиночним «а> Ь », так і множинним« (а> b) && (З> d) » В останньому випадку замість символів «&&» можуть підставлятися та інші логічні операції з Табл 68 Обчислення проводяться слеваправо, починаючи з дужок Якщо в операторі перевіряється стан будь-якої лінії порту MK, то після перевірки логічний рівень на цій лінії не змінюється Дане твердження відноситься і до входів, і до виходів

Приклад У початковому стані на одному з виходів MK мається ВИСОКИЙ рівень Якщо в програмі зустрінеться оператор присвоювання, що змінює рівень на протилежний, то напруга на виході стане найнижчими Однак, якщо в програмі зустрінеться оператор перевірки «if», який порівнює стан лінії порту з низьким рівнем, то після його виконання вихідний рівень як був ВИСОКИМ, так ним і залишиться

При складанні програм, що містять логічні перевірки, потрібна певна точність і акуратність Зокрема, початківці програмісти нерідко плутають знак присвоювання = і знак перевірки рівності «==», Знак логічного множення «&» і знак конюнктівной перевірки «&&», знак логічного складання «| |» і знак дізюнктівной перевірки «| | | |» Загальне правило для запамятовування – одиночні символи застосовуються в операторах присвоювання, а подвійні символи – в умовах перевірки

Оператор «if-else» (у перекладі з англ «Якщо-інакше»)

Схема алгоритму оператора «if-else» показана на Рис 621, а Теоретично можливі чотири форми його запису (Мал 621, б .. д), умовно що позначаються римськими цифрами від «I» (максимально просто) до «IV» (Максимально складно)

Логіка функціонування звязки «if-else» наступна Якщо умова перевірки, укладену в круглих дужках після «if», істинне, то виконується «Оператор-1» (Мал 621, б, г) або блок операторів «1» .. «М» (Мал 621, в, д) Далі пропускаються рядки, які стосуються «else», і управління передається вниз до наступного оператору програми, який для простоти не показаний Якщо умова помилкове, то проводиться перехід до рядка «else», потім виконуються належні їй команди, після чого управління природним чином передається вниз до наступного оператору програми

У мові Сі допускаються багаторазові вкладення кшталт «if-if-else-else», при цьому кожному «else» обовязково повинен відповідати свій «if» Протилежне твердження невірно, тому що бувають «чисті» оператори «If», але без «else»

Рис 621 Оператор «if-else»: а) схема алгоритму б) проста форма «I» в) ускладнена форма «II» в) ускладнена форма «III» г) складна форма «IV»

Оператор «switch» (у перекладі з англ «Перемикати»)

Усі розглянуті раніше оператори розгалужень добре виглядають при виборі між двома альтернативами «або так – чи сяк» У тих випадках коли потрібно провести вибір одного з безлічі варіантів, зручніше застосовувати оператор «switch»

На Рис 622, а показана схема алгоритму, а на Рис 622, б, в – дві форми запису оператора «switch» Передбачається, що в умова перевірки входить целочисленная змінна «а», яка може приймати будь-яке значення від 0x00 до OxFF Значення змінної послідовно порівнюється з мітками «case» (у перекладі з англ «Кейс, ящик, коробка») Як тільки буде виявлений «кейс» з вмістом, який одно значенням вхідної змінної, то управління передається конкретному виконуваного оператору «I» .. «N»

Наприкінці кожного «кейса» розміщується оператор «break», який зупиняє подальше виконання команд і передає управління вниз до наступної по черзі рядку за межами оператора «switch» Якщо після перегляду всіх міток не буде виявлено жодного збігу, то шукається рядок «default» (може бути відсутнім) і виконується приналежний їй оператор (може бути відсутнім)

Рис 622 Оператор «switch»: а) схема алгоритму б) спрощена форма в) повна форма

За відсутності в програмі рядки «default» може статися, що умова порівняння ні разу не спрацює і оператор «switch» не виконає жодного корисної дії Проте, на пошук збігів витрачається певне машинний час, тому «холостий» оператор «switch» перетворюється на оператор затримки часу Наскільки велика виходить пауза, треба прораховувати при моделюванні в симуляторі

Джерело: Рюмік, С М, 1000 і одна мікроконтролерна схема Вип 2 / С М Рюмік – М: ЛР Додека-ХХ1, 2011 – 400 с: Ил + CD – (Серія «Програмовані системи»)