25 червня о 17:00Вебінар: Онлайн-тести: цікава форма роботи на інтегрованому уроці

Інформатика. С++. Спецкурс

Про матеріал
Рекомендується як навчальний посібник для 10-12 класів загальноосвітніх навчальних закладів різних профілів з 12-річним терміном навчання. Просто і доступно описані основні відомості про алгоритми та базові алгоритмічні структури, основи програмування мовою С++. До кожної теми додаються питання для самоконтролю і вправи для закріплення набутих знань. Відповідає вимогам діючих програм з інформатики та 12-бальній системі оцінювання знань учнів. Для широкого кола читачів, а також для учнів, студентів, вчителів та викладачів загальноосвітніх навчальних закладів.
Перегляд файлу

Лєхан С.А.

Інформатика

Мова  програмування  С++++    

Спецкурс  10-12 класи    

  Навчальний посібник 

Шепетівка

«Аспект»

2007

ББК 22.18

Л-52

Технічний редактор, вчитель інформатики: Пилипчук О.П. – с. Гаврилівка, Хмельницька обл.

Рецензенти, вчителі інформатики:

Буз І.А.                 – ОІППО, м. Одеса;

Ніколаєнко М.С. – ОІППО, м. Суми;

Прокоп Ю.В.         – м. Одеса;

Ребрина В.А.      – ОІППО, м. Хмельницький; Ткачук Д.В.       – м. Одеса.

Коректор Слободян В.В.

 Л-52 Інформатика. Мова програмування С++. Спецкурс. 10-12 класи. Навчальний посібник / Лєхан С.А. – Шепетівка, «Аспект», 2007 – 160 с.

ISBN 978-966-2017-11-3

Рекомендується як навчальний посібник для 10-12 класів загальноосвітніх навчальних закладів різних профілів з 12-річним терміном навчання. Просто і доступно описані основні відомості про алгоритми та базові алгоритмічні структури, основи програмування мовою С++. До кожної теми додаються питання для самоконтролю і вправи для закріплення набутих знань. Відповідає вимогам діючих програм з інформатики та 12-бальній системі оцінювання знань учнів

Для широкого кола читачів, а також для учнів, студентів, вчителів та викладачів загальноосвітніх навчальних закладів

ББК 22.18 ISBN 978-966-2017-11-3

©  Лєхан С.А., 2007

                                                                                                                                                                                                                                         2


Передмова

Рекомендується для учнів 10-12 класів загальноосвітніх навчальних закладів з 12-річним терміном навчання. Тривалість курсу – 45 годин.  

Навчальний посібник відповідає вимогам діючих програм МОН України з інформатики та 12-бальній шкалі оцінювання знань учнів.

Назва, нумерація, зміст розділів і уроків відповідають рекомендованому поурочному плануванню і календарному плану.

Навчальний посібник орієнтовано на практичне використання компютерів, починаючи з першого уроку. Кожна тема дозована на один урок, має структуру, що відповідає санітарним нормам: теоретичний матеріал без використання компютерів – 15 хв.; закріплення нового матеріалу, компютерне тестування домашнього завдання і виконання вправи – 30 хв.

Для практичної роботи або тематичного оцінювання відводиться окремий урок

Для виконання насиченого поурочного планування діючих програм доводиться шукати засоби інтенсифікації проведення уроку: наприклад, до дошки одного учня не викликати і з місця не питати, не витрачати час на диктування конспектів, давати завдання додому

Для роботи одночасно з усіма учнями рекомендується використовувати тренажери та компютерне тестування за допомогою контрольнодіагностичної системи, виконувати вправи та практичні роботи.

Тест служить для самоконтролю набутих на уроці теоретичних знань. Вправа служить для формування і закріплення набутих на уроці практичних навичок і може служити для поточного оцінювання навчальних досягнень учнів на уроці.

Практичні роботи розроблені згідно з вимогами діючих програми для формування і закріплення практичних навичок, здобутих протягом кількох уроків, і служать основним засобом оцінювання знань та навичок учнів. Тематична робота служить для оцінювання знань та навичок учнів з однієї або кількох тем

Майже кожна вправа має 3 дії, кожна практична або тематична робота мають від 3-х до 6-ти послідовних дій, виконання яких оцінюється від 2 до 4 балів, щоб оцінювати роботу за принципом «скільки дій зробивтаку оцінку й заробив». 

Автор висловлює вдячність технічному редактору Олександру Павловичу Пилипчуку за професійну допомогу, а також учасникам семінару вчителів інформатики Хмельницької області, що проходив 18-19 квітня 2007 року, зауваження та пропозиціїяких допомогли покращити текст посібника. За корисні консультації з окремих питань автор дякує Кухару А.В., викладачу Хмельницького національного університету.

                                                                 3

Зміст

1.   Лінійні алгоритми.......................................................................6

1.1.   Вступ до мови програмування С++............................................6

1.2.   Типи даних. Змінні в С++. Присвоєння  значень змінним.......16

1.3.   Практична робота 1 «Робота в середовищі 

програмування Воrland С++»....................................................20

1.4.   Виконання простих операцій. Математичні операції 

мови С++. Уведення даних.......................................................22

1.5.   Практична робота 2 «Уведення та  виведення даних» ......26

1.6.   Математичні функції в С++. Запис математичних 

виразів мовою C++ ....................................................................27

1.7.   Практична робота 3 «Створення лінійних програм»..........29

1.8.   Тематичне оцінювання з теми «Програма. Мова

програмування».........................................................................29

2.   Алгоритми з розгалуженням..................................................31

2.1.   Оператор розгалуження if.........................................................31

2.2.   Практична робота 4 «Програми  з оператором

розгалуження»...........................................................................35

2.3.   Логічні операції «І», «АБО», «НЕ».  Оператор-перемикач .....36

2.4.   Обробка декількох умов............................................................41

2.5.   Практична робота 5 «Використання логічних 

операцій та оператора-перемикача» .......................................45

3.   Оператори для організації циклів.........................................46

3.1.   Цикли. Цикл із лічильником ......................................................46

3.2.   Практична робота 6 «Програми з циклом із лічильником»52

3.3.   Цикл while...................................................................................52

3.4.   Практична робота 7 «Програми з  повтореннями»............57

3.5.   Тематичне оцінювання з теми «Оператори 

повторення та розгалуження»..................................................58

4.   Функції........................................................................................59

4.1.   Функції у С++. Локальні  і глобальні змінні ..............................59

4.2.   Виведення українських літер. Прототипи функцій

Випадкові числа.........................................................................66

                                                                 4

4.3.   Вказівники. Адреси змінних ......................................................70

4.4.   Практична робота 8 «Складання програм 

з використанням функцій»........................................................75

4.5.   Тематичне оцінювання з теми «Функції».................................75

5.   Масиви.......................................................................................76

5.1.   Поняття масиву. Опис та ініціалізація масиву.........................76

5.2.   Складання програм  із масивами .............................................82

5.3.   Практична робота 9 «Розробка програм із масивами»......85

5.4.   Алгоритми  сортування .............................................................85

5.5.   Практична робота 10 «Впорядкування масивів»................91

5.6.   Вказівники, динамічні змінні й масиви .....................................92

5.7.   Багатовимірні масиви................................................................97

5.8.   Тематичне оцінювання з теми «Масиви» ..............................103

6.   Рядкові величини ..................................................................104

6.1.   Символьні рядки......................................................................104

6.2.   Вказівники і символьні рядки..................................................108

6.3.   Практична робота 11 «Опрацювання рядкових величин»113

6.4.   Тематичне оцінювання з теми «Рядкові величини» .............113

7.   Файлові операції....................................................................114

7.1.   Виведення та читання файлів ................................................114

7.2.   Приклад використання файлових операцій ..........................119

8.   Зберігання зв'язаної інформації в структурах..................123

8.1.   Структури. Структури й функції ..............................................123

8.2.   Практична робота 12 «Файлові операції. Структури».......129

9.   Створення графічних зображень........................................130

9.1.   Основи обєктно-орієнтованого програмування....................130

9.2.   Графіка у середовищі Borland C++ Builder ............................139

9.3.   Практична робота 13 «Малювання примітивів»...............150

9.4.   Виведення тексту. Малювання крапками ..............................151

9.5.   Практична робота 14 «Малювання графіків функцій».....156

9.6.   Тематична атестація «Побудова графічних зображень».....157

 

5

1. Лінійні алгоритми

1.1. Вступ до мови програмування С++

Програмування: основні поняття

 

Програмуванняце  процес визначення послідовності інструкцій, які повинен виконати комп'ютер для

розвязання певного завдання. Для запису цих інструкцій використовують мову програмування, наприклад С++.

Ви починаєте вивчати мову програмування С++ (читається «Сі-плюс-плюс»). С++ є сучасною, однією з найпоширеніших у середовищі професійних програмістів мов програмування.

Акредитований комітет стандартів, що діє під керівництвом Американського національного інституту стандартів (American

National Standards Institute – ANSI), створив міжнародний стандарт для мови С++. Стандарт ANSI – це спроба гарантувати, що пограма мовою С++ буде працювати однаково при переносі з одного компютера на інший. Таким чином, програма повинна виконуватися  без помилок на комп'ютерах різних архітектур, що працюють під керуванням операційних систем Windows, MacOS, Linux та інших.

Мова програмування С++, як і будь-яка інша мова, містить чотири основних елементи: символи, слова, словосполучення, речення. Але «слова» – елементарні конструкції, що мають самостійний змістназивають лексемами. «Словосполучення», що задають правило обчислення деякого значення, називають виразами. «Речення», які задають закінчений опис деякої діїоператорами

Для опису складної дії потрібна послідовність операторів, які можуть бути обєднані у складений оператор, і він може розглядатися як один оператор. Оператори можуть бути виконуваними, тобто такими, що задають дії над даними, та невиконуваними, які служать для опису даних (їх часто називають операторами опису або просто описами).

Об'єднана єдиним алгоритмом сукупність описів й операторів утворює програму. Але перед створенням діючої програми має сенс на папері скласти схему, за якою буде виконуватися програма, аби не заплутатися при складанні алгоритму. Для цього будують блок-схему

6

алгоритму, на якій зображують елементарні (базові) конструкції, як, наприклад, просте слідування чи лінійний алгоритм.

Блок-схема алгоритмуграфічне зображення

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

Графічне зображення базових алгоритмічних структур

    Назва блоку                                     Опис дії

Позначає початок та завершення алгоритму

 

Позначає дію, яку потрібно виконати. Це може бути вказівка зробити окрему дію (обчислити математичний вираз, накреслити прямокутник), так і

 послідовність дій (виконати обчислення за заданими формулами, намалювати малюнок).

Позначає уведення вхідної інформації і виведення проміжної і результуючої інформації.

 

Позначає перевірку значення логічного виразу деякої умови. Логічний вираз може набувати або 

                                  значення ІСТИНА (1) або значення ХИБНІСТЬ (0).

Просте слідування команд означає, що дії повинні виконуватись послідовно одна за одною:

 

Лінійний алгоритмалгоритм, який містить лише вказівки про безумовне виконання деяких операцій, без повторень або розгалужень (просте слідування).

Для прикладу наведемо алгоритм знаходження  середнього арифметичного трьох чисел:

7

Перша програма  

Для створення своєї першої програми ви повинні запустити спеціальну програмусистему програмування.

 Після цього на екрані зявляться засоби для уведення, подальшої обробки і запуску вашої програмисередовище програмування. Однією з систем програмування є програма Borland C++Builder6. Для запуску програми натисніть: «Пуск» «Програми»

«Borland C++Builder6» «C++Builder6».

 Для уведення вашої програми виберіть на панелі кнопку  «New» (див. мал.), що означає створення нового проекту. Відкриється вікно «New items». Виберемо «ConsoleWizard». У діалоговому вікні «Console-

Wizard»    виберемо    мову

8

програмування С++ та натиснемо  «ОК». В результаті С++ Builder створить проект консольної програми, тобто такої, що виконуватиметься без використання графічного інтерфейсу Windows. На екрані зявиться вікно редактора коду, в якому знаходиться шаблон програмифункція main, детальніше про яку ви дізнаєтесь пізніше. Це вікно далі можна використовувати для уведення та редагування програми.

Уведіть вашу першу програму, яка є лінійною програмою. Для цього допишіть виділені грубим шрифтом рядки, не заглиблюючись поки що в їхній зміст:

#include <vcl.h>                      //Програма 1.1

#include<iostream.h>

#include<conio.h>

#pragma hdrstop #pragma argsused int main() {  cout << "My first program!";  getch();  return 0;

}

Для того щоб програма була виконана і видала результат, необхідно перетворити її у послідовність команд процесора. Цю функцію виконує компіляторпрограма-перекладач з мови програмування (в нашому випадку С++) на мову машинних кодів, зрозумілих процесору. Щоб відкомпілювати вашу програму і запустити на виконання, виберіть пункт меню «Run» чи натисніть клавішу F9. Якщо ви не припустилися синтаксичних помилок, про що вкаже компілятор у спеціальному вікні, результат роботи програми буде таким:

My first program!

Поекспериментуйте із цією програмою, щоразу компілюючи і запускаючи після внесення змін до тексту:

9

cout << "My first program!" << endl;

Потім так:

cout << "Programuvati prosto!"; cout << "Duge prosto!" << endl;

Імям endl позначено спеціальний символкінець рядка

(англ. end lineкінець рядка; читається «енд-ел»). При виведенні він спричиняє перехід на новий рядок.

Програмуючи у Borland C++Builder6 уводьте текст в лапках латинськими буквами замість українських. Це повязано з тим, що в DOS  і Windows для російських та українських літер використовують різні кодування (DOS – ASCII, а Windows – ANSI). Це призводить до того, що при виконанні програм замість очікуваного тексту на екран виводиться якась нісенітниця. Для коректного виведення літер кирилиці ми потім напишемо спеціальну функцію.

Спробуйте не брати текст  у рядку з cout у лапкикомпілятор виявить синтаксичну помилку, про що буде вказано у рядку з відповідним повідомленням (див. мал.). Клацніть по ньому мишкою й компілятор вкаже вам на рядок з помилкою

На малюнку видно, що програміст забув поставити крапку з комою в кінці оператора. Компілятор знайшов помилку і вивів повідомлення: «Statement missing;», вказавши також імя файлу та номер рядка з помилкою (Unit1.cpp(11)).

При створенні програми мовою С++ ви повинні дотримуватися певних правил. Наприклад, треба брати текстові повідомлення в лапки

10

й ставити крапку з комою в кінці більшості операторів С++. Тільки виправивши всі помилки ви одержите результат виконання програми

Оператори можна записувати в один рядок, але краще, коли кожен оператор буде починатися з нового рядка. Така програма буде зрозуміліша і в ній легше буде знайти помилки.

Розглянемо докладніше вашу першу програму. Вона складається із директив препроцесора, декількох операторів, функції і фігурних дужок, які називають групуючими символами:

#include <iostream.h> //директиви препроцесора

#include <conio.h>

int main()                       //заголовок функції

{ cout<<"My first program" //продовження оператора <<" C++!";     // у новому рядку не є помилкою  getch();        

return 0;

}

Для кращого розуміння програм, у них корисно вставляти коментарі, перед якими ставляться дві косі рискиподвійний слеш» // ) (див. текст програми). Компілятор ніяк не обробляє інформацію, розміщену після цих символів до кінця рядка. Якщо коментар займає кілька рядків, то на його початку ставлять символи /*, а в кінці*/.

Заголовкові файли (бібліотеки)

Препроцесором називається перша фаза компілятора. Інструкції препроцесора називаються директивами (розпорядженнями). Рядки, що їх містять, починаються зі знака #. Практично кожна програма на С++ містить директиви препроцесора #include (читати «паунд інклуд»). Вони необхідні для включення у програму певних файлів під час компіляції

Наприклад, для виведення на екран тексту за допомогою обєкта cout (читати «сі-аут») та операції перенаправлення вихідного потоку << (будемо далі називати операцією виведення), необхідно підключити файл <iostream.h> (читати «ай-оустрім крапка ейч» від англійських: input-output streams – вхідні-вихідні потоки). Для застосування різних математичних функцій слід підключити файл <math.h>; для затримки зображення на екрані використовуємо функцію getch(), яка повертає код символу

11

натиснутої клавіші, а для її роботи підключаємо бібліотеку

<conio.h> і т.д

Файли з розширенням h називаються заголовковими. Розташовуються заголовкові файли в підкаталозі INCLUDE, і ви можете переглянути вміст цих файлів, але змінювати їх забороняється!

Головна функція

Кожна програма на С++ має один вхід, з якого починається виконання програми, – головну функцію, до складу якої входить перший виконуваний оператор.

Запис

int main (int argc, char* argv[]), чи int main ().

визначає головну функцію. Ваші програми повинні завжди включати одну і тільки одну функцію з імям main.

Слово int перед назвою функції означає, що дана функція повертає значення типу int. В дужках після main у першому прикладі перелічені аргументи командного рядка. Такий варіант запису (з аргументами командного рядка (int argc, char* argv[])) слід використовувати, якщо передбачається обробка програмою вхідних аргументів. Зараз на аргументи командного рядка ми уваги не звертатимемо. Можна просто вилучити їх опис, якщо система згенерувала його автоматично, і використовувати другий варіант заголовка функції

Крім головної функції програма може містити інші функції.

За правилами C++, до функції main висуваються особливі вимоги. Зокрема, її слід оголошувати такою, що повертає значення типу int. Повернення нею значення 0 (оператор return 0;) означає, що виконання функції main, а отже й всієї програми, завершилось успішно. Інші значення є кодами повідомлень про помилки, які трапились в ході виконання програми.

Групуючі символи  { }

Служать для групування зв'язаних операторів. У простих програмах, які ми надалі будемо складати, ці символи будуть групувати оператори, які відповідають операторам вашої головної функції, чи допоміжної, якщо така буде використовуватися. Пізніше ви вивчите інші випадки застосування групуючих символів.

12


Виведення повідомлень на екран

Як було сказано вище, для виведення даних на екран використовується обєкт cout (детальне вивчення якого не входить у наш курс) та операція виведення <<.

Розглянемо приклад виведення чисел на екран:

#include<iostream.h>                  //Програма 1.2

#include<conio.h> int main() { cout << 1001; getch(); return 0;

}

Спробуйте  вивести дійсне число (їх часто називають числами  із плаваючою крапкою):  cout<<0.8976;

Потім направте у вихідний потік числа в такий спосібcout<<1<<2<<0<<0<<1;

Перевірте, як спрацюють такі рядки

cout<<"Vvedi ocіnku: "<<12<<endl;

cout<<"Ocіnka "<<12<<" – uljublena."<<endl;

Отже, у вихідний потік можна виводити як числа, так і текстові повідомлення. Текст при цьому слід брати в лапки. В одному операторі можна вивести послідовно декілька числових та текстових значень.

Спеціальні символи виведення Випробуйте таку програму:

#include<iostream.h>                  //Програма 1.3

#include<conio.h> int main() { cout<<"Ryad 1\nRyad 2"; getch(); return 0;

}

А тепер змініть програму так:

cout<<1<<'\n'<<0<<'\n'<<3;

Послідовності символів, що починаються із символу\

зворотний слеш») називають керуючими послідовностями або спеціальними символами. Вони зображаються на екрані двома символами, але компілятором сприймаються як один символ.

13

У наведених прикладах використана керуюча послідовність \nсимвол нового рядка, яка при виведенні поміщає курсор у початок наступного рядка, аналогічно до endl (кінець рядка).  Символ «зворотний слеш» використовується Призначення спеціальних для включення в рядок: символів

Символ

Призначення

\а

Звуковий сигнал (дзвінок)

\b

Крок назад (зворотний пропуск

\f

Перехід на нову сторінку

\n

Перехід на новий рядок

\r

Повернення каретки (не перехід на новий рядок!)

\t

Символ горизонтальної табуляції

\v

Символ вертикальної табуляції

\\

Символ «зворотний слеш»

\?

Знак питання

\’

Одинарні лапки

\"

Подвійні лапки

\0

Нульовий символ

      кодів, що не мають графічного зображення

(наприклад, \а       – звуковий сигнал, \nпереведення курсору в початок наступного рядка);

      символів     апострофа

('), зворотного слеша (\), знака питання (?) і лапок (").

Спеціальні символи розташовуються          або       у одинарних лапках, якщо використовуються окремо, або у подвійних, разом з іншими символами рядка

Наприклад, якщо всередині рядка потрібно записати лапки, їх випереджають косою рискою, за якою компілятор відрізняє їх від лапок, що обмежують рядок:

"Видавництво\"Аспект\" "

Коли ми вивчатимемо рядки, то побачимо, що у кінець рядкової константи компілятор додає спеціальний символ NULL

(тобто\0’).

Спробуйте дослідити цю програму:

#include<iostream.h>                  //Програма 1.4

#include<conio.h> int main() { cout<<"Dzvon!\a\t Dzvon!\a\t"; getch();return 0;   

14

Ширина виведення

Модифікатори формату використовуються для керування шириною поля, що відводиться для розміщення значення, яке виводиться. Модифікатор setw дозволить вам регулювати кількість символів, займаних виведеним числом. Але при цьому ви повинні включити в програму заголовковий файл <iomanip.h>

#include<iostream.h>                  //Програма 1.5

#include<iomanip.h> #include<conio.h> int main() { cout << "Druk:" << setw(3) << 1012 << endl;  cout << "Druk:" << setw(4) << 1012 << endl;  cout << "Druk:" << setw(5) << 1012 << endl; cout << "Druk:" << setw(6) << 1012 << endl; getch();return 0;    }

 

При використанні setw ви вказуєте мінімальну кількість символьних позицій, займаних числом!

У програмі 1.5 модифікатор setw(3) вказує мінімум 3 символи, однак у звязку з тим, що число 1012 потребує більше трьох символівобєкт cout з операцією виведення << використовує реально необхідну кількість символів. Для кожного виведеного значення використовується окремий модифікатор setw.

Збереження програм у Borland С++Builder6

Для збереження вашої програми (проекту) виконайте такі дії:

«File» «Save Project As…». У вікні «Save Unit1 As» виберіть папку, наприклад: Е:\10kl\Petrenko\ та натисніть «Создание новой папки». Назвіть її wpr1-1. Потім відкрийте папку wpr1-1 і для першого завдання знову створіть папку, наприклад 1. Відкрийте її і натисніть «Сохранить» для файлу з імям Unit1.cpp а також для файлу Project1.bpr.

Зверніть увагу: програма, яку ви випробовували збережена у файлі Unit1.cpp, а файл Project1.bpr з описом загальних властивостей проекту був створений автоматично

Щоб відкрити проект, виберіть  «File» «Open Project» і у діалоговому вікні, що зявиться, виберіть потрібну папку та відкрийте файл Project1.bpr.

                                                                 15

Питання для самоконтролю:

1.     Назвіть основні елементи мови програмування?

2.     Що таке «оператор», «складений оператор»?

3.     Назвіть основні елементи, з яких складаються блок-схеми алгоритмів?

4.     Що таке «лінійний» алгоритм?

5.     Як створити проект консольної програми?

6.     Що таке «компілятор»?

7.     Як компілятор повідомляє про помилку у програмі?

8.     Що називають «групуючими символами»?

9.     Які файли називаються заголовковими?

10.   Що таке «головна функція»? 

11.   Як вивести повідомлення на екран?

12.   Назвіть спеціальні символи виведення. Для чого вони призначені?

13.   Як керувати шириною поля виведення?

 Вправа 1-1.

1)      Випробувати в процесі уроку програми 1.1–1.5 з усіма вказаними доповненнями.

Збережіть програми, створивши у власній папці нову папку wpr1-1.

Примітка. Якщо власна папка ще не створена, її назву та розміщення слід уточнити у вчителя. Повний шлях, орієнтовно, може відповідати такому шаблону:

<диск>:\<клас>\<прізвище>\<вправа>.

Наприклад, D:\10kl\petrenko\wpr1-1.

1.2. Типи даних. Змінні в С++. Присвоєння  значень змінним

Програми пишуть для того, щоб обробляти дані. Дані різних типів по-різному зберігаються у памяті компютера і обробляються теж по-різному. Від типу даних залежить:

1.       внутрішнє подання даних у памяті компютера;

2.       множина значень, яких можуть набувати величини цього типу;

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

Виходячи із цих характеристик, програміст вибирає тип кожної величини, використовуваної в його програмі. Обовязковий опис типу дозволяє компілятору робити перевірку допустимості різних конструкцій програми.

                                                                 16

Основні типи даних часто називають арифметичними, оскільки їх можна використовувати в арифметичних операціях.

Типи даних у С++

Назва

Позначення

Діапазон значень

Розмір, байт

Байт

char

від –128 до +127

1

Байт без знака

unsigned char

від 0 до 255

1

Ціле число

int

від – 2147483648

до + 2147483647

4

Логічне значення

bool

значення true (істина)

або false (неправда)

1

Дійсне число одинарної точності

float

від ±3.4е-38 до ±3.4е+38

(7 значущих цифр)

4

Дійсне число подвійної точності

double

від ±1.7е-308 до ±1.7е+308

(15 значущих цифр)

8

Дійсне число збільшеної точності

long double

від ±1.2е-4932 до ±1.2е+4932

10

 Перші чотири типи називають цілочисельними (цілими), останні тритипами з плаваючою крапкою.

В останній колонці позначено, який обєм пам'яті займає елемент даних відповідного типу.

Наприклад, дані типу int та float займають по 4 байти. На малюнку умовно зображено        розміщення      у памяті компютера двох величин: age типу int, та salary типу float. Зверніть увагу, що адреса комірки age відрізняється     від        адреси комірки salary на чотири байти.

Дані, які можуть змінюватися в ході виконання програми, називають змінними. Зміннаце іменована область пам'яті, яка має свою адресу і в якій зберігаються дані певного типу. У змінної є ім'я й значення. Ім'я служить для звертання до області пам'яті, у якій зберігається значення.

17

Перш ніж використати змінну, її потрібно оголосити, вказавши ім'я й тип:

int age; float salary;

Імена змінних бажано вибирати змістовні, щоб потім не ламати голову над тим, що ж позначає ця змінна. В іменах змінних можна використовувати букви латинського алфавіту, цифри, знак підкреслення ( _ ).

 

На відміну від деяких інших мов програмування, у мові

С++ букви нижнього й верхнього регістрів розрізняються, тому, наприклад, salary і Salaryце імена двох різних змінних!

Імя змінної не може починатися з цифри, але може зі знака підкреслення. Як імена змінних не можна використовувати ключові слова С++ (тобто зарезервовані слова, які мають спеціальне значення для компілятора. Наприклад: void, if, for …).

Дані, значення яких не змінюється в процесі виконання програми, називають константами.

При оголошенні константи вказують її тип, імя та значення. Модифікатор const показує, що вказане значення змінювати не можна:

const float pi=3.14159

Приклади констант, якими ми користуємось у житті: число днів у тижні чи місяців у році. Ці дані не змінюються за жодних обставин, тому ці значенняконстанти

Приклад 1.

#include<iostream.h>                  //Програма 1.6

#include<conio.h> int main() { int age=35;    //оголошення та ініціалізація float salary=500.50;   // змінних cout<<"Robitnyky "<<age<<" rokiv "<<endl; cout<<"Oklad: "<<salary<<" grn"<<endl; getch(); return 0;   

18

Приклад 2. 

Опишемо та ініціалізуємо змінні по-іншому:

 

int age;

//оголошення  

age=35;

//ініціалізація

float salary;

//оголошення

salary=500.50;

//ініціалізація

Ці дві програми цілком ідентичні.

Як ми бачимо, тут використовується знак «=», але цей знак читається не «дорівнює», як в математиці, а «присвоїти». Це означає, що змінній цілого типу age присвоюється значення 35, а десятковій змінній salary присвоюється значення 500.50. Після виконання присвоєння, значення змінних будуть поміщені у комірки пам'яті компютера з відповідними адресами (див. малюнок вище). 

У математиці рівняння n=n+100 не має сенсу, а в мові C++ означає, що значення змінної з комірки памяті з імям n після виконання присвоєння збільшилося на 100.

Приклад 3. Обмін значень двох змінних.

Багато задач з програмування потребує переставляння значень двох змінних. При цьому змінній A треба присвоїти значення змінної B та навпаки, змінній B присвоїти значення змінної A. Але якщо ми запишемо  A = B, то значення, яке до цього було у змінній  A, буде втрачене. Тому треба використати ще одну змінну, наприклад Temp, для тимчасового збереження в ній значення змінної A. Переставляння виконується трьома присвоюваннями (див. малюнок):

Temp = A; A = B;

B = Temp;

Випробуйте програму з обміном значень змінних:

#include<iostream.h>                //Програма 1.7

#include<conio.h> int main()

19

{ int A=3; int B=5; cout<<"A= "<<A<<" B= "<<B<<endl;

Temp = A; A = B; B = Temp; cout<<"A= "<<A<<" B= "<<B<<endl; getch(); return 0;    }

Питання для самоконтролю:

1.     Для чого використовують типи даних?

2.     Для чого описувати дані? Чи обовязково це робити?

3.     Що таке «змінна»?

4.     Що таке числа з «плаваючою крапкою»?

5.     Як змінні зберігаються у памяті компютера

6.     Назвіть основні правила написання імен змінних?

7.     Що таке «константа»?

8.     Як здійснюєтья перестановка значень двох змінних?

 Вправа 1-2.

1)      Випробувати в процесі уроку програми 1.6–1.7 з усіма вказаними доповненнями.

