C _Учебник_МОНУ
.pdfЗа ред. канд. техн. наук, доцента
О.Г. Трофименко
Теорія та практика
Рекомендовано Міністерством освіти і науки України як навчальний посібник для студентів напряму підготовки «Телекомунікації» вищих навчальних закладів
Ректорська серія
ББК 32.973(076) УДК 004.43
Гриф надано Міністерством освіти і науки України, лист № 1/11-2645 від 04.04.2011 р.
Р е ц е н з е н т и:
В. М. Тонконогий, д.т.н., професор, зав. каф. інформаційних технологій проектування в машинобудуванні Одеського національного політехнічного університету;
М. П. Мусієнко, д.т.н., професор кафедри інформаційних технологій і програмних систем Чорноморського державного університету ім. Петра Могили; С. Л. Ємельянов, к.т.н., доцент, зав. каф. правової інформатики Національ-
ного університету “Одеська юридична академія”; І. В. Стрелковська, д.т.н., професор, декан факультету інформаційних мереж
Одеської національної академії зв‟язку ім. О. С. Попова
А в т о р с ь к и й к о л е к т и в:
Трофименко О. Г., Прокоп Ю. В., Швайко І.Г., Буката Л. М., Шаповаленко В. А., Леонов Ю. Г., Ясинський В. В.
С++. Теорія та практика : Навч. посібник / [О. Г. Трофименко, Ю. В. Прокоп, І. Г. Швайко, Л. М. Буката та ін.] ; за ред. О. Г. Трофименко. – 587 с.
Навчальний посібник містить опис мови програмування С++ стандарту ANSI у поєднанні із засобами візуального програмування та об‟єктно-орієнтованого підходу C++ Builder. Розглянуто засоби програмування як базових алгоритмів, так і опрацювання структурованих типів, робота з покажчиками, засоби динамічного керування пам‟яттю тощо. Значну увагу приділено опрацюванню динамічних структур даних, програмуванню списків, дерев, автоматів. Окремий розділ присвячено засобам об‟єктно-орієнтованого програмування. Кожна з розглянутих тем супроводжується значною кількістю прикладів програм.
Начальний посібник підготовлено до видання на кафедрі “Інформаційні технології” в ОНАЗ ім. О.С. Попова. Призначено для студентів технічних вузів і може бути корисною для кола читачів, які бажають навчатися програмуванню мовою С++.
ISBN 978-966-7598-59-4
О. Г. Трофименко, Ю. В. Прокоп, І. Г. Швайко, Л. М. Буката, В. А. Шаповаленко, Ю. Г. Леонов, В. В. Ясинський, 2011
3
ЗМІСТ
Передмова ........................................................................................................... |
8 |
Розділ 1. Апаратні та програмні засоби ЕОМ ................................... |
11 |
||
1.1 |
Основні відомості про будову ЕОМ........................................................... |
11 |
|
1.2 |
Програмне забезпечення.............................................................................. |
13 |
|
1.3 |
Файлова система........................................................................................... |
14 |
|
1.4 |
Системи числення ........................................................................................ |
15 |
|
1.4.1 |
Різновиди систем числення................................................................... |
15 |
|
1.4.2 |
Одиниці інформації................................................................................ |
16 |
|
1.4.3 |
Основні позиційні системи числення .................................................. |
17 |
|
1.4.4 |
Переведення чисел з однієї системи числення до іншої.................... |
18 |
|
1.4.5 Арифметичні операції в різних системах числення ........................... |
23 |
||
1.5 |
Етапи розв‟язування обчислювальних задач на комп‟ютері ................... |
24 |
|
1.6 |
Алгоритм, його властивості й засоби описування. |
|
|
|
Поняття програми......................................................................................... |
25 |
|
|
|
||
Розділ 2. Середовище програмування C++ Builder.......................... |
29 |
||
2.1 |
Технологія створювання інтерфейсних програм ...................................... |
29 |
|
2.1.1 |
Засоби середовища C++ Builder ........................................................... |
29 |
|
2.1.2 |
Структура С++ Builder-проекту............................................................ |
46 |
|
2.1.3 |
Послідовність створювання програмного проекту в C++ Builder .... |
48 |
|
2.1.4 |
Створення проектів з декількома формами......................................... |
57 |
|
2.2 |
Робота у консолі ........................................................................................... |
59 |
|
2.2.1 |
Основні функції роботи у консольному режимі ................................. |
59 |
|
2.2.2 |
Послідовність створювання консольного програмного додатка ..... |
63 |
|
|
|
||
Розділ 3. Елементи мови С++..................................................................... |
67 |
||
3.1 |
Історія С++ .................................................................................................... |
67 |
|
3.2 |
Алфавіт мови С++ ........................................................................................ |
69 |
|
3.3 |
Типи даних .................................................................................................... |
70 |
|
3.4 |
Константи ...................................................................................................... |
75 |
|
3.5 |
Правила записування арифметичних виразів............................................ |
76 |
|
3.5.1 |
Операнди і вирази .................................................................................. |
76 |
|
3.5.2 |
Арифметичні операції............................................................................ |
77 |
|
3.5.3 |
Оператори присвоювання .................................................................... |
79 |
|
3.5.4 |
Зведення типів ....................................................................................... |
80 |
|
3.5.5 |
Математичні функції ............................................................................. |
82 |
|
3.6 |
Поширені функції перетворювання числових |
|
|
|
типів даних у С++ Builder............................................................................ |
83 |
|
3.7 |
Функції С++ генерування випадкових чисел ............................................ |
85 |
4
Розділ 4. Програмування базових алгоритмів .................................. |
87 |
||
4.1 |
Види базових алгоритмів............................................................................. |
87 |
|
4.2 |
Програмування лінійних алгоритмів.......................................................... |
87 |
|
4.3 |
Програмування розгалужених алгоритмів................................................. |
96 |
|
4.3.1 |
Розгалужені алгоритми.......................................................................... |
96 |
|
4.3.2 |
Оператор безумовного переходу goto.................................................. |
96 |
|
4.3.3 |
Операції відношення та логічні операції............................................. |
96 |
|
4.3.4 |
Пріоритет логічних операцій .............................................................. |
100 |
|
4.3.5 |
Пріоритети операцій і порядок обчислень ........................................ |
100 |
|
4.3.6 |
Умовний оператор if ............................................................................ |
101 |
|
4.3.7 |
Тернарна умовна операція ?:.............................................................. |
111 |
|
4.3.8 |
Оператор вибору варіантів switch ...................................................... |
113 |
|
4.4 |
Програмування циклічних алгоритмів..................................................... |
120 |
|
4.4.1 |
Циклічні алгоритми ............................................................................. |
120 |
|
4.4.2 |
Оператор циклу з параметром for ...................................................... |
120 |
|
4.4.3 |
Вкладені цикли .................................................................................... |
140 |
|
4.4.4 |
Оператори циклу з передумовою while та післяумовою do-while .. |
145 |
|
4.4.5 |
Оператори переривання виконання ................................................... |
159 |
|
|
|
||
Розділ 5. Масиви в С++ .............................................................................. |
163 |
||
5.1 |
Поняття масиву........................................................................................... |
163 |
|
5.2 |
Одновимірні масиви................................................................................... |
163 |
|
5.2.1 |
Оголошення одновимірних масивів................................................... |
163 |
|
5.2.2 |
Введення-виведення одновимірних масивів ..................................... |
166 |
|
5.2.3 |
Програмування базових алгоритмів |
|
|
|
|
опрацювання одновимірних масивів.................................................. |
168 |
5.2.4 |
Опрацювання одновимірних масивів у функціях............................. |
176 |
|
5.3 |
Двовимірні масиви ..................................................................................... |
185 |
|
5.3.1 |
Організація двовимірних масивів....................................................... |
185 |
|
5.3.2 |
Введення-виведення двовимірних масивів ....................................... |
188 |
|
5.3.3 |
Програмування базових алгоритмів |
|
|
|
|
опрацювання двовимірних масивів .................................................... |
190 |
5.3.4 |
Опрацювання двовимірних масивів у функціях ............................... |
198 |
|
|
|
||
Розділ 6. Вказівники. Динамічна пам’ять.......................................... |
207 |
||
6.1 |
Вказівники................................................................................................... |
207 |
|
6.2 |
Вказівники на одновимірні масиви .......................................................... |
209 |
|
6.3 |
Арифметика вказівників ............................................................................ |
210 |
|
6.4 |
Вказівники на багатовимірні масиви ....................................................... |
212 |
|
6.5 |
Динамічна пам‟ять ..................................................................................... |
215 |
|
6.6 |
Динамічні одновимірні масиви................................................................. |
217 |
|
6.7 |
Динамічні двовимірні масиви (матриці) .................................................. |
225 |
5
Розділ 7. Символи і рядки ......................................................................... |
231 |
|
7.1 |
Символьний тип даних .............................................................................. |
231 |
7.2 |
Рядки ............................................................................................................ |
235 |
7.2.1 Масиви символів ................................................................................... |
236 |
|
7.2.2 Клас AnsiString (String)......................................................................... |
255 |
|
7.2.3 Рядки string ............................................................................................ |
261 |
|
7.3 Розширені символьні типи ......................................................................... |
269 |
|
7.3.1 Тип С++ wchar_t .................................................................................. |
269 |
|
7.3.2 Тип С++ Builder WideString ................................................................ |
270 |
|
Розділ 8. Функції............................................................................................ |
272 |
|
8.1 |
Правила організації функцій ..................................................................... |
272 |
8.2 |
Способи передавання параметрів до функцій ......................................... |
278 |
8.3 |
Параметри зі значеннями за замовчуванням ........................................... |
285 |
8.4 |
Функції зі змінною кількістю параметрів................................................ |
286 |
8.5 |
Рекурсивні функції ..................................................................................... |
288 |
8.6 |
Перевантаження функцій .......................................................................... |
297 |
Розділ 9. Модульна організація програм ............................................ |
302 |
|
9.1 |
Міжфайлова взаємодія ............................................................................... |
302 |
9.2 |
Заголовні файли.......................................................................................... |
305 |
9.3 |
Бібліотеки функцій..................................................................................... |
326 |
9.4 |
Директиви препроцесора ........................................................................... |
326 |
9.5 |
Область дії та простір імен........................................................................ |
330 |
Розділ 10. Типи опрацювання дати і часу........................................... |
340 |
|
10.1 Тип дата-час у С++................................................................................... |
340 |
|
10.2 |
Тип дата-час у С++ Builder...................................................................... |
342 |
Розділ 11. Типи користувача .................................................................... |
361 |
|
11.1 |
Перейменовування типів (typedef) ......................................................... |
361 |
11.2 |
Структури (struct) ..................................................................................... |
362 |
11.3 |
Об‟єднання (union) ................................................................................... |
373 |
11.4 Перерахування (enum) ............................................................................. |
375 |
|
11.5 |
Множини (Set) .......................................................................................... |
376 |
6
Розділ 12. Файли............................................................................................. |
381 |
||
12.1 |
Загальні відомості про файли.................................................................. |
381 |
|
12.2 |
Текстові файли.......................................................................................... |
382 |
|
12.2.1 |
Зчитування і записування текстових файлів |
|
|
|
|
за допомогою компонентів С++ Builder .......................................... |
382 |
12.2.2 |
Робота з текстовими файлами у стилі С .......................................... |
383 |
|
12.2.3 |
Робота з текстовими файловими потоками у стилі С++................ |
400 |
|
12.2.4 |
Послідовне записування до файла і зчитування з файла ............... |
402 |
|
12.2.5 |
Довільне записування до файла і зчитування з файла ................... |
404 |
|
12.2.6 |
Опрацювання текстових файлів за допомогою дескрипторів....... |
406 |
|
12.3 |
Бінарні файли............................................................................................ |
413 |
|
12.3.1 |
Робота з бінарними файлами у стилі С............................................ |
413 |
|
12.3.2 |
Робота з бінарними файловими потоками у стилі С++.................. |
422 |
|
12.3.3 Опрацювання бінарних файлів за допомогою дескрипторів ........ |
425 |
||
12.4 Робота з графічними файлами у С++ Builder ......................................... |
431 |
||
|
|
||
Розділ 13. Динамічні структури даних ................................................. |
440 |
||
13.1 |
Поняття списку ......................................................................................... |
440 |
|
13.2 |
Стек ............................................................................................................ |
444 |
|
13.3 |
Черга .......................................................................................................... |
447 |
|
13.4 |
Вставлення і вилучення елементів списку ............................................ |
450 |
|
13.5 |
Різновиди списків ..................................................................................... |
462 |
|
13.6 |
Бінарні дерева ........................................................................................... |
474 |
|
13.7 |
Автомати ................................................................................................... |
484 |
|
13.7.1 |
Поняття автомата ............................................................................... |
484 |
|
13.7.2 |
Синхронні автомати........................................................................... |
487 |
|
13.7.3 |
Асинхронні автомати......................................................................... |
489 |
|
13.7.4 |
Композиція автоматів ........................................................................ |
493 |
|
|
|
||
Розділ 14. Об’єктно-орієнтоване програмування............................ |
496 |
||
14.1 |
Модульне й об‟єктно-орієнтоване програмування............................... |
496 |
|
14.2 |
Визначення класу ..................................................................................... |
498 |
|
14.3 |
Створення об‟єктів класу ........................................................................ |
500 |
|
14.4 |
Використання загальнодоступних та приватних елементів класу...... |
501 |
|
14.5 |
Конструктори ............................................................................................ |
504 |
|
14.5.1 |
Властивості конструкторів................................................................ |
504 |
|
14.5.2 |
Конструктор з параметрами.............................................................. |
505 |
|
14.5.3 |
Конструктор зі списком ініціалізації ............................................... |
506 |
|
14.5.4 |
Конструктор за замовчуванням ........................................................ |
507 |
|
14.5.5 |
Конструктор копіювання................................................................... |
507 |
|
14.6 |
Деструктори .............................................................................................. |
512 |
7
14.7 |
Успадкування.......................................................................................... |
515 |
|
14.8 |
Поліморфізм ........................................................................................... |
519 |
|
14.9 |
Класи та об‟єкти бібліотеки компонентів ........................................... |
526 |
|
14.9.1 |
Ієрархія класів бібліотеки візуальних компонентів ...................... |
526 |
|
14.9.2 |
Побудова компонента-нащадка ....................................................... |
529 |
|
14.9.3 |
Інсталяція компонента....................................................................... |
538 |
Розділ 15. Налагодження програм ......................................................... |
542 |
|
15.1 |
Помилки компіляції ................................................................................ |
542 |
15.2 |
Попередження і підказки ......................................................................... |
556 |
15.3 |
Компонування........................................................................................... |
557 |
15.4 |
Помилки етапу виконання ....................................................................... |
558 |
|
|
|
Бібліографічний список ................................................................................ |
546 |
|
Додаток А Таблиці кодів ASCII .................................................................. |
565 |
|
Додаток Б Операції мови С++....................................................................... |
569 |
|
Додаток В Функції стандартної бібліотеки С++. |
|
|
|
Вміст заголовних файлів ........................................................... |
571 |
Алфавітний покажчик.................................................................................... |
577 |
ПЕРЕДМОВА
Найбільш поширеною мовою програмування упродовж кількох останніх десятиліть, поза жодним сумнівом, є мова С++, на підставі якої “виросло” багато сучасних мов програмування і програмних середовищ. Цьому сприяли такі її властивості, як лаконічність, потужність, гнучкість, мобільність, можливість доступу до всіх функціональних засобів системи. Програмувати на С++ можна як для Windows, так і для Unix, причому для кожної з операційних систем існує значна кількість засобів розробляння: від компіляторів до потужних інтеракти-
вних середовищ, як, приміром, Borland С++ Builder, Microsoft Visual C++ чи Visual Studio.NET.
Щоб не звужувати вибір читача щодо технічних засобів, а зосередити його мовою С++, її можливостях та особливостях, навчальний посібник подано як ґрунтовний і водночас доволі легкий для сприйняття матеріалу стосовно вивчення класичних методів програмування. Видання призначене як для початківців, які прагнуть навчатися програмувати мовою С++, так і для тих, хто має базові знання з програмування і прагне їх поглибити та освоїти більшість методів і прийомів, які має “на озброєнні” програміст. У посібнику містяться не лише тривіальні алгоритми, але й задачі з опрацювання структурованих типів даних, робота з вказівниками, засоби динамічного керування пам‟яттю тощо. Значну увагу приділено опрацюванню динамічних структур даних, а саме, програмуванню списків, дерев, автоматів. Окремий розділ присвячений засобам об‟єктно-орієнтованого програмування.
Навчальний посібник може використовуватись як джерело прикладів, вправ та програм для розглядання. Автори намагались показати специфіку основних засобів та можливостей потужної й гнучкої мови С++ на значній кількості прикладів працездатних програм і програмних фрагментів, реалізованих у середовищі Borland С++ Builder, які можуть бути використані у різних версіях С++. Автори сподіваються, що численна кількість прикладів програм викличе у читача бажання не лише реалізувати їх на комп‟ютері та перевірити їхню працездатність, але й змінити та удосконалити ці програми.
Посібник складається з п‟ятнадцяти розділів.
На початку, в розд. 1, можна ознайомитись зі структурною складовою комп‟ютера та призначенням його основних пристроїв, вивчити специфіку програмного забезпечення, особливості зберігання інформації в комп‟ютері й правила переведення чисел з однієї системи числення до іншої. Крім того, у першому розділі описані етапи розв‟язування обчислювальних задач на комп‟ютері та різновиди складання алгоритмів.
У розд. 2 описані інструментальні засоби інтерактивного середовища С++ Builder – однієї із найпотужніших систем, яка дозволяє на найсучаснішому рівні створювати як окремі прикладні програми Windows, так і розгалужені комплекси, призначені для роботи в корпоративних мережах і в Інтернеті. Середовище С++ Builder поєднує засоби мови програмування С++ та компонентноорієнтований підхід до створення програм. Поєднання простоти освоєння візу-