ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.08.2020

Просмотров: 283

Скачиваний: 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. КОНТРОЛЬНІ ЗАПИТАННЯ

  1. Що таке алгоритм? Які є форми запису алгоритмів?

  2. З яких базових конструкцій може складатися довільний алгоритм?

  3. Які блоки можна використовувати на блок-схемах?

  4. Як записується і працює умовний оператор if/else в С++?

  5. Які особливості вкладених структур if/else?

  6. Які особливості виразу за допомогою якого задається умова оператора if ?

  7. Напишіть вираз мовою С++ який перевіряє чи перша і остання цифри заданого трьохзначного цілого числа k рівні?

  8. Що таке складений оператор? Коли він використовується?

  9. Що таке умовна операція? Як вона працює?

  10. Які логічні операції мови С++ Ви знаєте? Наведіть приклади їх використання.

  11. Як реалізовано оператор вибору в С++?

  12. Для чого використовується оператор goto?


4. ЛАБОРАТОРНЕ ЗАВДАННЯ

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

  2. Одержати індивідуальне завдання.

  3. Розробити алгоритм розв’язання індивідуального завдання і подати його у вигляді блок-схеми.

  4. Скласти програму на мові С++ у відповідності з розробленим алгоритмом.

  5. Виконати обчислення по програмі.

  6. Підготувати та здати звіт про виконання лабораторної роботи.

5. СПИСОК ЛІТЕРАТУРИ

  1. Керниган Б., Ритчи Д. Язык программирования С. - М. - Финансы и статистика. - 1992. – 272 с.

  2. Уэйт М., Прата С., Мартин Д. Язык С. Руководство для начинающих. - М. - Мир. - 1988. –512 с.

  3. К. Джамса. Учимся программировать на языке С++. М.: Мир, 1997. – 320 с

  4. Герберт Шилдт. Полный справочник по C++. М. – С.-П.-К., Вильямс. – 2003. – 800 с.

  5. Демидович Е. М. Основы алгоритмизации и программирования. Язык Си. (Учебное пособие). – Санкт-Петербург: “БХВ Петербург”. – 2006. – 439 с.

6. ІНДИВІДУАЛЬНІ ЗАВДАННЯ

Не використовуючи оператор циклу скласти програму, яка

  1. За заданим кутом (в градусах) визначити знаки усіх тригонометричних функцій. (Не використовувати математичні функції з стандартної бібліотеки).

  2. Читає натуральні числа m, n і друкує всі натуральні числа менші від n, сума цифр яких дорівнює m.

  3. Обчислює корені квадратного рівняння ах2 +b*х +с=0 для заданих довільних дійсних а, b, с. У випадку відсутності дійсних коренів цього рівняння друкує відповідне повідомлення.

  4. Визначити чи задана точка (x,y) належить півкругу, який описується нерівностями: x2+y2r2 та y0.

  5. Задані дійсні числа а1, b1, с1, а2, b2, с2. Надрукувати координати точки перетину прямих, які описуються рівняннями: а1*х+b1*у=с1 та а2*х+b2*y=с2 або повідомлення про те, що прямі не перетинаються.

  6. За заданим восьмизначним натуральним числом знаходить середнє арифметичне цифр цього числа та кількість ненульових цифр.

  7. За заданим натуральним дев’ятизначним числом знаходить суму цифр цього числа та кількість одиниць.

  8. Визначає номер максимального числа та середнє значення тільки додатних чисел з 10 чисел введених з клавіатури.

  9. Визначає півсуму максимального та мінімального чисел, які знаходяться серед 10 введених з клавіатури додатних чисел.

  10. Обчислює і виводить десяткове значення кожного з чисел, які є записом числа у системі числення з основою 5. З клавіатури послідовно ввести 4 п’ятизначних числа, контролюючи чи число є записаним в системі числення з основою 5.

  11. Визначає номер мінімального числа та середнє значення всіх більших за –10 введених з клавіатури від’ємних чисел. (Кількість чисел 10).

  12. За заданим натуральним восьмизначним числом знаходить подвоєний добуток ненульових цифр цього числа та кількість нулів.

  13. За введеними трьома дійсними числами x, y, z обчислити значення

  1. Обчислює і виводить десяткове значення кожного з чисел, які є записом числа у системі числення з основою 7. З клавіатури послідовно ввести 3 шестизначних числа, контролюючи чи число є записаним в системі числення з основою 7.

  2. За введеним натуральним дев’ятизначним числом видруковує нове число, утворене зворотнім записом цифр введеного числа.

  3. За введеними трьома дійсними числами x, y, z обчислити значення


  1. За введеними трьома дійсними числами x, y, z обчислити значення

  1. Визначає середнє арифметичне значення додатних чисел та кількість від’ємних чисел. Дійсні числа вводяться з клавіатури, кількість чисел 10.

  2. За введеними значеннями коефіцієнтів лінійних алгебраїчних рівнянь визначити чи система цих рівнянь має розв’язок, якщо так – чи він єдиний. Система має вигляд:

  1. За введеними чотирма дійсними числами x, y, z, s обчислити значення

  1. За введеними трьома дійсними числами x, y, z обчислити значення

  1. З клавіатури вводяться 10 додатних чисел. Обчислити кількість чисел більших за середнє арифметичне усіх введених та номери двох найбільших чисел.

  2. Обчислює і виводить десяткове значення кожного з чисел, які є записом числа у системі числення з основою 8. З клавіатури послідовно ввести 4 шестизначних числа, контролюючи чи число є записаним в системі числення з основою 8.

  3. З клавіатури ввести натуральне семизначне число. За сумою цифр цього числа надрукувати символ, ASCII-код якого дорівнює третій частині знайденої суми плюс 132.


11