2)      Випробуйте програму 1.7 для змінних A і B типу double. Чим відрізнятиметься малюнок з прикладу 3 для цих змінних?  

 Збережіть програми, створивши у власній папці нову папку wpr1-2.

1.3. Практична робота 1 «Робота в середовищі програмування Воrland С++»

Напишемо програму, при виконанні якої на екран виводитиметься резюме консультанта фірми  «Сервер»  Петра Іванова, день народження у якого 25 квітня. На екрані ми повинні побачити:

Resume

                                Surname:          Ivanov

                                Name:             Petro

                                Work at:          "Server"

Date of birth: 25.04

20

Запускаємо Borland C++. Створюємо проект з іменем Resume:

#include<iostream.h> #include<conio.h> int main()

{

// Виведення через 3 табуляції тексту:Resume

// та переведення рядка cout<<"\t\t\tResume\n";

// Виведення порожнього рядка cout<<"\n";

// Через 2 табуляції виведення тексту: Surname, 

//  та ще через 1 табуляцію – Ivanov cout<<"\t\tSurname:"<<"\tIvanov\n"; cout<<"\n";

// Виведення через 2 табуляції імені      cout<<"\t\tName:"<<"\t\tPetro\n"; cout<<"\n";

// Назва фірми «Сервер» буде вказана в лапках cout<<"\t\tWork at:"<<"\t\"Server\"\n"; cout<<"\n"; cout<<"\t\tDate of birth: "<<"\t25.04"; cout<<"\n"; getch();return 0;   

}

Питання для самоконтролю:

1.     Назвіть математичні операції у С++.

2.     Як працює операція % – остача від ділення?

3.     Як у С++ виконуються префіксна і постфіксна операції збільшення й зменшення?

4.     Які скорочення у виразах дозволяє робити мова С++?

5.     Як увести дані з клавіатури?

 Вправа 1-3.

1) Переробіть цю програму для виведення власного резюме (наприклад, учня ЗОШ м. Васюки Степанюка Івана). 2) Уведіть змінну ageвік, та виведіть на екран через 1 табуляцію.

3)      Уведіть змінну srballсередній бал атестату, та виведіть на екран.

4)      Виділіть під змінну srball пять позицій на екрані. Яку бібліотеку при цьому потрібно підключити?

21

5)      Уведіть змінні little = 1.535×10250 та big = 2.2×10-50. 6) Виконайте перестановку значень цих двох змінних

 Збережіть програму, створивши у власній папці нову папку wpr1-3.

1.4. Виконання простих операцій. Математичні операції мови С++. Уведення даних

Оскільки інформація в компютері кодується числами, то в більшості програм є потреба виконувати певні обчислення. Для обчислення значень використовують вирази, які складаються з операндів, знаків операцій та дужок. Результат обчислення можна вивести на екран або зберегти у змінній відповідного типу

Математичні операції у С++:

          +    - додавання

              - віднімання

          *    - множення

/   - ділення%      - остача від ділення.

Операція ділення / виконується тільки для операндів арифметичного типу. Якщо обидва операндицілі числа, то результат ділення округлюється до цілого числа, інакше тип результату відповідатиме правилам перетворень

Операція %остача від діленнязастосовується тільки до цілих операндів (наприклад, якщо x=11; y=4;, то x%y дорівнює 3).                   Розглянемо приклади програм з обчисленнями:

#include<iostream.h>                //Програма 1.8

#include<conio.h> int main() { cout<<5+4<<endl;     //Виведення результатів cout<<”21.678/3=”<<21.678/3<<endl;      //на екран const float pi=3.14159;

//Обчислимо довжину кола, радіус якого 3,5 float r=3.5; float l=2*pi*r;   //Запис результату у змінну cout<<”L=”<<l<<endl; getch(); return 0;   

22

Зверніть увагу, що результати перших двох обчислень виводяться безпосередньо на екран. Третій результат зберігається у змінній l, а її значення потім виводиться. Виведення другого і третього результатів супроводжується текстовими коментарями

(”21.678/3=”, ”L=”).

Мова С++ дозволяє робити такі скорочення:

x+=y рівносильно x=x+y

x*=y рівносильно x=x*y

x-=y рівносильно x=x-y

x/=y рівносильно x=x/y

Зауважимо, що порядок виконання операцій також залежить від звичайних дужок ( ). Вирази в дужках, як у математиці, обчислюються першими. Крім того, вибираючи типи змінних, які ви будете використовувати в програмах, не забувайте про можливість помилок. Щоб уникнути їх, користуйтеся таблицею «Типи величин».

Операції збільшення й зменшення

Доволі часто в програмуванні доводиться збільшувати значення змінної на одиницю: i = i + 1. Мова С++ дозволяє цей запис скоротити, завдяки операції збільшення: i++.

Знак  операції збільшення ви можете розміщувати до або після змінної:

++i; i++;

У першому виразі знак операції записаний перед змінною, тому цепрефіксна операція збільшення. Аналогічно, у другому виразі використана постфіксна операція збільшення. C++ трактує ці дві операції по-різному. Наприклад, розглянемо такий вираз з операцією присвоювання:

number=i++;

При обчисленні цього виразу поточне значення i буде присвоєне змінній number. Після цього постфіксна операція ++ призведе до збільшення поточного значення i. Використання постфіксної операції в цьому випадку робить наведений вище оператор еквівалентним таким двом операторам:

number = i; i = i + 1;

Тепер розглянемо наступний вираз, що містить операцію присвоювання та  префіксну операцію збільшення:

number=++i;

У цьому випадку спочатку буде збільшене значення i, а потім результат, присвоєний змінній number. Використання префіксної

23

операції збільшення робить показаний вище оператор, еквівалентний таким двом операторам:

i = i + 1; number = i;

Уважно дослідіть програму

#include<iostream.h>                  //Програма 1.9

#include<conio.h> int main() { int i,number; i=10; cout << "i="<<i<<endl;  number=i++; cout << "number=" << number << endl; getch(); return 0;   

}

А тепер проаналізуйте роботу цієї програми:

#include<iostream.h>                 //Програма 1.10

#include<conio.h> int main() { int i,number; i=10; cout << "i="<<i<<endl;  number=++i; cout << "number=" << number << endl;  getch(); return 0;   

}

Отже, у випадку застосування префіксної форми, значення обох змінних стають рівними між собою і дорівнюють і+1. Постфіксна ж операція виконується після присвоєння, тому збільшиться на одиницю лише значення змінної i.

Дослідіть самостійно, яким буде результат застосування операції зменшення  -- ( i--, --i).

Уведення даних з клавіатури

На минулих заняттях ви ознайомилися з вихідним потокомобєктом cout та операцією <<, що здійснює виведення

24


інформації на екран. Для уведення даних у С++ використовується вхідний потікобєкт cin та операція уведення >>

#include<iostream.h>                 //Програма 1.11

