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

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

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

Розглянемо спочатку варіант запису із вкладеними блоками. Наприклад розглянемо таке завдання.

Чоловік заповнює у військкоматі анкету та програма має залежно від зазначеного ним віку виводити різні підказки, а саме:

  1. Якщо зазначений вік від 18 до 27 років, то повідомляти, що заповнювач підлягає призову на строкову службу або може служити за контрактом.
  2. Якщо вказано вік від 28 до 59 років, то повідомляти, що той, хто заповнює, може служити за контрактом.
  3. Якщо вказано вік менше 18 або більше 59 років, то повідомляти про те, що заповнювач перебуває у непризовному віці.
  4. Якщо вказано непозитивний вік або вік понад 100 років, повідомити про помилку.

Припустимо, що вік збережений у змінній n, тоді для виведення підказки буде потрібен наступний код:

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

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

Але воно було б надлишковим, адже раніше (за рахунок вище перевірок, що стоять) ми вже переконалися, що змінна n не потрапила в проміжок [18; 60). Якби змінна потрапляла в проміжок, то вивелося б повідомлення "Ви можете пройти термінову або контрактну службу" або "Ви можете служити лише за контрактом".

Оператор множинного вибору

Інструкція множинного вибору switch дозволяє виконувати різні частини програми в залежності від того, яке значення матиме деяка цілочисленна змінною (її називають «змінною-перемикачем», а «switch» з англійської перекладається саме як «перемикач»).

Схема інструкції така:

Розглянемо всі елементи оператора:

  • перемикач - це цілочислова змінна або вираз, що дає цілісний результат;
  • значение1 , значение2 , … — це цілочисленні літерали, із якими порівнюватиметься значення перемикача. Якщо перемикач дорівнює значеннюN , то програма буде виконуватися з рядка, наступного за case значенняN: і до найближчого break , або до кінця блоку switch (якщо break не зустрінеться);
  • default: — це мітка інструкції, після якої будуть виконуватися в тому випадку, якщо вище жодне з значень N не співпало з перемикачем. Мітка default - необов'язкова: можна її не включати до блоку switch міток або не виконувати після неї ніяких команд;
  • інструкція N - проста або складова інструкція. До того ж у разі складової кілька команд не обов'язково поєднувати в блок, можна їх просто написати один за одним розділяючи за допомогою «;» (І починаючи нові рядки для зручності).

Розглянемо таку ситуацію: в якийсь момент потрібно просити у користувача, чи треба продовжувати програму, чи можна її завершити. Припустимо, щовідповідь користувача приймається у вигляді символу, що вводиться з клавіатури і зберігається в змінній ans: Д - так, продовжувати, Н - ні, зупинити.

Тоді отримуємо приблизно такий програмний код:

Якщо ми захочемо якось сповістити користувача про те, що він ввів невідповідний символ, то знадобиться мітка default:

Після інструкцій причетних до цієї мітки break зазвичай не ставлять, тому що default розташовується в кінці всього блоку switch і після неї все одно завершиться оператор множинного вибору. Але в решті гілок — break необхідний. Розглянемо приклад, в якому помилково пропущено перший break у ситуації, коли в змінній-перемикачі буде символ «Д»:

На екран будуть виведені відразу дві фрази: «Продовжуємо програму» та «Зупиняємо програму». Це сталося тому, що після першої гілки з літералом "Д" програма виконувалася до першого зустрінутого break, тобто. виконалася і частина, що відноситься до гілки з літералом "Н".

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

Тепер користувач для продовження програми зможе ввести не лише символ "Д", але й символи "д", "Y", "y" (від англійської "yes").

Будь-який оператор switch можна замінити конструкцією if…else:

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

if…else більш універсальний оператор, ніж switch.

Створити програму, яка перевірятиме чи потрапило випадково обране з відрізка [5;155] ціле число інтервал (25;100) і повідомляти результат на екран.

Приклади роботи програми:

Створити програму, що виводить на екран випадково згенероване тризначне натуральне число та його найбільшу цифру.

Приклади роботи програми:

У три змінні a, b і c явно записані програмістом три цілих попарно нерівних між собою числа. Створити програму, яка переставить числа змінних таким чином, щоб при виведенні на екран послідовність a, b і c виявилася строго зростаючою.

На деякому підприємстві інженер Петров створив пристрій, на табло якого з'являється кількість секунд, що залишилися до кінця робочого дня. Коли робочий день починається рівно о 9 годині ранку — табло відображає «28800» (тобто залишається 8 годин), коли часу 14:30 — на табло «9000» (тобто залишається дві з половиною години), а коли настає 17 годин – на табло відображається «0» (тобто робочий день закінчився).

Програміст Іванов помітив, як страждають офісні співробітниці — їм незручно оцінювати решту робочого дня за секунди. Іванов зголосився допомогти співробітницям і написати програму, яка замість секунд виводитиме на табло зрозумілі фрази з інформацією про те, скільки повних годин залишилося до кінця робочого дня. Наприклад: «залишилося 7 годин», «залишилося 4 години», «залишилося 1 година», «залишилося менше години».

Отже, в змінну n повинно записуватися випадкове (на час тестування програми) ціле число [0;28800], далі воно повинно виводитися на екран (для Петрова) і на наступному рядку (для співробітниць) повинна виводитися фраза про кількість повних годин у n секундах.

Приклади роботи програми: