Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

osn_progr_final

.pdf
Скачиваний:
37
Добавлен:
12.02.2016
Размер:
3.27 Mб
Скачать

Міністерство освіти і науки України Київський національний університет імені Тараса Шевченка

Міжнародний економіко-гуманітарний університет імені академіка Степана Дем”янчука

О.БИЧКОВ Ю.ТУРБАЛ

ОСНОВИ

СУЧАСНОГО

ПРОГРАМУВАННЯ

Рівне 2004

1

ББК 018.1 Б 39

УДК 004.432.2

Р е ц е н з е н т и :

доктор техн. наук, професор, зав кафедри прикладної математики

Національного університету водного господарства та природрокористування Власюк А.П.

доктор техн. наук, професор, зав. кафедри прикладної математики Рівненського державного гуманітарного університету Сяський А.О.

Рекомендовано Міністерством освіти і науки України як навчальний посібник для студентів технічних спеціальностей вищих навчальних закладів

Гриф наданий Міністерством освіти і науки України, лист № 14.18.2- 2372 від 05.11.2004

Б 39 О.Бичков, Ю.Турбал Основи сучасного програмування.

Навч. посібник. - Київ: КНУ, 2004.– 678 с.

ISBN

© О.Бичков, Ю.Турбал 2004 р.

2

 

ЗМІСТ

 

ВСТУП.......................................................................................................................

10

1. ОСНОВИ ТЕХНОЛОГІЇ ПРОГРАМУВАННЯ. ....................................

14

2. ОСНОВИ АЛГОРИТМІЗАЦІЇ.....................................................................

23

2.1

ПОНЯТТЯ АЛГОРИТМУ. .............................................................................................

23

2.2

КЛАСИФІКАЦІЯ ВНУТРІШНІХ СТРУКТУР АЛГОРИТМІВ.............................

25

2.3

СКЛАДНІСТЬ АЛГОРИТМІВ . .....................................................................................

28

2.4

СКЛАДНІСТЬ ЗАДАЧ. ...................................................................................................

31

3. МЕТОДОЛОГІЯ ОПИСУ МОВ ПРОГРАМУВАННЯ........................

40

3.1

ГРАМАТИКИ ....................................................................................................................

40

3.2

ТИПИ ФОРМАЛЬНИХ ГРАМАТИК...........................................................................

43

3.3

БНФ. ...................................................................................................................................

46

3.4

ГРАМАТИКИ, ЩО ОПИСУЮТЬ НАЙПРОСТІШІ КОНСТРУКЦІЇ МОВ

 

ПРОГРАМУВАННЯ.................................................................................................................

49

4 ТЕХНОЛОГІЯ ЗАПИСУ АЛГОРИТМІВ ЗА ДОПОМОГОЮ

МОВИ ПРОГРАМУВАННЯ С. ........................................................................

53

4.1

ЕЛЕМЕНТИ МОВИ ........................................................................................................

53

4.2

СТРУКТУРА С-ПРОГРАМИ: ......................................................................................

56

4.3

ОПИСУВАЧІ......................................................................................................................

56

4.4

ОПЕРАЦІЇ МОВИ С.......................................................................................................

57

4.4.1 Арифметичні операції та операції порівняння ..............................

57

4.4.2 Логічні операції ...................................................................................................

58

4.4.3 Побітові логічні операції ..............................................................................

58

4.4.4 Операції адресації та взяття значення..............................................

60

4.4.5 Операція послідовного виконання............................................................

60

4.4.6 Операції інкремента(++) та декремента(--)................................

61

4.4.7 Операція присвоювання..................................................................................

62

4.4.8 Умовна операція .................................................................................................

62

4.4.9 Операція sizeof .....................................................................................................

63

4.4.10 Унарний “+”.......................................................................................................

63

4.4.11 Пріоритет операцій......................................................................................

63

4.5

ОПЕРАТОРИ МОВИ С..................................................................................................

64

4.5.1 Порожній оператор ........................................................................................

64

4.5.2 Складений оператор ........................................................................................

64

4.5.3 Умовний оператор ............................................................................................

64