#include<conio.h> int main() { int num; cout<<" Ocinka:"; cin >>num; //Уведення значення з вхідного потоку cout<<"Vasha ocinka – "<<num<<" baliv"<<endl; getch(); return 0;   

} а тепер змінимо програму так:

…                                     //Програма 1.12

int num1, num2; cout<<"Vvedit 2 ocinki:"; cin>>num1>>num2; cout<<"Vasha ocinka – "<<num1<<" baliv"<<endl; cout<<"Vasha ocinka – "<<num2<<" baliv"<<endl;

В цьому випадку з вхідного потоку спочатку уводиться змінна  num1, а  потім  num2. Числа, запитувані програмою, потрібно уводити, відокремивши пропуском

Vvedite 2 ocinki: 12  11

По закінченні уведення натиснути Enter.

Також можна після кожного числа натискати клавішу Enter або Tab. Крім того, зверніть увагу, що кілька змінних одного типу можна описати так

int num1, num2;

При уведенні даних із клавіатури будьте особливо уважні: уникайте розбіжності типів і пов'язаних із цим помилок (наприклад, тип char може набувати значень –128...+127; char

A=’5’це символ, int A=5число і т.п.).

Тепер спробуємо уводити текстові дані:

#include<iostream.h>                 //Програма 1.13

#include<conio.h> int main() { char letter;

25

cout<<"Vvedite imya:";cin>>letter; cout<<"Hello "<<letter<<endl; getch(); return 0;

}

Як ви помітили після випробування програми, відбувається уведення тільки одного, першого символу. Це пояснюється тим, що для збереження даних типу char відводиться всього один байт (8 біт), і в ньому може зберігатися тільки один символ (див. табл. «Типи величин»). Пізніше ви навчитеся уводити в програму із клавіатури цілі рядки.

 Вправа 1-4.

1)      Випробуйте за допомогою компютера програми 1.8–1.13 з усіма вказаними доповненнями та проаналізуйте отримані результати.

2)      За аналогією з операцією збільшення (програми 1.9 та 1.10) перевірте, як буде працювати операція зменшення

-- (i--, --i).

3)      Напишіть програму й дослідіть можливості спрощеного запису присвоєння з обчисленням у С++ (x+=y; x*=y; x-=y; x/=y).

4)      Складіть програму для обчислення площі прямокутника за уведеними з клавіатури довжинами сторін, вираженими цілими числами, меншими ніж 150.

 Збережіть програми, створивши у власній папці нову папку wpr1-4.

1.5. Практична робота 2 «Уведення та  виведення даних»

1)      Скласти програму для обчислення швидкості, з якою бігун долає дистанцію. Довжина дистанції L=1000 м, T=3.25 с. Знайти швидкість за формулою: V=L/T,  та вивести на екран результат.

2)      Скласти програму, для переведення відстані, заданої у верстах, у кілометри (1 верста – 1066,8 м). Вигляд екрану після виконання програми приблизно такий:

26

Versta->km

Vidstan u verstah: 100

100 verst – 106.68 km 

3)      Скласти програму, для переведення дробового числа у грошовий формат. Наприклад, число 12,5 повинно набути вигляду: 12 grn 50 kop.

 Збережіть програми, створивши у власній папці нову папку pr2.

1.6. Математичні функції в С++. Запис математичних виразів мовою C++

Для використання у програмі математичних функцій потрібно приєднати до програми заголовковий файл <math.h>

Основні математичні функції мови С++

ceil

округлення вгору

ceil(2.5)=3

floor

округлення вниз

floor(2.5)=2

sin

синус

Кут задається у радіанах

cos

косинус

tan

тангенс

abs

модуль цілого числа

 

fabs

модуль дробового числа

 

fmod(x,y)

остача від ділення x на y

fmod(5,2)=1

pow(x,y)

піднесення до степеня x y

pow(2,3)=8

sqrt

квадратний корінь

 

     M_PIчисло π = 3.14159... також можна використовувати, підключивши заголовковий файл math.h.

Приклад 1. Записати мовою С++:   x + y 7

а) z = ⋅ 3 x y

Відповідь: z=(x+y)/3*7/(x-y);

б)  

c

Відповідь: s=(-b+1/a)/(2/c);

27

Приклад 2. Записати мовою С++. Чому дорівнюють значення z1 і z2 при b=2? 

2b+ 2 b2 4           2 z1 =z2 = b2 4 +b+ 2         b+ 2

Відповідь: z1=2, z2=0.5

z1=sqrt(2*b+2*sqrt(b*b-4))/(sqrt(b*b-4)+b+2); z2=2/sqrt(b+2);

Приклад 3. Записати мовою С++. Чому дорівнюють значення z1 і z2 при α=0, β=π

z1 = (cosαcosβ)2 (sinαsin β)2;

 

z

Відповідь: z1= z2=4

z1 = pow(cos(a)–cos(b),2)–pow(sin(a)–sin(b),2); z2 = –4*pow(sin((a–b)/2),2)*cos(a+b);

Питання для самоконтролю:

1.     Які ви знаєте математичні функції мови С++?

2.     Який заголовковий файл треба підключити для використання математичних функцій?

a+b (a+b)c*d 3. Знайдіть помилку: = c*d

 Вправа 1-6.

1)      Поясніть, чому дана програма написана неправильно:

          main ()

          {

          cout << "My name is Sasha!";

          }

2)      Складіть програму для знаходження периметра квадрата,

якщо задано його площу.

3)      Знайти площу кільця за заданими зовнішнім та внутрішнім радіусами.

4)      Дано катети прямокутного трикутника. Знайти його периметр. 5) З клавіатури уводиться двоцифрове число. Знайти:

        а) число десятків у ньому;          б) суму його цифр;

        в) число одиниць у ньому;         г) добуток його цифр.

 Збережіть програми, створивши у власній папці нову папку wpr1-6.

28

1.7. Практична робота 3 «Створення лінійних програм»

1)      Обчислити без використання компютера значення виразів:

а) sin(pow(x,2)-1)+2*abs(y)/cos(2+y) при x = 1, y = –2;

б) ceil(6.9)-floor(6.2)-1;

в) 30/6-30%5+2;

г) 3*7/2%7/3-ceil(sin(1)).

2)      Обчислити значення виразів (значення невідомих ввести із клавіатури):

а) a +b + c2 ; б) 3+1+ ( c )2 ; в) mg cos(a2). c a b 2 a+b

3)      Увести значення змінних й обчислити 2 вирази. Чому дорівнюють z1 та z2, при α=π, а=4, x= π, y=0:

а) ;            z2 = 2sinα;

б) ;

в) ;            z2 = cos2α+ cos4α;

г) z1 = a + 2 −      a      +      2      a −     2 ; z2 =        1      .

                   2a         2a + 2 a −    2a       a + 2              

 Збережіть програми, створивши у власній папці нову папку pr3.

1.8. Тематичне оцінювання з теми «Програма. Мова програмування»

1)      У квадрат вписане коло (див. мал.). 

а) Визначити площу заштрихованої частини фігури. Довжину сторони квадрата увести із клавіатури.

б) Визначити площу не заштрихованої частини фігури. Радіус кола увести із клавіатури.

29

2)      Дано трицифрове число

а) Знайти число, отримане при прочитанні його цифр у зворотному напрямку.

б) У ньому закреслили першу ліворуч цифру й приписали її наприкінці. Знайти отримане число.

3)      Увести значення змінних й обчислити 2 вирази (значення першого та другого виразів повинні збігатися):

а) z1 = cosα+ cos2α+ cos6α+ cos7α;                б) z1 = ;

z1tgα z2 =                                                   .

1+ tgα

 Збережіть програми, створивши у власній папці нову папку ta1.

Питання для самоконтролю:

1.     Для чого в С++ служить крапка з комою?

2.     Чим '7' відрізняється від 7?

3.     Який тип даних потрібно використати для запису вартості товару в гривнях?

4.     У чому полягає відмінність між константою й змінною?

5.     Чи завжди зберігає змінна своє значення в ході виконання програми?

6.     Чи правильний запис:

const int a=25; … a=a+1;

7.     Як вивести на екран символ «лапки»?

8.     Чи можна використати різні типи даних в одній операції? Якщо так, то як це відіб'ється на результаті операції?

9.     Навіщо при записі операцій використовують круглі дужки?

10.   Чи правильно зроблено перестановку значень двох змінних:

… int a=12; int b=21; a=b; b=a; …

 

30

2. Алгоритми з розгалуженням

2.1. Оператор розгалуження if

Поняття розгалуження

Людині досить часто доводиться приймати рішення, як вчинити, які дії виконати. Розглянемо приклад: якщо на дворі йде дощ (відповідь – «так»), то виконуємо дії: «Взяти парасольку», інакше (відповідь – «ні») пропускаємо ці дії і виконуємо подальшу «програму».

Якщо відповідь на питання-умову «На дворі йде дощє позитивною, то виконується серія (одна або кілька) команд (гілка «так»). Після виконання серії команд виконавець переходить до наступної після розгалуження команди

 

Будь-яка команда серії може бути командою розгалуження. У цьому випадку кажуть, що команди розгалуження вкладені одна в одну.

Взагалі, умоваце будь-яке запитання такого типу, що допускає лише дві можливі відповіді: «так» або «ні». Перевірка умови повинна бути допустимою дією виконавця. У програмі на С++ використовуються умови, що стосуються певних програмних обєктів (наприклад, змінних).

