Продолжаем изучать основы программирования. Мы с вами уже познакомились с арифметическими операциями (в том числе комбинированными арифметическими операциями – с одновременным присваиванием значения переменной). Розглянули також унарні оператори инкремент и декремент.
Але в програмуванні нам доведеться не тільки займатися обчисленням, а так же сравнивать значения переменных друг с другом. В этом уроке будем разбираться с логическими операциями языка С . Коли ми порівнюємо між собою будь-яких змінних (значений), ми отримуємо результат– неправда (false) или истина (true). Наприклад, мы сравниваем два значения: 3 < 8 – это истина, так як 3 дійсно менше 8. А вот 10 > 50 – это ложь.
Рассмотрим операторы, которые применяются для логических операций:
Все операторы из таблицы 1 – і оператори порівняння й оператори рівності– являются бинарными. В программировании работа с ними сводится к тому, что мы сравниваем два операнда (два значения) между собой и видим их отношение друг к другу: один больше, а второй меньше, или наоборот, или один абсолютно равен второму, или не равен… В результаті цієї перевірки, как говорилось выше, в программу возвращается одно из двух возможных значений – false (0) или true (1). До речі, к истине в С относится любое значение, как положительное так и отрицательное, крім 0.Важливо – не путайте операторы = (присваивание значения переменной) і == (логический оператор равенства). Это два абсолютно разных оператора.
Логічні операції об'єднання&& і || також мають бінарну форму. Они используются в программировании для того, щоб можна було не тільки порівнювати два значення, а й створювати якісь умови чи об'єднувати кілька умов порівняння або рівності в одне. Например у нас есть переменная variable значение которой вводит пользователь. А мы хотим узнать – находится ли оно в диапазоне от 10-ти до 20-ти? Это так (true) или не так (false)? Проверим, используя логическое И (&&): cout << ((variable > 10) && (variable < 20)); Тобто, на экран покажется 1(true), только в том случае, если значение будет одновременно больше 10 И(&&) меньше 20. Если пользователь введет 15 – увидим на экране 1. Если введет 21 – на экране 0, так как 21 уже вне диапазона.
Результаты, которые возвращает комбинированное условие с логическим И (&&), можно представить в таблице:
Применительно к примеру рассмотренному выше: 15 одновременно и >10 і <20. Значит выполняются и Условие 1 и Условие 2. Итог – true. Если бы пользователь ввел значение 50, то выполняется и дает true только Условие 1 (>10), а Условие 2 (<20) – это уже false, так как оно не выполняется. Итог комбинированного условия – false.
А что если нам необходимо наоборот подтвердить, что введенное число не принадлежит заданному диапазону, а находится в диапазонах либо <10, либо >20? Тоді нам доведеться скласти комбіноване умова, використовуючи логічний оператор АБО ( || ): cout << ((variable < 10) || (variable > 20)); Тоді якщо користувач веде 15 – увидим на экране 0, так как 15 не входить ні в діапазон від 9 до -∞, ни в диапазон от 21 до ∞. А если введет 22 – на экране увидим 1, так как 22 попадает под второе условие и входит в диапазон от 21 до +∞.
Результаты, которые возвращает комбинированное условие с логическим ИЛИ ( || ), можно так же представить в таблице:
Что касается отрицательной инверсии – логическое НЕ ( ! ) – этот оператор является унарным. Він завжди “перекручивает” возвращаемый результат условия. Наприклад, при выводе на экран результата сравнения cout << (3 < 8); – увидим 1, так как это истина. А используя перед условием логическое НЕ: cout << !(3 < 8); истина условия (3 < 8) преобразуется в ложь. В таблице это выглядит так:
Соберем все рассмотренное в один код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); int variable1 = 15; int variable2 = 3; int variable3 = 8; cout << "variable1 = " << variable1 << endl; cout << "variable2 = " << variable2 << endl; cout << "variable3 = " << variable3 << endl; //операторы сравнения и операторы равенства cout << "(variable2 > variable3) : "; cout << (variable2 > variable3) << endl; cout << "(variable2 < variable3) : "; cout << (variable2 < variable3) << endl; cout << "(variable2 >= variable3) : "; cout << (variable2 >= variable3) << endl; cout << "(variable2 <= variable3) : "; cout << (variable2 <= variable3) << endl; cout << "(variable2 == variable3) : "; cout << (variable2 == variable3) << endl; cout << "(variable2 != variable3) : "; cout << (variable2 != variable3) << endl; // отрицательная инверсия cout << "!(variable2 < variable3) : "; cout << !(variable2 < variable3) << endl; // логические операторы объединения cout << "((variable1 > 10) && (variable1 < 20)): "; cout << ((variable1 > 10) && (variable1 < 20)) << endl; cout << "((variable1 < 10) || (variable1 > 20)): "; cout << ((variable1 < 10) || (variable1 > 20)) << endl; cout << endl << "1 - true, 0 - false" << endl << endl; return 0; } |
Мы рассмотрели основные логические операции в С . Возможно пока не совсем понятно, как они применяются в программировании. Но это нормально. Всю їх необхідність ви побачите, когда мы будем изучать конструкции логического выбора if і if else.
Предлагаем вам посмотреть видео, де розглянуті скорочені арифметичні форми:
швидше б вже побачити як вони в ифах застосовуються!!!
Обіцяю в найближчі дні розповісти ))
особливо важливо не заплутатися з діями типу !(a < b), так як легко заплутатися з результатом… було одного разу таке, заплутався і не зрозумів чому 0 вийшов, а виявляється все просто… і в цій статті про це йдеться! спасибі автору! пізнавально!
розгляд таких, здавалося б дрібних нюансів, великий “+”!!!
Все дохідливо пояснив, спасибо. Всі три логічних типу зрозумілі: &&, ||, !.
пізнавальний сайт!Все просто і ясно))
Моя програма для завдання з відео))
#include
using namespace std;
int main()
{
setlocale(LC_ALL, “rus”);
int a;
cout << "Выберите команду: " << endl;
cout << "1 – складання n" << "2 – віднімання п" << "3 – множення n" << "4 – розподіл" <> a;
switch (a) {
case 1:
cout << "Вы выбрали сложение. \n";
break;
case 2:
cout << "Вы выбрали вычитание. \n";
break;
case 3:
cout << "Вы выбрали умножение. \n";
break;
case 4:
cout << "Вы выбрали деление. \n";
break;
default:
cout << "Пожалуйста, введіть коректне значення (1-4) \n";
повертати;
}
int b;
cout <> b;
INT C;
cout <> c;
INT d;
if (A == 1)
{
д = Ь + c;
cout << "Сумма введенных чисел равна: " << d << endl;
}
if (A == 2)
{
д = Ь – c;
cout << "Разность введенных чисел равна: " << d << endl;
}
if (A == 3)
{
д = Ь * c;
cout << "Произведение введенных чисел равно: " << d << endl;
}
if (A == 4)
{
д = Ь / c;
cout << "Частное введенных чисел равно: " << d << endl;
}
return 0;
}
p87nvj
в таблиці 4 true + true має бути false
відбій) розібрався)
qbq2ra