4.5.4 Оператор циклу for .........................................................................................

65

4.5.5 Оператори dowhile ........................................................................................

67

4.5.6 Оператор continue ...........................................................................................

68

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

68

3

4.5.8 Оператор break .................................................................................................

69

4.5.9 Оператор goto .....................................................................................................

69

4.5.10 Оператор return...............................................................................................

70

4.6

ДИРЕКТИВИ ПРЕПРОЦЕСОРУ ТА ВКАЗІВКИ КОМПІЛЯТОРУ ...................

70

4.6.1 Директива препроцесору #define .............................................................

71

4.6.2 Директива #undef [<ім’я>].........................................................................

73

4.6.3 Директива #include...........................................................................................

73

4.6.4 Директиви умовної компіляції: #if #elif #else #endif..............

74

4.6.5 Директива #line...................................................................................................

76

4.6.6 Директива #error <повідомлення> ........................................................

76

4.7

ОПИСУВАЧІ З МОДИФІКАТОРАМИ. ...................................................................

76

4.7.1 Моделі пам’яті...................................................................................................

76

4.7.2 Модифікатори типу доступу в пам’яті ............................................

77

4.7.3 Модифікатори const, volatile, cdecl, pascal, interrupt .................

78

5 ПРИНЦИПИ ТИПІЗАЦІЇ ДАНИХ............................................................

80

5.1

ПРОСТІ ТИПИ ДАНИХ ..................................................................................................

81

5.2

ПОХІДНІ ТИПИ................................................................................................................

82

5.3

ЕКВІВАЛЕНТНІСТЬ ТИПІВ .........................................................................................

84

5.4

УСПАДКУВАННЯ АТРИБУТІВ ..................................................................................

85

5.5

ПЕРЕЛІЧУВАНІ ТИПИ ..................................................................................................

86

5.6

ЛОГІЧНІ ТИПИ.................................................................................................................

87

5.7

СИМВОЛЬНІ ТИПИ ........................................................................................................

87

5.8

ЧИСЛОВІ ТИПИ...............................................................................................................

88

5.9

СТРУКТУРНІ ТИПИ ДАНИХ .......................................................................................

88

5.9.1 Масиви.......................................................................................................................

89

5.9.2 Структури .............................................................................................................

90

5.10 ДЕЯКІ ОСОБЛИВОСТІ ТИПІВ ДАНИХ C ............................................................

90

5.10.1 Базові типи даних ...........................................................................................

90

5.10.2 Перетворення типів......................................................................................

91

5.10.3 Засіб typedef. ....................................................................................................

92

5.10.4 Вказівники та масиви...................................................................................

93

 

5.10.4.1 Вказівники ...................................................................................................

93

 

5.10.4.2 Масиви..........................................................................................................

94

 

5.10.4.3 Вказiвники та масиви. ..........................................................................

95

 

5.10.4.3 Вказівники на масив та багатовимірні масиви....................

96

 

5.10.4.4 Приклади ......................................................................................................

97

5.10.5 Структури та об’єднання . ...................................................................

110

 

5.10.5.1 Структури...................................................................................................

110

 

5.10.5.2 Об’єднання...............................................................................................

114

4

 

5.10.5.3 Приклади програм ................................................................................

 

116

6 ПРЕДСТАВЛЕННЯ ЧИСЕЛ У КОМП'ЮТЕРІ. .................................

 

129

6.1

СИСТЕМИ ЧИСЛЕННЯ ...............................................................................................

 

 

129

6.2

ПРАВИЛА ПЕРЕВЕДЕННЯ ЧИСЕЛ З ОДНІЄЇ СИСТЕМИ ЧИСЛЕННЯ В

 

ІНШУ. ........................................................................................................................................

 

 

132

6.3

ПРАВИЛО ВИЗНАЧЕННЯ ТОЧНОСТІ ПРЕДСТАВЛЕННЯ. ...........................

134

Завдання для самостійної роботи....................................................................

 

136

6.4

ДВІЙКОВА АРИФМЕТИКА.......................................................................................

 

 

137

6.4.1 Додавання двійкових чисел.........................................................................

 

