Лабораторна Робота
На тему: "Оператор умови if - else"
1. Призначення і синтаксис
Оператор умови if - else служить для вибору напрямку роботи програми в залежності від умов, що склалися в даній точці програми на момент її виконання.
Загальна форма запису умовного оператора
if (<умова>)
{
<Блок операторів 1>;
}
else
{
<Блок операторів 2>;
}
Якщо на момент виконання <умова> істинно, програма передає управління <блоку операторів 1> і, далі, першому оператору за межами конструкції if - else. При цьому "блок операторів 2> не виконується. Інакше, якщо <умова> брехливо, виконується <блок операторів 2>, а <блок операторів 1> пропускається. Відповідна блок-схема
Фігурні дужки в синтаксисі оператора if - else використовуються для виділення у тексті блоків 1 і 2. Намагайтеся розташовувати квадратну дужку під відкриває для поліпшення читаності програмного коду. Для цієї ж мети текст всередині фігурних дужок необхідно зміщувати вправо на кілька позицій.
В якості умови в операторах if - else можуть використовуватися будь-які логічні вирази, що приймають значення «істинно» чи «хибно» (true - false). Нижче наведена таблиця із зазначенням найпростіших операцій порівняння цілих і дійсних чисел
операція | знак операції | приклад запису на C / С + + |
більше | > | A> B |
менше | < | C <2 |
більше або дорівнює | > = | k> = 0 |
менше або дорівнює | <= | i <= 10 |
одно | == | x == y |
не дорівнює | ! = | D! = 0 |
Приклад 1. Потрібно написати програму, що переводять температуру за шкалою Цельсія T C (° С) в температуру за Кельвіном T K (К). Значення T C вводиться користувачем з клавіатури.
Рішення. Використовуємо відому формулу перетворення - T K = T C - T 0, де T 0 = -273 ° С - температура абсолютного нуля. Будемо вважати введене T C некоректним, якщо воно менше T 0.
/ / - Kelvin vs Celsius -
# Pragma hdrstop
# Include <iostream. H> / / для потокового В / В
# Include <conio.h> / / для консольного В / В (getch)
# Pragma argsused
int main (int argc, char * argv [])
{
float T 0 = -273; / / оголошуємо і ініціалізували T 0
float Tc, Tk; / / оголошуємо речові Tc і Tk
cout <<»Vvedite Tc =»; / / виводимо запрошення
cin>> Tc; / / запитуємо Tc
if (Tc <T 0) / / Перевіряємо умову Tc <T 0
{
cout <<»Tc <T0!»; / / умова істинна, виводимо на
} / / Екран повідомлення про помилку
else
{
Tk = Tc - T 0; / / умова помилкова, розраховуємо
cout <<«Tk =» <<Tk; / / Tk і виводимо на екран
}
getch (); / / затримка до натискання на клавішу
return 0; / / завершення програми
}
/ / -
Наберіть наведений вище код, відкомпілюйте його і запустіть програму на виконання. Дослідіть результати роботи при різних значеннях T C.
2. Скорочені варіанти запису
При програмуванні повсякденного є ситуація, коли потрібні деяку дію у відповідь на сформовані умови (наприклад, якщо отримані невірні вихідні дані від користувача, то видати повідомлення про помилку і вийти з програми). У таких випадках у програмах на C + + може використовуватися скорочений запис оператора умови з відсутнім блоком else. Загальна форма такого запису
if (<умова>)
{
<Блок операторів>;
}
Тут у разі істинності умови управління передається блоку операторів у фігурних дужках. У разі хибності умови цей блок пропускається. Відповідна блок-схема відрізняється від попередньої відсутністю одного «плеча»
Інший варіант скорочення застосовується у разі, коли який-небудь з блоків if або else складається лише з одного оператора. У цьому випадку допускається відсутність фігурних дужок, обмежують цей блок.
if (<умова>)
оператор 1;
else
оператор 2;
Тут в якості операторів 1 і 2 можуть бути не тільки прості однорядкові арифметичні дії або оператори введення-виведення, але і складні багаторядкові конструкції, наприклад інші (вкладені) оператори умови або оператори циклу, які будуть розглянуті нижче.
3. Вкладені оператори
Оператори умови можуть бути вкладеними один в одного, у відповідності з тим програмним алгоритмом, який вони реалізують. Допускається довільна ступінь їх «вкладеності».
Якщо один оператор if - else вкладений в інший, то перший оператор входить у другій повністю, а не тільки який-небудь однією своєю частиною if або else. Неприпустимим є часткове перекривання між собою їх окремих блоків.
A) правильний запис if (a <= b) { if (x! = 0) cout <<»x! = 0»; else { x = 1; y = 0; } } else { a = b; cout <<a; } | Б) помилковий запис if (a <= b) { if (x! = 0) cout <<»x! = 0»; else {/ / Початок else x = 1; y = 0; } else { } / / Кінець else a = b; cout <<a; } |
У наведеному прикладі один з операторів (виділено напівжирним шрифтом) вкладено в іншій. Запис Б) є помилковою в силу того, що блок else внутрішнього оператора умови частково перетинається з обома блоками if і else зовнішнього оператора.
Приклад 2. Користувач вводить з клавіатури три цілих числа a, b, c. Необхідно вивести на екран найбільше з цих чисел.
Рішення. Один з можливих алгоритмів вирішення цього завдання показаний на наступній блок-схемі.
Схема може бути реалізована програмно за допомогою вкладених операторів if - else
/ / - Вибір найбільшого з 3 чисел -
# Pragma hdrstop
# Include <iostream.h>
# Include <conio.h>
# Pragma argsused
int main (int argc, char * argv [])
{
float a, b, c; / / оголошуємо три змінні
cout <<«Vvedite a -»; / / Вводимо значення a, b, c
cin>> a;
cout <<«Vvedite b -»;
cin>> b;
cout <<«Vvedite c -»;
cin>> c;
if (a> b) / / Якщо a> b
if (a> c) / / І якщо a> c
cout <<»max =« <<a; / / то виводимо на екран a
else / / інакше, тобто якщо a <= з
cout <<»max =« <<c; / / виводимо з
else / / інакше, тобто якщо a <= b
if (b> c) / / і якщо b> c
cout <<»max =« <<b; / / то виводимо b
else / / інакше, тобто якщо b <= а
cout <<»max =« <<c; / / виводимо з
getch (); / / затримка до натискання будь-якої клавіші
return 0;
}
/ / -
Розберіть блок-схему цього алгоритму і його програмну реалізацію. Модифікуйте алгоритм і програмний код для пошуку найменшого з трьох чисел.
4. Складові логічні вираження
Умова в операторі if - else може бути виражена не тільки у вигляді простого порівняння двох числових значень. Наприклад, вельми поширені подвійні умови, які в математиці записуються у вигляді «a <b <c». Запис означає, що значення b лежить в діапазоні між значеннями a і c. У програмі такі умови повинні бути переформульовані з використанням простих операцій порівняння і логічних операцій «І», «АБО», «НЕ»
логічна операція | знак в С + + | найменування знака |
І | & & | подвійний амперсанд |
АБО | | | | подвійна вертикальна риса |
НЕ | ~ | тильда |
Зокрема, вираз «a <b <c» сформулюємо як «a менше b, і b менше c». На С + + це буде записано як (a <b) & & (b <c). У тексті програми відповідний оператор буде мати вигляд
if ((a <b) & & (b <c))
{
... ... ...;
}
Приклад 3. На порожній шахівниці в позиції (n, m) знаходиться біла пішак, у позиції (k, l) - чорний слон. Тут перша координата є номер стовпця шахової дошки, друга - номер рядка (обидві змінюються в діапазоні від 1 до 8). Оцініть поточну ситуацію у відповідності з трьома варіантами
пішак знаходиться під ударом,
слон знаходиться під ударом,
слон і пішак у «безпеки».
Рішення. Візьмемо до уваги, що пішак може атакувати дві найближчі до себе позиції по діагоналі вперед, а слон атакує обидві свої діагоналі повністю. Звідси можуть бути сформульовані умови
«((K = n +1) АБО (k = n 1)) І (l = m +1)» - атака пішаки на слона,
«(K + l = n + m) АБО (k - l = n - m)» - атака слона на пішака,
інакше фігури в безпеці.
/ / - Шахова композиція -
# Pragma hdrstop
# Include <iostream.h>
# Include <conio.h>
int main (int argc, char * argv [])
{
int n, m, k, l;
cout <<«Koordinaty beloi peshki:« <<endl;
cout <<»vvedite n -»;
cin>> n;
cout <<»vvedite m -»;
cin>> m;
cout <<«Koordinaty chernogo slona:« <<endl;
cout <<»vvedite k -»;
cin>> k;
cout <<»vvedite l -»;
cin>> l;
if (((k == n +1) | | (k == n 1 ))&&( l == m +1)) / / атакований слон
cout <<endl <<«Atakovan chernyi slon!»;
else
if ((k + l == n + m) | | (kl == nm)) / / Атакована пішак
cout <<endl <<«Atakovana belaya peshka!»;
else / / Ні атаки
cout <<endl <<«Figury v bezopasnosti»;
getch ();
return 0;
}
/ / -