ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.08.2020
Просмотров: 282
Скачиваний: 4
Логіка операції логічного заперечення така: !0=1 та !1=0.
За допомогою логічних операцій та операцій порівняння можна утворювати складні вирази для запису умови в операторі if/else. Наприклад, перевірка чи значення змінної x лежить в діапазоні від а до b може бути задана у вигляді такої умови:
(x>=a && x<=b)
Мова С++ має також умовну операцію ?:, яка є схожою на структуру if/else. Ця умовна операція є єдиною тернарною операцією, тобто такою, що має три операнда. Ці операнди разом з самою умовною операцією утворюють умовний вираз, який має такий вигляд:
<умова> ? <вираз1> : <вираз2>.
Тут, перший операнд є умовою, другий операнд містить значення умовного виразу в тому випадку, якщо умова є істинною, а третій операнд рівний значенню умовного виразу, якщо умова є хибною. Наприклад, оператор виведення
cout<< (grade>=50 ? “ЗДАВ” : “НЕ ЗДАВ”);
містить умовний вираз, значення якого рівне рядку “ЗДАВ”, якщо умова grade>=50 виконується, і рівне рядку “НЕ ЗДАВ”, якщо ця умова не виконується. Таким чином, цей оператор з умовною операцією виконує фактично ті ж дії, що і аналогічний оператор if/else:
if(grade>=50)cout<<“ЗДАВ”; else cout<<“НЕ ЗДАВ”;
Умовна операція має нижчий пріоритет ніж операція помістити в потік, тому сам умовний вираз має бути взятий в круглі дужки.
Значенням умовного виразу можуть також бути певні дії. Наприклад, умовний вираз
grade>=50 ? cout<<“ЗДАВ” : cout<<“НЕ ЗДАВ”;
може бути прочитаний так: “Якщо оцінка grade більша або рівна 50, то вивести повідомлення ‘ЗДАВ’, інакше вивести повідомлення ‘НЕ ЗДАВ’”.
2.4. Оператор вибору switch
Часто в програмуванні виникає задача вибору одного варіанта з багатьох. Можна це зробити за допомогою вкладених структур if/еlse. Однак зручніший спосіб - використання оператора вибору switch, синтаксис загального вигляду якого такий:
switch (switch_expression)
{ case constant1: statement1; [break;]
……………………
case constanti: statementi; [break;]
…………………......
case constantN: statementN; [break; ]
[default: statementN+1; ] }
Оператор switch виконується так. Спочатку обчислюється значення виразу switch__expression. Тип значення повинен бути одним із цілих - char, int, unsigned int, long int і long unsigned. Обчислене значення зрівнюється зі значеннями констант вибору або константних виразів constant1, ... , constantN. Заборонено використовувати в якості константи вибору змінну. При співпадінні значення switch_expression із constanti виконується оператор statementi. Потім керування передається на оператор відразу після switch, якщо в i-й гілці є присутнім оператор break (оператор break здійснює негайний вихід з оператора switch). У протилежному випадку виконуються оператори в гілках i+1, i+2 і так далі доти, поки в них не зустрінеться оператор break або не буде виконаний оператор statement n+1.
Якщо значення switch_expression не збіглося з жодною з констант constanti,... , constantN, виконується оператор у гілці, позначеній default. При її відсутності виконується наступний після switch оператор.
Для прикладу напишемо програму, яка моделює роботу світлофора.
#include <iostream>
#include <conio.h>
void main()
{
using namespace std;
char ch;
cout<<"Enter letter:";
cin>>ch;
switch (ch) {
case 'r': cout<<"Stop! RED"<<endl; break;
case 'y': cout<<"Attention! YELLOW"<<endl; break;
case 'g': cout<<"Go! GREEN"<<endl; break;
default: cout<<"Wrong letter!"<<endl;
}
_getch();
}
2.5. Оператор безумовного переходу
Для зміни послідовного виконання операторів використовується оператор безумовного переходу goto. Структура оператора goto:
goto <мітка>;
<мітка>: <оператор>;
Мітка задається за правилами запису ідентифікаторів. Якщо строго слідувати правилами структурного програмування, то нема ніякої необхідності в операторі безумовного переходу goto, який нещадно критикується в літературі по С++. Однак існують окремі випадки, коли його використання може принести певну користь. Ці випадки будуть розглядатися пізніше.
2.6. Приклади програм з розгалуженням
Приклад 1. Задано три цілих числа a,b,c в діапазоні від 1000 до 9999. Знайти те з них сума цифр якого найбільша.
#include <iostream>
#include <conio.h>
void main()
{
using namespace std;
int a,b,c,s,max,d; // оголошення змінних
cout<<"Enter a,b,c:";
cin>>a>>b>>c; // введення значення змінних
// перевірка на відповідність введених значень вказаному діапазону
if ((a<1000 || a>9999)||(b<1000 || b>9999)||(c<1000 || c>9999))
// хоча б одне число не попадає в діапазон
cout<<"All numbers must be between 1000 and 9999"<<endl;
else { // всі числа задані коректно, опрацьовуємо їх
s=a/1000+ a/100%10 + a/10%10 + a%10; // сума цифр числа a
max=s; // змінна max буде містити значення максимальної суми цифр
d=a; // змінна d буде містити саме число сума цифр якого максимальна
s=b/1000+ b/100%10 + b/10%10 + b%10; // сума цифр числа b
// перевірка чи сума цифр числа b більша за поточне максимальне значення
if (s>max) {
max=s; // якщо так, то переприсвоюємо змінній max нове значення
d=b; // і запам'ятовуємо число b в змінній d
}
s=c/1000+ c/100%10 + c/10%10 + c%10; // сума цифр числа c
// перевірка чи сума цифр числа c більша за поточне максимальне значення
if (s>max) {
max=s; // якщо так, то переприсвоюємо змінній max нове значення
d=c; // і запам'ятовуємо число c в змінній d
}
// тепер в змінній d маємо саме число, а в змінній max суму його цифр
// виводимо результат
cout<<"Number with max sum of digits:"<<d<<endl;
cout<<"Sum of digits is "<<max<<endl;
}
_getch();
}
Приклад 2. Задано чотири цілих числа a,b,c,d. Відомо, що одне з них відрізняється від трьох інших, які є однаковими. Знайти і вивести це число.
#include <iostream>
#include <conio.h>
void main()
{
using namespace std;
int a,b,c,d; // оголошення змінних
cout<<"Enter a,b,c,d:";
сin>>a>>b>>c>>d; // введення значення змінних
if (b==c && c==d && a!=b)
cout<<"Number that differed is "<<a;
else if (a==c && c==d && b!=a)
cout<<"Number that differed is "<<b;
else if (a==b && a==d && a!=c)
cout<<"Number that differed is "<<c;
else if (a==b && a==c && a!=d)
cout<<"Number that differed is "<<d;
else
cout<<"Three of numbers must be equal!"<<endl;
_getch();
}
3. КОНТРОЛЬНІ ЗАПИТАННЯ
-
Що таке алгоритм? Які є форми запису алгоритмів?
-
З яких базових конструкцій може складатися довільний алгоритм?
-
Які блоки можна використовувати на блок-схемах?
-
Як записується і працює умовний оператор if/else в С++?
-
Які особливості вкладених структур if/else?
-
Які особливості виразу за допомогою якого задається умова оператора if ?
-
Напишіть вираз мовою С++ який перевіряє чи перша і остання цифри заданого трьохзначного цілого числа k рівні?
-
Що таке складений оператор? Коли він використовується?
-
Що таке умовна операція? Як вона працює?
-
Які логічні операції мови С++ Ви знаєте? Наведіть приклади їх використання.
-
Як реалізовано оператор вибору в С++?
-
Для чого використовується оператор goto?
4. ЛАБОРАТОРНЕ ЗАВДАННЯ
-
Ознайомитися з теоретичним матеріалом викладеним вище в даній інструкції і виконати приклади програм.
-
Одержати індивідуальне завдання.
-
Розробити алгоритм розв’язання індивідуального завдання і подати його у вигляді блок-схеми.
-
Скласти програму на мові С++ у відповідності з розробленим алгоритмом.
-
Виконати обчислення по програмі.
-
Підготувати та здати звіт про виконання лабораторної роботи.
5. СПИСОК ЛІТЕРАТУРИ
-
Керниган Б., Ритчи Д. Язык программирования С. - М. - Финансы и статистика. - 1992. – 272 с.
-
Уэйт М., Прата С., Мартин Д. Язык С. Руководство для начинающих. - М. - Мир. - 1988. –512 с.
-
К. Джамса. Учимся программировать на языке С++. М.: Мир, 1997. – 320 с
-
Герберт Шилдт. Полный справочник по C++. М. – С.-П.-К., Вильямс. – 2003. – 800 с.
-
Демидович Е. М. Основы алгоритмизации и программирования. Язык Си. (Учебное пособие). – Санкт-Петербург: “БХВ Петербург”. – 2006. – 439 с.
6. ІНДИВІДУАЛЬНІ ЗАВДАННЯ
Не використовуючи оператор циклу скласти програму, яка
-
За заданим кутом (в градусах) визначити знаки усіх тригонометричних функцій. (Не використовувати математичні функції з стандартної бібліотеки).
-
Читає натуральні числа m, n і друкує всі натуральні числа менші від n, сума цифр яких дорівнює m.
-
Обчислює корені квадратного рівняння ах2 +b*х +с=0 для заданих довільних дійсних а, b, с. У випадку відсутності дійсних коренів цього рівняння друкує відповідне повідомлення.
-
Визначити чи задана точка (x,y) належить півкругу, який описується нерівностями: x2+y2r2 та y0.
-
Задані дійсні числа а1, b1, с1, а2, b2, с2. Надрукувати координати точки перетину прямих, які описуються рівняннями: а1*х+b1*у=с1 та а2*х+b2*y=с2 або повідомлення про те, що прямі не перетинаються.
-
За заданим восьмизначним натуральним числом знаходить середнє арифметичне цифр цього числа та кількість ненульових цифр.
-
За заданим натуральним дев’ятизначним числом знаходить суму цифр цього числа та кількість одиниць.
-
Визначає номер максимального числа та середнє значення тільки додатних чисел з 10 чисел введених з клавіатури.
-
Визначає півсуму максимального та мінімального чисел, які знаходяться серед 10 введених з клавіатури додатних чисел.
-
Обчислює і виводить десяткове значення кожного з чисел, які є записом числа у системі числення з основою 5. З клавіатури послідовно ввести 4 п’ятизначних числа, контролюючи чи число є записаним в системі числення з основою 5.
-
Визначає номер мінімального числа та середнє значення всіх більших за –10 введених з клавіатури від’ємних чисел. (Кількість чисел 10).
-
За заданим натуральним восьмизначним числом знаходить подвоєний добуток ненульових цифр цього числа та кількість нулів.
-
За введеними трьома дійсними числами x, y, z обчислити значення
-
Обчислює і виводить десяткове значення кожного з чисел, які є записом числа у системі числення з основою 7. З клавіатури послідовно ввести 3 шестизначних числа, контролюючи чи число є записаним в системі числення з основою 7.
-
За введеним натуральним дев’ятизначним числом видруковує нове число, утворене зворотнім записом цифр введеного числа.
-
За введеними трьома дійсними числами x, y, z обчислити значення
-
За введеними трьома дійсними числами x, y, z обчислити значення
-
Визначає середнє арифметичне значення додатних чисел та кількість від’ємних чисел. Дійсні числа вводяться з клавіатури, кількість чисел 10.
-
За введеними значеннями коефіцієнтів лінійних алгебраїчних рівнянь визначити чи система цих рівнянь має розв’язок, якщо так – чи він єдиний. Система має вигляд:
-
За введеними чотирма дійсними числами x, y, z, s обчислити значення
-
За введеними трьома дійсними числами x, y, z обчислити значення
-
З клавіатури вводяться 10 додатних чисел. Обчислити кількість чисел більших за середнє арифметичне усіх введених та номери двох найбільших чисел.
-
Обчислює і виводить десяткове значення кожного з чисел, які є записом числа у системі числення з основою 8. З клавіатури послідовно ввести 4 шестизначних числа, контролюючи чи число є записаним в системі числення з основою 8.
-
З клавіатури ввести натуральне семизначне число. За сумою цифр цього числа надрукувати символ, ASCII-код якого дорівнює третій частині знайденої суми плюс 132.