Оператор розгалуження

Оператор розгалуження (або умовний оператор) дозволяє здійснювати під час виконання програми перевірку умови, та на основі перевірки виконувати той або інший оператор. Загальний вигляд оператора розгалуження такий:

if (умова, яку слід перевіритиоператор;

Оператор розгалуження if виконує перевірку, використовуючи операції порівняння С++. Якщо результат перевірки є істиною, то буде виконаний оператор, записаний після умови.

31

Наведені блок-схема та запис умовного оператора є скороченою його формою, на відміну від повної форми, яка буде розглянута нижче. Слід памятати, що в кінці оператора-виразу ставиться крапка з комою.

А зараз розглянемо операції порівняння, які використовуютиься в мові програмування C++.

Операції порівняння в С++

Операція

Питання

Приклад

==

Два значення рівні?

(i == 100)

!=

Два значення не рівні?

(a != b)

>

Перше значення більше, ніж друге?

(var > num)

<

Перше значення менше, ніж друге?

(x < 345)

>=

Перше значення більше або дорівнює другому?

(s >=30)

<=

Перше значення менше або дорівнює другому?

(age3 <= 5.0)

Розглянемо приклад:

#include<iostream.h>                //Програма 2.1

#include<conio.h> int main() { float x,y=6.8; cout<<"Vvedite x:"; cin>>x;

if(x>=y)    //Перевірка умови     cout<<"x>=y!!!"<<endl;    //Простий оператор  getch(); return 0;   

}

У цьому прикладі оператор розгалуження перевіряє умову і, якщо вона істинна, виводить на екран: x>=y!!!. В інших випадках, якщо умова не виконується, програма закінчується не виводячи ніяких повідомлень на екран.

Якщо необхідно виконати кілька інструкцій, коли результат порівнянняістина, вони повинні бути згруповані всередині фігурних дужок {…}.

32

 

Декілька операторів, обмежені фігурними дужками, називають складеним оператором або блоком.

Отже, оператор, який буде виконано у випадку істинності умови, може бути складеним.

Приклад. Фрагмент ігрової програми, в якому приймається рішення про продовження гри:

#include<iostream.h>                //Програма 2.2

#include<conio.h> int main() { char game_end; cout<<"Prodovgimo gru?(t/n):"; cin>>game_end;

 if(game_end=='t')               // Перевірка умови

 {   cout<<"Pravila gri:" << endl; //Складений     Блок-схема повної форми умовного оператора має такий вигляд:

 

Якщо відповідь на питання-умову є позитивною, то виконується серія команд «серія 1» (гілка «так»), якщо ж відповідь негативнасерія команд «серія 2» (гілка «ні»). Після виконання однієї з серій команд виконавець переходить до наступної після розгалуження команди.

Оператор розгалуження if у цьому випадку діє так: якщо результат перевірки є істиною, if виконує оператори, записані після умови, інакшеоператори після ключового слова else.

  cout<<"Opis pravil gri...";           //оператор                    

Приклад застосування повної форми умовного оператора:


 } getch(); return 0;   

}         

Як бачимо, в цьому випадку дія оператора if поширюється на обидві команди, що входять до складеного оператора

Також з цього прикладу видно, що можна порівнювати не лише числа, але й символи (тобто дані типу char). Кожен символ має числовий код, і саме ці коди порівнюються як звичайні числа. Наприклад, код символу ‘A’ дорівнює 65, а код символу ‘Z’ дорівнює 90.

Повна форма оператора розгалуження

Дуже часто виникає потреба при виконанні умови в операторі розгалуження if виконувати одну серію команд, а при не виконаннііншу. В такому випадку використовують повну форму оператора розгалуження

if (умова, яку слід перевіритиОператор 1; еlse

  Оператор 2;

33

#include<iostream.h>                  //Програма 2.3

#include<conio.h> int main() { int oc; cout<<"Vvedit' ocinky:";cin>>oc; if (oc >=5)

{                                     cout<<"Vasha ocinka "<<oc<<" baliv"<<endl; cout<<"Zalik!"<<endl;                        } else {   cout<<" Vasha ocinka "<<oc<<" baliv "<<endl;    cout<<"Nezalik!"<<endl;

} getch();return 0;   

}

У наведеній програмі складені оператори застосовуються як для if, так і для else. Але виконано буде лише одну серію операторів

34

 

У ЖОДНОМУ РАЗІ не будуть виконані ОБИДВА складені оператори.

Питання для самоконтролю:

1.     Для чого використовують умовний оператор?

2.     Назвіть дві форми умовного оператора?

3.     Наведіть приклад з використанням розгалуження?

4.     Назвіть операції порівняння в С++?

5.     Для чого використовують ключове слово «else»?

6.     Чи може хоч одна з команд серії бути командою розгалуження?

7.     Чи можуть виконатися обидві серії команд в умовному операторі?

 Вправа 2-1. 

1)      Випробуйте програму 2.1. Уведіть значення х=5; х=7.2. Проаналізуйте результати.

2)      Випробуйте програму 2.2. Уведіть значення зміннної game_end рівним «t», потім  «n». Уведіть значення «T», чи «N» (великі літери), або українською «т» чи «н». Поясніть результати роботи програми.

3)      Випробуйте програму 2.3. Уведіть значення зміннної oc рівним 4, потім  5 та 10. Поясніть результати. Спробуйте ввести oc = -5, а потім oc =13. Що вийшло

 Збережіть програми, створивши у власній папці нову папку wpr2-1.

2.2. Практична робота 4 «Програми  з оператором розгалуження»

Варіант 1

1)      Дано два числа. Виведіть перше з них, якщо воно більше від другого, і обидва числа, якщо це не так.

2)      Обчислити площу кільця, перевіривши перед цим правильність уведених даних: радіус отвору не може бути більшим, ніж радіус кільця.

3)      Обчислити вартість покупки з урахуванням знижки. Знижка 3% надається, якщо сума покупки перевищує 500 грн., 5% – якщо сума більша, ніж 1000 грн.

35

Варіант 2

1)      Обчислити частку двох чисел. Програма повинна перевіряти правильність уведених даних і, якщо вони неправильні (дільник дорівнює нулю), видавати повідомлення про помилку.

2)      Увести радіус кола й сторону квадрата. У якої фігури більша площа?

3)      Обчислити вартість покупки з урахуванням знижки. Знижка 10% надається, якщо сума покупки перевищує 1000 грн.

 Збережіть програми, створивши у власній папці нову папку pr4.

2.3. Логічні операції «І», «АБО», «НЕ».  Оператор-перемикач 

Дуже часто в програмах доводиться перевіряти відразу кілька умов. Наприклад, у прикладі 2.2 при відповіді на питання "Prodovgimo gru?(t/n):неуважний гравець може увести: «T» або  «N», тобто символи верхнього регістру, що спричинить неправильну реакцію програми. Отут нам і допоможуть логічні операції

Логічні операції «АБО» та «І» Змінимо умову в програмі так:

if ((game_end=='t')||(game_end=='T'))

 

| | – логічна операція «АБО».

Умова читається так: «якщо змінна дорівнює символу 't' АБО дорівнює символу  'T'».

У наступному прикладі показано, як уникнути некоректного уведення оцінок, наприклад, менших від 1 бала або більших, ніж 12 балів. Скориставшись умовними операторами та логічними операціями, можна здійснити перевірку коректності даних.

Складемо блок-схему та запишемо алгоритм:

#include<iostream.h>                  //Програма 2.4

#include<conio.h> int main() { int oc; cout<<"Vvedi ocinky:"; cin>>oc;

36

if ((oc<1)||(oc>12))           //Перевірка правильності

{                                             //оцінки

cout<<"Vvedi ocinky vid 1 do 12 baliv"<<endl;

}

else                       //Реакція на правильну оцінку

{   if (oc>=5)

  {                                      cout<<"Vasha ocinka "<<oc<<" baliv"<<endl; cout<<"Zalik"<<endl;                       

  }                       else   { cout<<"Vasha ocinka "<<oc<<" baliv"<<endl;     cout<<"Nezalik"<<endl;

  } } getch(); return 0;   

}

У цьому прикладі серія команд після else являє собою також оператор розгалуження

37

Переробимо приклад 2.4 так:

if ((oc>=1)&&(oc<=12))

{   if (oc>=5)

  {                                      cout<<"Vasha ocinka "<<oc<<" baliv"<<endl; 

 

&& – логічна операція  «І»  

cout<<"Zalik"<<endl;                       

  }                       else   {    cout<<"Vasha ocinka "<<oc<<" baliv"<<endl; cout<<"Nezalik"<<endl;

  } } else { cout<<"Vvedi ocinky vid 1 do 12 baliv"<<endl;

}

У цьому випадку перевірка коректності читається так: «якщо oc більше або дорівнює 1 балу І менше або дорівнює 12 балам, то виконаються оператори в дужках після if, в іншому випадку виконаються оператори після else».

Умову, записану з використанням логічних операцій, називають складеною умовою

Уважно дослідіть роботу наведених програм і запам'ятайте таке:

 

Нехай А і Вумови.

Складена умова А||В виконується, якщо виконується хоча б одна із умов: або умова А, або умова В.