137

6.4.2 Представлення від’ємних чисел. ............................................................

 

138

 

6.4.2.1 Прямий код..................................................................................................

 

 

138

 

6.4.2.2 Обернений код...........................................................................................

 

 

139

 

6.4.2.3 Додатковий код.........................................................................................

 

 

140

6.4.3 Віднімання двійкових чисел . .....................................................................

 

142

6.4.4 Множення двійкових чисел........................................................................

 

143

Завдання для самостійної роботи....................................................................

 

144

6.4.5 Ділення двійкових чисел. ..............................................................................

 

144

Завдання для самостійної роботи. ...................................................................

 

146

6.5

ОЗНАКА ПЕРЕПОВНЕННЯ РОЗРЯДНОЇ СІТКИ ПРИ АРИФМЕТИЧНИХ

 

ОПЕРАЦІЯХ. ...........................................................................................................................

 

 

146

Завдання для самостійної роботи: ..................................................................

 

147

6.6

ПРЕДСТАВЛЕННЯ ЦІЛИХ ЧИСЕЛ .........................................................................

 

147

6.7

ПРЕДСТАВЛЕННЯ ДІЙСНИХ ЧИСЕЛ. ..................................................................

 

149

Завдання для самостійної роботи....................................................................

 

155

6.8

КЕРУВАННЯ МАШИННИМ ПРЕДСТАВЛЕННЯМ ЧИСЕЛ............................

155

6.9

ОСОБЛИВОСТІ ВИКОНАННЯ АРИФМЕТИЧНИХ ОПЕРАЦІЙ.....................

156

7

РЕАЛІЗАЦІЯ

КОНЦЕПЦІЇ

СТРУКТУРНОГО

ПРОГРАМУВАННЯ В МОВІ С .....................................................................

 

159

7.1

ОГОЛОШЕННЯ ТА ВИЗНАЧЕННЯ ФУНКЦІЙ....................................................

 

159

7.2

ФОРМАЛЬНІ ТА ФАКТИЧНІ ПАРАМЕТРИ.........................................................

 

160

7.3

ФУНКЦІЇ ІЗ ЗМІННОЮ КІЛЬКІСТЮ ПАРАМЕТРІВ..........................................

 

162

7.4

РЕКУРСІЯ.........................................................................................................................

 

 

163

7.5 ПАРАМЕТРИ ФУНКЦІЇ MAIN. .............................................................................

 

164

7.6

ЛIТЕРНI ВКАЗIВНИКИ ТА ФУНКЦIЇ.....................................................................

 

165

7.7

ЧАС ЖИТТЯ ТА ОБЛАСТЬ ДІЇ. ОГОЛОШЕННЯ ТА ВИЗНАЧЕННЯ .........

166

7.8

КЛАСИ ПАМЯТІ. .........................................................................................................

 

 

168

7.9

ПРИКЛАДИ ПРОГРАМ................................................................................................

 

 

169

7.9

ВВІД-ВИВІД С. ФАЙЛИ ТА ПОТОКИ. .................................................................

 

183

7.9.1 Функції вводу-виводу верхнього рівня.................................................

 

183

5

7.9.2 Функції вводу-виводу консольного терміналу та порта........

189

7.9.3 Функції-вводу виводу нижнього рівня.................................................

189

7.9.4 Приклади програм ...........................................................................................

190

8 ОБ’ЄКТНО-ОРІЄНТОВАНЕ ПРОГРАМУВАННЯ ТА С++. ..........

212

8.1 ЕЛЕМЕНТИ КОНЦЕПЦІЇ ООП................................................................................

212

8.2 ВІД СТРУКТУР ANSI С ДО КЛАСІВ С++. ......................................................

214

8.3 ОПИС ПРОТОКОЛУ КЛАСУ. ....................................................................................

217

ЗАВДАННЯ..............................................................................................................................

221

8.4 ДЕЯКІ ОСОБЛИВОСТI C++. .........................................................................

222

8.4.1 Коментарі...........................................................................................................

222

8.4.2 Прототипи функцій. .....................................................................................

222

