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

3.5.5. Оператори відношення та логічні оператори

Оператори відношення та логічні (булеві) оператори, які часто йдуть "рука в руку", використовуються для отримання результатів у вигляді значень ІСТИНА/ФАЛЬШ. Оператори відношення оцінюють за "двобальною системою" відношення між двома значеннями, а логічні визначають різні способи поєднання дійсних і помилкових значень. Оскільки оператори відношення генерують ІСТИНА/ФАЛЬШ – результати, то вони часто виконуються з логічними операторами. Тому вони і розглядаються у одному розділі.

Оператори відношення та логічні (булеві) оператори перераховано в табл. 3.8. Звернемо Вашу увагу на те, що у мові програмування C++ як оператор відношення "не дорівнює" використовує символ " !=", а для оператора "дорівнює" – подвійний символ рівності (==). Згідно з стандартом мови програмування C++, результат виконання операторів відношення і логічних операторів має тип bool, тобто у процесі виконання операцій відношення і логічних операцій виходять значення true або false. Під час використання старших компіляторів результати виконання цих операцій мали тип int (нуль або ненульове ціле, наприклад 1). Ця відмінність в інтерпретації значень має в основному теоретичну основу, оскільки мова програмування C++ автоматично перетворює значення true в 1, а значення false – в 0, і навпаки.

Операнди, що беруть участь в операціях "з'ясування" відношення, можуть мати практично будь-який тип, головне, щоб їх можна було порівнювати. Що стосується логічних операторів, то їх операнди повинні мати тип bool, і результат логічної операції завжди матиме тип bool. Оскільки у мові програмування C++ будь-яке ненульове число оцінюється як істинне (true), а нуль еквівалентний помилковому значенню (false), то логічні оператори можна використовувати в будь-якому виразі, який дає нульовий або ненульовий результат.

Табл. 3.8. Оператори відношення і логічні оператори

Оператори відношення

Значення

==

дорівнює

!=

не дорівнює

>

більше

<

менше

>=

більше або дорівнює

<=

менше або дорівнює

Логічні оператори

Значення

&&

І

||

АБО

!

НЕ

Необхідно пам'ятати! У мові програмування C++ будь-яке ненульове число оцінюється як true, а нуль – як false.

Логічні оператори використовують для підтримки базових логічних операцій І, АБО і НЕ відповідно до такої таблиці істинності. У ній 1 використовується як значення ІСТИНА, а 0 – як значення ФАЛЬШ.

р

q

р І q

р АБО q

НЕ р

0

0

0

0

1

0

1

0

1

1

1

1

1

1

0

1

0

0

1

0

Незважаючи на те, що мова програмування C++ не містить вбудованого логічного оператора, що "виключає АБО" (ХОR), його неважко "створити" на основі вбудованих. Подивіться, як наведено нижче функція використовує оператори І, АБО і НЕ для виконання операції, що "виключає АБО":

bool ХОR (bool а, bool b)

{

return (a || b) &&!(a && b);

}

Ця функція використовується у наведеному нижче коді програми. Вона відображає результати застосування операторів І, АБО і що "виключає АБО" до значень, що вводяться Вами ж1.

Код програми 3.8. Демонстрація механізму використання логічної операції ХОR()

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

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

bool ХОR(bool а, bool b); // Оголошення логічної функції

int main()

{

bool p, q;

cout << "Введіть P (0 або 1): ";

cin >> p;

cout << "Введіть Q (0 або 1): ";

cin >> q;

cout << "P І Q: " << (p && q) << "\n";

cout << "P АБО Q: " << (p || q) << "\n";

cout << "P ХОR Q: " << ХОR(p, q) << "\n";

getch(); return 0;

}

bool ХОR(bool а, bool b) // Визначення логічної функції

{

return (а || b) &&!(а && b);

}

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

Введіть P (0 або 1): 1

Введіть Q (0 або 1): 1

P І Q: 1

P АБО Q: 1

P ХОR Q: 0

У цій програмі звернемо Вашу увагу ось на що. Хоча параметри функції ХОR() вказані з типом bool, користувач вводить цілочисельні значення (0 або 1). У цьому немає нічого дивного, оскільки мова програмування C++ автоматично перетворить число 1 в true, а 0 – в false. І навпаки, при виведенні на екран bool-значення, що повертається функцією ХОR(), воно автоматично перетвориться в число 0 або 1 (залежно від того, яке значення "повернулося": false або true). Цікаво відзначити, що, коли типи параметрів функції ХОR() і тип значення, що повертається нею, замінити типом int, ця функція працюватиме абсолютно так само. Причина проста: вся справа в автоматичних перетвореннях, що виконуються С++-компілятором між цілочисельними і булевими значеннями.

Як оператори відношення, так і логічні оператори мають нижчий пріоритет порівняно з арифметичними операторами. Це означає, що такий вираз, як 10 > 1+12 буде обчислено так, як би його було записано у такому вигляді:

10 > (1+12)

Результат цього виразу, звичайно ж, дорівнює значенню ФАЛЬШ. Окрім того, погляньте ще раз на настанови виведення результатів роботи попередньої програми на екран.

cout << "P І Q: " << (p && q) << "\n";

cout << "P АБО Q: " << (p || q) << "\n";

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

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

var>15 ||!(10<pm) && 3<=item

У наведеній нижче таблиці наведено пріоритет операторів відношення і логічних операторів.

Табл. 3.9. Пріоритет операторів відношення і логічних операторів

Пріоритет

Оператори

Найвищий

!

> >= < <=

== !=

&&

Нижчий

||