Складена умова А&&В виконується лише тоді, коли виконуються обидві умови: і умова А, і умова В.

38

Подання логічних значень у С++

У С++ істина подається як ненульове значення, а хибністьяк 0.

Припустимо, ваша програма використовує змінну velo, щоб зберегти інформацію про те, чи є у користувача велосипед, чи ні. Якщо немає велосипеда, ви можете надати цій змінній значення 0 (хибність):

          velo=0;

Якщо ж є, то можна надати змінній будь-яке ненульове значення, наприклад 1:

          velo=1;

Потім програма може використати цю змінну в якості умови:

          if (velo) ...

Якщо значення змінної ненульове, умова вважається істинною; у іншому випадку (тобто, якщо змінна дорівнює 0), умова хибна.         Виходячи          з           вищесказаного,            попередній       оператор рівносильний такому:

          if (velo != 0) ...

Наступна програма моделює діалог про те, чи є у користувача велосипед або автомобіль

#include<iostream.h>                   //Програма 2.5

#include<conio.h> int main() { int velo, avto;  cout<<"Maete avtomobil? (1-tak,0-ni):"; cin>>avto; cout<<"A velosiped? (1-tak,0-ni):"; cin>>velo; if(velo)  cout<<"Velo – ce zdorov’ya!\n"; if(avto)  cout<<"Avto – ce shvydkist!\n"; if(velo && avto)  cout<<"Avto i velo–сe shvydkist i zdorov’ya\n"; if(velo || avto)  cout<<"Avto i velo – chudo-tehnika!\n"; getch(); return 0;    }

39

Уважно проаналізуйте цю програму, уводячи різні значення змінних velo й avto.

Операція заперечення «НЕ»

У наведених вище прикладах, як правило, виконувалася серія операторів, якщо умова істинна. Але іноді необхідно виконати серію операторів, якщо умова хибна. У цьому випадку знадобиться логічна операція «НЕ», позначувана в С++ знаком оклику (!):

#include<iostream.h>                  //Програма 2.6

#include<conio.h> int main() { int a,b,c; cout<<"Analiz rivnjannja vidu: a*x*x+b*x+c=0"

<<endl; cout<<"Vvedit’ a,b,c (cherez TAB!):"; cin>>a>>b>>c; if(!a)    cout<<"Ce linijne rivnjannja!"<<endl; else    cout<<"Ce kvadratne rivnjannja!"<<endl; getch();return 0;    } 

 

! – логічна операція «НЕ»  

Операція «НЕ» перетворює хибність в істину, а істину в хибність. Надалі ви часто будете використовувати операцію «НЕ». Наприклад, ваша програма може продовжувати повторювати обробку рядкової константи, поки не досягне її кінця, про що вказуватиме символ \0. Але про це поговоримо пізніше.

Питання для самоконтролю:

1.     Що означає логічна операція «АБО»?

2.     Що означає логічна операція «І»?

3.     Що означає логічна операція «НЕ»?

4.     Як називають умову, записану з використанням логічних операцій?

5.     Як у С++ представляється істина? А хибність?

6.     У що операція «НЕ» перетворює хибність?

40

 Вправа 2-3. 

1)      Випробуйте програму 2.4. Для цього відкрийте файл завдання 3 з попередньої вправи 2.1. та доопрацюйте програму. Проаналізуйте результати.

2)      Випробуйте програму 2.5. Уведіть значення змінної velo=0, avto=1; velo=1, avto=0; velo=avto=1; velo=avto=0. Поясніть результати роботи програми. Доопрацюйте програму, щоб у останньому випадку на екрані зявлялось:

Kupit’ velo abo avto!  

3)      Випробуйте програму 2.6. Доопрацюйте її для розвязування квадратного рівняння.

 Збережіть програми, створивши у власній папці нову папку wpr2-3.

2.4. Обробка декількох умов

Приклад використання вкладених умов

Нехай нам треба визначити поведінку космічного апарата, що стартує на екваторі, залежно від його початкової швидкості V. Як ви знаєте з уроків фізики, тут можливі чотири випадки:

      при V<7,8 км/с апарат впаде на поверхню Землі;

      при 7,8V<11,2 км/с апарат стане супутником Землі;

      при 11,2V<16,4 км/с апарат стане супутником Сонця;

      при V16,4 км/с апарат покине Сонячну систему. Складемо блок-схему алгоритму (див. мал.).

Як видно з блок-схеми, ми маємо декілька вкладених одна в одну умов. Якщо не виконується перша умова, то буде перевірена друга умова і т. д. Причому, 2-гу й 3-тю умови необовязково записувати за допомогою подвійної нерівності (наприклад,

(v>=7.8)&&(v<11.2)). Зрозуміло, якщо перша умова (v<7.8) хибна, то при перевірці 2-ї умови v вже не може дорівнювати будьякому значенню, меншому за 7.8:

#include<iostream.h>                  //Програма 2.7

#include<conio.h> int main() { float v; cout<<"Vvedit shvidkist (km/s):";

41

cin>>v; if(v < 7.8)  cout<<"Korabel upade na Zemlyu"<<endl; else if(v < 11.2)  cout<<"Korabel – suputnik Zemli"<<endl; else if(v < 16.4)  cout<<"Korabel – suputnik Soncja "<<endl; else   cout<<"Korabel pokine sonjachnu sistemu"<<endl; getch(); return 0;   

}

Експериментуючи з цією програмою, уводьте різні значення v і аналізуйте отримані результати.

Оператор switch-перемикач  

У попередній програмі для з'ясування поведінки космічного корабля ми використали оператори розгалуження. Але, при глибині вкладеності цих операторів понад три, така конструкція робить програму складною для сприйняття людиною. Більш зручним у такій ситуації виявляється застосування оператора switch.

42

 Загальна структура оператора така:

… switch (вираз)

{    case константний вираз 1:оператори 1;        break;

   case константний вираз 2: оператори 2;

          break;

   …    case константний вираз n: оператори n;    break;               

default: оператори;

}

Виконання оператора починається з обчислення виразу (він повинен бути цілочисельним), а потім керування передається першому оператору зі списку, поміченого константним виразом, значення якого співпало з обчисленим. Вихід із перемикача найчастіше виконується за допомогою оператора break.                Розглянемо приклад:

#include<iostream.h>                  //Програма 2.8

#include<conio.h> int main() {   int shwid;   cout<<"Vvedi shvidkist korablya:"<<endl; cout<<"0– V< 7.8 km/s"<<endl;

43

cout<<"1- 1 kosmichna V=(7.8-1.2)km/s"<<endl; cout<<"2- 2 kosmichna V=(11.2-6.4)km/s"<<endl; cout<<"3- 3 kosmichna V>16.4km/s"<<endl; cin>>shwid;   switch (shwid){    case 0:cout<<"Upade na Zemlyu"<<endl;   break;    case 1:cout<<"Stane suputnikom Zemli"<<endl;     break;    case 2:cout<<"Stane suputnikom Soncja"<<endl;

      break;       default:cout<<"Pokine sonjachnu sistemu"<<endl;       break;

} getch(); return 0;   

}

До речі, мітка в case може бути й типу char:

… char scor = 'a'; switch (scor){  case 'a':cout<<"Korabel upade na Zemlyu"<<endl;

          break;

Зверніть увагу на використання оператора break. Якщо в програмі зустрічається варіант (case…), що дорівнює значенню керуючого виразу оператора switch, то подальша перевірка умов припиняється і виконуються всі оператори, аж до кінця оператора switch. Оператор break є вказівкою завершити поточний оператор switch і продовжити виконання програми з першого оператора, що є наступним за оператором switch.

Питання для самоконтролю:

1.     Чи можливо за допомогою умовного оператора обробляти декілька умов?

2.     Для чого використовують оператор-перемикач?

3.     Як працює оператор-перемикач?

4.     За допомогою якого оператора здійснюється вихід із оператораперемикача?

5.     Якого типу може бути мітка в case?

44

 Вправа 2-4. 

1)      Випробуйте програму 2.7. 

2)      Випробуйте програму 2.8. Поясніть результати роботи програми. Доопрацюйте програму, щоб мітка в case була типу char

3)      Напишіть програму, яка запитує у користувача номер дня тижня, а потім виводить назву дня тижня. При введенні неправильних даних програма повинна видати відповідне повідомлення.

 Збережіть програми, створивши у власній папці нову папку wpr2-4.

2.5. Практична робота 5 «Використання логічних операцій та оператора-перемикача» 1) Проаналізуйте роботу програми:

#include<iostream.h> #include<conio.h> int main() { float v; cout<<"Vvedite v (km/s):"; cin>>v; cout<<"shwid="<<(v<7.8)<<"+"<<(v<11.2)<<"+"

<<(v <16.4)<<endl; getch();return 0;   

}

Зробіть висновки і доопрацюйте її так, щоб її взаємодія з користувачем була такою ж, як у програмі 2.7. Для підрахунку значення змінної shwid використайте вираз:

int shwid=(v < 7.8)+ (v < 11.2)+(v < 16.4);

2)      Написати програму, що вимагає уведення часу дня і, залежно від уведеного значення, бажає доброго ранку, доброго дня, доброго вечора або спокійної ночі.