8.4.3 Операція розширення області видимості. ......................................

223

8.4.4 Оголошення в операторах. ........................................................................

223

8.4.5 Перевантаження функцій. ........................................................................

224

8.4.6 Значення формальних параметрів по замовчуванню................

224

8.4.7 Посилання та вказівники. ...........................................................................

225

8.4.8 Специфікатор INLINE.................................................................................

229

8.4.9 Операції NEW та DELETE ...................................................................

229

8.4.10 Вказівник на void. ..........................................................................................

230

8.4.11 Зв’язування із збереженням типів ....................................................

230

8.4.12 Про структури та об’єднання. ...........................................................

231

ЗАВДАННЯ..............................................................................................................................

232

8.5 ФУНКЦІЇ-ЧЛЕНИ КЛАСУ. .............................................................................

232

8.5.1 Функції-члени в межах та за межами формального опису

 

класу. ....................................................................................................................................

232

8.5.2 Про вказівник this.............................................................................................

233

8.5.3 Перевантаження функцій-членів. Параметри по

 

замовчуванню. ................................................................................................................

234

ЗАВДАННЯ..............................................................................................................................

236

8.6 КОНСТРУКТОРИ ТА ДЕСТРУКТОРИ. ...................................................

237

8.6.1 Поняття про конструктори. ..................................................................

237

8.6.2 Деструктори......................................................................................................

240

8.6.3 Конструктор копіювання. ........................................................................

242

ЗАВДАННЯ..............................................................................................................................

243

8.7 ГЛОБАЛЬНІ ТА ЛОКАЛЬНІ ОБ’ЄКТИ. .................................................

244

Глобальні об’єкти. ......................................................................................................

244

Локальні об’єкти ........................................................................................................

245

Вказівники на об’єкти ..............................................................................................

245

Об’єкти-посилання .....................................................................................................

246

6

Об’єкти-результати функцій. ............................................................................

246

Масиви об’єктів ..........................................................................................................

246

ЗАВДАННЯ..............................................................................................................................

247

8.8 СТАТИЧНА ПАМ’ЯТЬ ТА КЛАСИ............................................................

248

ЗАВДАННЯ..............................................................................................................................

251

8.9 НАСЛІДУВАННЯ ..................................................................................................

252

8.9.1 Синтаксична реалізація наслідування ................................................

252

8.9.2 Правила доступу до полів даних ............................................................

253

8.9.3 Конструктори та деструктори в похідних класах...................

255

8.9.4 Використання заміщуючих функцій-членів.....................................

257

8.9.5 Похідні класи та вказівники. ....................................................................

259

8.9.6 Ієрархія типів.....................................................................................................

260

8.9.7 Множинне наслідування ..............................................................................

260

ЗАВДАННЯ..............................................................................................................................

263

8.10 ВIРТУАЛЬНI ФУНКЦIЇ ТА КЛАСИ ........................................................

264

8.10.1 Віртуальні функції. ......................................................................................

264

8.10.2 Чисті віртуальні функції. Абстрактні класи. ...........................

266

8.10.3 Віртуальні деструктори. ........................................................................

269

8.10.4 Посилання як засіб для реалізації поліморфізму .......................

270

8.10.5 Дещо про механізм віртуальних функцій.......................................

270

8.10.6 Віртуальні базові класи.............................................................................

272

8.10.6.1 Ієрархії класів та наслідування ...................................................

272

8.10.6.2 Віртуальні базові класи .....................................................................

273

8.10.6.3 Виклик конструкторів та віртуальні базові класи............

274

ЗАВДАННЯ..............................................................................................................................

276

8.11 ДРУЗІ ............................................................................................................................

277

8.11.1 Дружні класи..................................................................................................

277

8.11.2 Дружні функції...............................................................................................

279

ЗАВДАННЯ..............................................................................................................................

281

8.12 ПЕРЕВАНТАЖЕННЯ ОПЕРАЦІЙ............................................................

281

8.12.1 Перевантаження операцій. Загальний підхід.............................

281

8.12.2 Перетворення типів....................................................................................

284

8.12.3 Перевантаження деяких операцій.....................................................

