Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

4.1.1. Умовний вираз

Іноді новачків у мові програмування C++ збиває з пантелику той факт, що для керування if-настановою можна використовувати будь-який дійсний С++-вираз. Іншими словами, тип виразу необов'язково обмежувати операторами відношення та логічними операторами або операндами типу bool. Головне, щоб результат обчислення умовного виразу можна було інтерпретувати як значення ІСТИНА або ФАЛЬШ. Як зазначалося у попередньому розділі, нуль автоматично перетвориться в false, а всі ненульові значення – в true. Це означає, що будь-який вираз, який дає в результаті обчислення нульове або ненульове значення, можна використовувати для керування if-настановою. Наприклад, наведена вище програма зчитує з клавіатури два цілі числа і відображає частку від ділення першого на друге. Щоб не допустити ділення на нуль, у програмі використано if-настанову.

Код програми 4.3. Демонстрація механізму використання if-настанови

#include <iostream> // Для потокового введення-виведення

using namespace std; // Використання стандартного простору імен

int main()

{

int a, b;

cout << "Введіть два числа: ";

cin >> а, b;

if(b) cout << a/b << "\n";

else cout << "На нуль ділити не можна.\n";

getch(); return 0;

}

Звернемо Вашу увагу на те, що значення змінної b (дільник) порівнюється з нулем за допомогою настанови if(b), а не настанови if(b != 0). Йдеться про те, що, коли значення b = 0, умовний вираз, який керує настановою с, оцінюється як ФАЛЬШ, то це призводить до виконання else-гілки. Інакше (коли b містить ненульове значення) умова оцінюється як ІСТИНА, тобто ділення легко виконується. Немає ніякої потреби використовувати наступну if-настанову, яка до того ж не свідчить про хороший стиль програмування мовою C++:

if(b != 0) cout << a/b << "\n";

Ця форма if-настанови вважається застарілою і потенційно неефективною.

4.1.2. Вкладені if-настанови

Вкладені if-настанови виникають у тому випадку, якщо елемент настанова (див. повний формат запису) використовується інша if-настанова. Вкладені if-настанови дуже популярні у програмуванні. Головне тут – пам'ятати, що else-настанова завжди належить до найближчої if-настанови, яка знаходиться усередині того ж програмного блоку, але ще не пов'язана ні з якою іншою else-настановою. Ось приклад:

if(izm) {

if(jzm) statement1;

if(kzm) statement2; // Ця if-настанова

else statement3; // пов'язана з цією else-настановою.

}

else statement4; // Ця else-настанова пов'язана з if(izm).

Як стверджується в коментарях, остання else-настанова не пов'язана з настановою if(jzm), оскільки вони не знаходяться в одному блоці (незважаючи те, що ця if-настанова – найближча, яка не має при собі "else-пари"). Внутрішня else-настанова пов'язана з настановою if(kzm), оскільки вона – найближча і знаходиться усередині того ж блоку.

Вкладена if-настанова – це настанова, яку використовують як елемент настанови будь-якої іншої if- або else-настанови.

Мова програмування C++ дає змогу 256 рівнів вкладення, але на практиці рідко доводиться вкладати if-настанови на "таку глибину".

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

Код програми 4.4. Демонстрація програми "Вгадай магічне число": друге удосконалення

#include <iostream> // Для потокового введення-виведення

#include <cstdlib> // Для використання бібліотечних функцій

using namespace std; // Використання стандартного простору імен

int main()

{

int magic; // магічне число

int guess; // варіант користувача

magic = rand(); // Отримуємо випадкове число.

cout << "Введіть свій варіант магічного числа: ";

cin >> guess;

if(guess == magic) {

cout << "** Правильно **\n";

cout << magic << " і є те саме магічне число.\n";

}

else {

cout << "... Дуже шкода, але Ви помилилися.";

if(guess > magic)

cout << "Ваш варіант перевищує магічне число.\n";

else

cout << "Ваш варіант є меншим від магічного числа.\n";

}

getch(); return 0;

}