3)      Написати програму для обчислення вартості розмови по телефону з урахуванням 20% знижки, що надається у суботу і неділю. Увести тариф, тривалість розмови й номер дня тижня. Проаналізувати результати при різних вхідних даних.

 Збережіть програми, створивши у власній папці нову папку pr5.

45

3. Оператори для організації циклів

3.1. Цикли. Цикл із лічильником

Види циклів

Часто при виконанні алгоритмів необхідно багаторазово повторювати одні і ті ж дії. Наприклад, щоб зобразити ромашку, потрібно намалювати багато однакових пелюсток; щоб викопати яму, потрібно багато разів повторити подібні рухи лопатою тощо. У таких випадках використовують циклічну структуру або структуру «повторення».

 

Циклце форма організації дій, при якій одна і та ж послідовність дій виконується кілька разів доти, поки виконується деяка умова.

Серія команд, що повторюється без змін при кожному проході циклу

(ітерації), називається тілом циклу. Першим      розглянемо       цикл     з лічильником (див. блок-схему). Такий цикл використовується, коли заздалегідь відомо, скільки разів треба виконати тіло циклу. Лічильник набуває початкового значення, перевіряється умова,     і           якщо    вона істинна, то виконується серія операторів, а також лічильник змінюється на величину приросту. Потім все повторюється доти,          поки     умова   не перестане виконуватися.

Є ще два типи повторення: з передумовою та з післяумовою. Такі цикли зручно використовувати, коли заздалегідь не відомо, скільки разів буде виконуватися тіло циклу.

У першому випадку спочатку перевіряється умова, і якщо вона істинна, то тіло циклу виконується черговий раз, якщо ж ніповторення серії операторів припиняється.

У випадку повторення з післяумовою, спочатку відбувається виконання вказаної дії, а після цього визначається, чи є потреба ви-

46

конувати її знову. Причому, в цьому випадку повторення відбувається в разі, якщо умова не виконується (див. блок-схеми).

 

 

Можливі ситуації, коли тіло циклу з передумовою не виконається жодного разу. Це відбувається в тому випадку, коли при першій перевірці умови значення логічного виразу є хибним.

 

Якщо при повторенні циклу умова незмінно залишається істинною, то цикл може повторюватися нескінченно.

Цикл з післяумовою обовязково виконається хоча б один раз, тому що спочатку виконується серія операторів, а потім перевірка умови

Цикл з лічильником for

Розглянемо синтаксис оператора циклу з лічильником у С++:

for (оператор1; вираз1; вираз2) оператор_тіла_циклу;

Послідовність його виконання така

крок 1: виконується оператор1;

крок 2: обчислюється вираз1, і якщо він істинний, то виконується оператор_тіла_циклу. Якщо хибний, то виконання циклу припиняється і виконується наступний оператор;

крок 3: обчислюється вираз2; крок 4: повторюються кроки 2-4.

Наприклад, у програмі може зустрітися такий цикл з лічильником

for (int і = nc; і <= kc; і++)

cout<<i;

forключове слово, що означає початок циклуізмінна циклу, якій присвоюється початкове значення лічильника nc;

47

kcзначення лічильника, після досягнення якого цикл

завершується; і++зміна лічильника циклу. Якщо крок не дорівнює одиниці,

можна, наприклад, написати: і=і+5, чи і=і+0.25. Можливе скорочення запису: і+=5 у першому випадку та і+= 0.25 у другому. Не забувайте, що у другому випадку змінна циклу повинна мати тип float! В даному випадку виконання циклу здійснюється за такою схемою:

1.                    Параметр і одержує значення nc.

2.                    Робиться перевірка, чи не перевищує значення змінної циклу кінцевого значення лічильника kc.

3.                    Якщо не перевищує, то виконуються оператори у фігурних дужках. Якщо оператор у циклі один, його можна у дужки не брати.

4.                    Цикл закінчує роботу, як тільки умова і<=kc стане хибноюРозглянемо приклад:

#include<iostream.h>                  //Програма 3.1

#include<conio.h> int main() { int num; for (num = 1; num<=100; num++)  cout<<num<<" "; getch();return 0;   

}

Як бачите, у цій програмі в операторі for змінна num спочатку отримує значення 1. Потім здійснюється перевірка, чи виконується умова num<=100. Якщо це так, то виконується відповідний оператор тіла циклу (cout<<num<<" ";) і num збільшується на 1 (num++ або num = num + 1). Потім перевірка і подальші кроки повторюються

Складемо програму, при виконанні якої компютер «просить» увести число, при якому цикл повинен завершитися, а потім роздруковує всі числа від нуля до уведеного числа:

#include<iostream.h>                  //Програма 3.2

#include<conio.h> int main() { int i,n; cout<<"Vvedit’ chislo: "; cin>>n;

48

for (i = 0; i <= n; i++)   cout<<i<<" "; getch();return 0;   

}

Тілом циклу for може бути складений оператор. Наступна програма підсумує всі цілі числа від 1 до 10, вивівши при цьому покроковий коментар:

#include<iostream.h>                  //Програма 3.3

#include<conio.h> int main() { int i,sum=0;   for (i = 1; i <= 10; i++)

  {    cout<<"Dodayu "<<i<<" do "<<sum; //тіло циклу sum = sum + i;      //- складений cout<<"- oderguyu: "<<sum<<endl; //оператор

  } getch();return 0;   

}

Лічильник циклу можна не тільки збільшувати, а й зменшувати. Заголовок циклу може бути, наприклад, таким: for (і = 10; і >= 1; і--)

Внесіть зміни у попередню програму і випробуйте її. У цьому випадку змінна циклу з кожним кроком зменшується на одиницю.

Змінимо програму так, щоб підсумовування цілих чисел від 1 до n (n>1) здійснювалося доти, поки значення суми не перевищить уведене значення Smax. У результаті на екран буде виведено кількість проведених  операцій додавання:

...  //Програма 3.3.1 int i,Smax,n,sum=0; int k=0;//лічильник операцій додавання cout<<”Vvedit n:”;cin>>n; cout<<”Vvedit Smax:”;cin>> Smax;   for (i = 1; i <= n; i++)       if(sum<=Smax)

          {

        sum = sum + i;         k++; //приріст лічильника на одиницю

          }

49

cout<<" Wikonano: "<<k<<" operaciy"<<endl; ...

 

Зверніть увагу, що між заголовком циклу for та тілом циклу не ставиться крапка з комою (;)!!!

Основний цикл програми 3.3.1 можна записати ще коротше:

...   //Програма 3.3.2 for (i = 1; sum<=Smax; i++) sum += i; cout<<" Wikonano: "<<--i<<" operaciy"<<endl; ...

Як бачите, перевірка умови sum<=Smax тут винесена в заголовок циклу. Крім того, замість змінної k в кінці виводиться зменшене на одиницю значення змінної i. Отже, такий варіант є кращим з двох причин:

-          економія памяті, завдяки відмові від змінної k;

-          більша швидкодія, за рахунок зменшення кількості операцій, які повторюються в тілі циклу, з 4-х (<=,=,+,++) до 2-х (+=).

Особливості використання циклу for

Як вже було сказано, іноді, через помилки програмування, повторення циклу не припиняється зовсім. Тоді кажуть, що програма «зациклилася». Причиною «зациклення» є те, що умова припинення циклу не може стати істинною. Уникайте таких помилок.

Приклад зациклення:

for (і = 0; і < 100; value++)   cout<<i;

Цей цикл мав би припинитись при досягненні змінною циклу і значення 100. Але ні у виразах заголовку, ні у тілі циклу значення і не змінюється. Як наслідок, значення змінної і ніколи не стане рівним 100, і програма буде працювати нескінченно!

Як вже було сказано, цикли for не обмежуються використанням в якості лічильника циклу змінних типу int. Наприклад, наступна програма використовує змінну циклу типу char (letter) для виведення букв латинського алфавіту у першому

50

циклі й змінну типу float (value) для виведення чисел із плаваючою крапкою в іншому циклі:  

#include<iostream.h>                  //Програма 3.4

#include<conio.h> int main() { char letter; float value; for (letter = 'A'; letter<='Z'; letter++)

          cout<<letter;

  cout<<endl; for (value = 0.0; value<=1.0; value+=0.1)        cout<<value<<" ";

getch(); return 0;    }

Питання для самоконтролю:

1.     Що таке «цикл»?

2.     Як виконується цикл з лічильником?

3.     Як виконується цикл з передумовою?

4.     Чи може тіло циклу з передумовою не виконатися жодного разу?

5.     Як виконується цикл з післяумовою?

6.     Чи може тіло циклу з післяумовою не виконатися жодного разу?

7.     Що таке «зациклення»?

8.     Чи можливо у циклі for в якості змінних циклу використовувати змінні типу char; типу float?

 Вправа 3-1.

1)      Випробуйте програму 3.1. Експериментуючи із цією програмою, змініть значення 100 на 10, 30 і навіть 4000.

2)      Випробуйте програму 3.2. Що відбудеться при n = –1?

3)      Випробуйте програму 3.3. Експериментуючи із програмою, замініть 10 іншими значеннями. Потім замість  i++  уведіть  i+=5

Переробіть програму, як у прикладі 3.3.1. Експериментуйте, уводячи різні