287

8.12.3.1 Операція індексування масиву.....................................................

287

8.12.3.2 Перевантаження операції виклику функції..........................

289

8.12.3.3 Операція доступу до члена класу..............................................

291

8.12.3.4 Перевантаження операцій інкремента та декремента. ..

292

8.12.3.5 Перевантаження операцій управління пам’яттю

 

(NEW,DELETE). .......................................................................................................

293

7

 

8.12.3.6 Перевантаження операції присвоювання. ............................

294

ЗАВДАННЯ : ...........................................................................................................................

295

8.13 ШАБЛОНИ С++....................................................................................................

296

8.13.1 Функціональні шаблони .............................................................................

296

 

8.13.1.1 Визначення та використання шаблонів функцiй.............

296

 

8.13.1.2 Перевантаження шаблонiв функцiї. ..........................................

298

 

8.13.1.3 Cпецiалiзованi функцiї шаблона. ................................................

299

8.13.2 Шаблони класів. ............................................................................................

300

 

8.13.2.1 Визначення шаблонів класу ...........................................................

300

 

8.13.2.2 Константи та типи як параметри шаблону............................

301

 

8.13.2.3 Використання шаблонних класів ................................................

302

 

8.13.2.4 Спецiалiзацiя шаблонiв класу. ...................................................

303

ЗАВДАННЯ..............................................................................................................................

305

ДОДАТКОВІ ЗАВДАННЯ З С++ .....................................................................................

305

9 АВТОМАТНА ТЕХНОЛОГІЯ ПРОГРАМУВАННЯ...........................

313

9.1

ЛЕКСИЧНИЙ АНАЛІЗ. ................................................................................................

314

9.1.1 Формалізм лексичного аналізатора. ...................................................

314

9.1.2 Представлення в ЕОМ..................................................................................

315

9.2

ПРОГРАМУВАННЯ ЗА ДОПОМОГОЮ СКІНЧЕННИХ АВТОМАТІВ.........

316

9.2.1 Скінченний автомат як формалізм.....................................................

316

9.2.2 Основи конструювання програм з допомогою СА......................

318

Задачі для самостійної роботи..........................................................................

329

ДОДАТКИ ..............................................................................................................

331

1 ВВIД-ВИВIД С++ ...........................................................................................

331

1.1

СИСТЕМА ВВОДУ-ВИВОДУ С++. ........................................................................

331

1.2

ПЕРЕАДРЕСАЦІЯ ВВОДУ-ВИВОДУ......................................................................

337

1.3

РОЗШИРЕННЯ ПОТОКІВ ДЛЯ ТИПІВ КОРИCТУВАЧА ................................

337

1.4

ОПЕРАЦІЇ РОБОТИ З ПОТОКОМ ЯК ДРУЖНІ .................................................

339

1.5

ФОРМАТОВАНИЙ ВВІД-ВИВІД ..........................................................................

339

1.5.1 Ширина поля......................................................................................................

340

1.5.2 Заповнюючий символ......................................................................................

340

1.5.3 Кількість цифр дійсних чисел ..................................................................

341

1.5.4 Прапорці форматування.............................................................................

341

1.5.5 Маніпулятори.....................................................................................................

344

1.6

СТАН ПОТОКУ .............................................................................................................

345

1.7

ФАЙЛОВИЙ ВВІД-ВИВІД..........................................................................................

345

1.7.1 Конструктори файлових потокiв.........................................................

346

1.7.2 Вiдкриття файлу .............................................................................................

346

1.8

НЕФОРМАТОВАНИЙ ВВІД-ВИВІД ........................................................................

349

8

1.9 ДЕЯКІ ФУНКЦІЇ ВВОДУ-ВИВОДУ .........................................................................

350

1.10 ФОРМАТУВАННЯ В ПАМЯТІ..............................................................................

352

ЗАВДАННЯ ДЛЯ САМОСТІЙНОЇ РОБОТИ ..................................................................

354

2 УПРАВЛІННЯ ВИКЛЮЧЕННЯМИ .......................................................

355

