
Ci: Практична робота №7 до лекції №18.
Практична робота № 7
Програмна реалізація алгоритмів розгалуженої структури
Мета роботи - отримання практичних навичок в роботі з умовним оператором і розгалуженими алгоритмами в мові C.
Тими для попереднього опрацювання:
Логічні операції;
Умовний оператор.
Варіанти індивідуальних завдань.
Див. додаток 1.
Теоретична частина.
Логічні операції.
Операції порівняння.
Операція порівняння |
Приклад 1 |
Приклад 2 |
||
вираз |
значення |
вираз |
значення |
|
< |
5>3 |
1 |
2>3 |
0 |
> |
5<9 |
1 |
9<5 |
0 |
<= |
5<=5 |
1 |
5<=2 |
0 |
>= |
5>=2 |
1 |
5>=10 |
0 |
Операція рівності.
Операція рівності |
Приклад 1 |
Приклад 2 |
||
вираз |
значення |
вираз |
значення |
|
== |
5= =5 |
1 |
5= = 4 |
0 |
!= |
5 != 4 |
1 |
5 != 5 |
0 |
Логічні операції об'єднання .
Логічне И (&&)
операнд 1 |
операнд 2 |
операнд 1 && операнд 2 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
Цю операцію ще називають логічним множенням.
Логічне АБО (||)
Повертає істину тільки у тому випадку, якщо хоч би одне з тверджень вірно, і брехня.
Ця операція працює за скороченою схемою, тобто, якщо перше твердження істина, друге вже не перевіряється.
операнд 1 |
операнд 2 |
операнд1 || операнд1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
Цю операцію ще називають логічним складанням.
Приклад. Обчислити значення логічного виразу при наступних значеннях логічних величин : А = Істина, В = Хибність, С = Хибність:
а) А або В; б) А і В; в) В або С.
Текст програми.
void main()
{
// А = Істина, В = Хибність, С = Хибність:
// а) А або В; б) А і В; в) В або С.
int A=1; // Істина
int B=0; // Хибність
int C=0; // Хибність
cout<<A<<"або"<<B<<"="<<(A||B)<<endl; // 1||0 -> 1
cout<<A<<"и"<<B<<"="<<(A&&B)<<endl; // 1&&0 -> 0
cout<<B<<"або"<<C<<"="<<(B||C)<<endl; // 0&&0 -> 0
cout<<endl;
system("pause");
}
Умовний вираз а < b заклечається в дужки, тому що оператор << має більший пріоритет, і компілятор, якщо не поставити дужки, зрозуміє останню інструкцію програми як вивід на екран змінної a (cout << a). Далі начебто треба виконувати операцію cout < b, але з об'єктом cout це неможливо, і компілятор, видавши повідомлення про помилку, припинить роботу.
Результат:
1 или 0 = 1
1 и 0 = 0
0 или 0 = 0
Исключающее ИЛИ ^
операнд 1 |
операнд 2 |
операнд1 ^ операнд1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
int A=1; // Істина
int B=0; // Хибність
int C=0; // Хибність
cout<<A<<" ^ или "<<B<<" = "<<(A^B)<<endl; // 1^0 -> 0
cout<<B<<" ^ или "<<C<<" = "<<(B^C)<<endl; // 0^0 -> 1
Логічне НЕ (!)
Операнд |
!Операнд |
|
Пример |
Результат |
1 |
0 |
|
!(5==5) |
0 |
0 |
1 |
|
!(3==2) |
1 |
Операція застосовується для скорочення постановки умови.
Наприклад, вираз b= =0 можна скорочено записати !b
Вираження b= =0 набуватиме значення істино (рівне 1), якщо b=0.
!!b буде істино (1), якщо b=0 тобто !0 - істина.
Приклад. Обчислити значення логічного виразу при наступних значеннях логічних величин : А = Істина, В = Хибність, С = Хибність:
A=1 B=0 C=0
а) не А і В
(!A&&B) !1&&0 0&&0 -> 0
б) А або не В
(A&&!B) 1&&!0 1&&1 -> 1
в) А і В або С
(A&&B||C) 1&&0||0 0||0 -> 0
Пріоритет виконання логічних операцій.
-
!
Вищий пріоритет
&&
Середній пріоритет
||
найменший пріоритет
Приклад. Записати умову, яка є істинною, коли кожне з чисел А і В більше 100;
#include <iostream>
#include <windows.h>
#include <iomanip>
using namespace std;
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
//Записати умову, яка є істинною, коли кожне з чисел А і В більше 100;
int a, b;
char otv;
do
{
cout<<"a= ";
cin>>a;
cout<<"b= ";
cin>>b;
cout<<"a="<<" b="<<" Результат: "<<(a>100&&b>100)<<endl;
cout<<"\nПродолжить (Y/N)?";
cin>>otv;
}while (otv=='Y');
cout<<endl;
system("pause");
}
Результат:
a= 103
b= 108
a= b= Результат(a>100&&b>100): 1
Продолжить (Y/N)?Y
a= 15
b= 200
a= b= Результат(a>100&&b>100): 0
Продолжить (Y/N)?Y
a= 10
b= 0
a= b= Результат(a>100&&b>100): 0
Продолжить (Y/N)?n
Конструкція логічного вибору if
Блок-схема оператора if.
Неповний умовний оператор.
Синтаксис:
if (умова) оператор(и);
.
Приклад. Визначити, чи лежить число в заданому діапазоні.
Вхідні дані:
Ціле число n.
Початкове і кінцеве значення діапазону : a і b;
Вихідні:
Повідомлення - "Число лежить в заданому діапазоні".
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int n=10,a=5,b=12;
if(n>a&&n<b) cout<<n<<" лежит внутри интервала "<<a<<" и "<<b;
cout<<endl;
system("pause");
}
Повний умовний оператор.
Синтаксис:
if (умова) оператор1;
else оператор2;
Приклад розв’язання завдання.
Завдання для розв’язання.
Написати програму, яка вводить координати точки (x, y) і визначає, чи потрапляє точка в заштриховану область на малюнку, який відповідає Вашому варіанту. Попадання на межу області вважати попаданням в область.
Вхідні дані:
Координати точки x і у. Тип даних –double.
Розробка алгоритму.
Введення координат точки : x і y. Для більшої зручності при аналізі результатів, виведемо введені значення на екран.
Визначення цільової області.
Дослідження зображення дає основу стверджувати, що цільова область утворюється перетином : прямої у=kx+b з коефіцієнтом k = -1 і зміщенням b=1 і кола з центром (0,0) і радіусом 1.
Рівняння прямої :
y=-x+1
Рівняння кола :
x2+y2=1
Для перевірки попадання точки в задану область треба перевірити умови того, що :
Точка лежить вище прямою або на ній, тобто:
y>=-x+1
Точка лежить усередині кола або на ній, тобто:
x2+y2<=1
Точка лежить в області, якщо виконуються обидві умови, якщо ж не виконується хоч би одне з них, точка лежить поза областю. Отже, ці умови мають бути об'єднані логічною операцією "И".