2.2 РОБОТА З УПРАВЛІННЯМ ВИКЛЮЧЕННЯМИ МОВИ С++ ........................

355

2.2.1 Синтаксис основних конструкцій .........................................................

355

2.2.1.1 Використання try та сatch ...................................................................

356

2.2.1.2 Використання throw ...............................................................................

357

2.2.2 Тип виключення та конструктор копії..............................................

359

2.2.3 Пошук відповідного типу виключення ................................................

359

2.2.4 Використання terminate() та некеровані виключення.............

360

2.2.5 Робота з специфікаціями виключень ..................................................

361

2.2.6 Робота з непередбаченими виключеннями ......................................

361

2.2.7 Робота з конструкторами та виключеннями ..............................

362

2.2.8 Динамічні об’єкти ...........................................................................................

363

2.2.9 Передача значень з конструктора та деструктора..............

365

2.2.10 Робота з ієрархіями виключень ...........................................................

365

2.2.11 Робота з специфічними класами виключень................................

366

2.2.11.1 xmsg ...............................................................................................................

366

2.2.11.2 xalloc..............................................................................................................

367

2.3 СТРУКТУРНЕ УПРАВЛІННЯ ВИКЛЮЧЕННЯМИ .............................................

369

2.3.1 Використання кадрованого управління виключеннями

 

(_try/_except)....................................................................................................................

369

2.3.1.1 Синтаксис .....................................................................................................

369

2.3.1.2 Функція RaiseException() ....................................................................

369

2.3.1.3 Фільтруючий вираз .................................................................................

370

2.3.2 Використання завершуючих обробників

 

виключень(_try/_finally) ............................................................................................

371

ЗАВДАННЯ ДЛЯ САМОСТІЙНОЇ РОБОТИ ..................................................................

373

3 ДОВІДНИК ФУНКЦІЙ С ............................................................................

375

ЛІТЕРАТУРА. ..........................................................................................................

443

9

ВСТУП

Підвищення внутрішнього інтелекту ЕОМ - засіб їхнього вдосконалювання В.М.Глушков

Важливим етапом в розвитку технології програмування стало створення та досить широке поширення мови програмування С++. Мова програмування С++ зберігає основні типи даних, операції, синтаксис операторів мови С (про це свідчить сама назва мови). Водночас, це зовсім інша мова, яка ввела в практику програмування новий технологічний підхід - об'єктно-орієнтоване програмування. Введення в практику програмування об'єктно-орієн- тованої парадигми дозволяє значно підвищити рівень технології створення програмних засобів, скоротити затрати на розробку програм, їх повторне використання, розширити інтелектуальні можливості ЕОМ.

Великий внесок у створення даної парадигми внесли У.Далл та Б.Мюрхарг, які розробили в 60-х роках мову моделювання дискретних систем Сімула-67. Ця мова включила в себе базові концепції ООП. Велике значення у розвитку даного напряму мали роботи по розвитку концепції абстрактних типів даних Б.Лискова, Н.Вірта, Д.Парнаса та ін. Однак, найбільш повно та цілісно об'єктно-орієнтована парадигма була реалізована в мові Smalltalk-80, яка була розроблена в 70-ті роки в науковому центрі Раlо Аltо фірми Хеrох під керівництвом А.Гольдберга. По суті, Smalltalk-80 являв собою мову деякої абстрактної машини, яка мала об'єктно-орієнтовану пам'ять. Маніпулювання з елементами пам'яті (об'єктами) ґрунтувалось на використанні механізму повідомлень, які посилаються об'єктам. Крім того, ця абстрактна машина підтримувала графічно-орієнтований дружній інтерфейс з користувачем. Ця тріада мови Smalltalk-80 стала революційним поворотом в технології програмування. Використання об'єктів дозволило по-перше, конструювати адекватні інформаційні зображення реальних проблемних областей, використовуючи прийняті для цих областей поняття та семантичні знання, по-друге, створювати ідеальні абстрактні моделі реального світу , формально задаючи закони його існування, по-третє, надати можливість безпосереднього, прямого, немовного за формою маніпулювання семантичними сутностями середовища, що моделюється (тобто, по суті,

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]