УДК 004.4
ББК 32.973.26-018.2
Ф33
Ф33 Федоренко Ю. П.
Алгоритмы и программы на C++Builder. – М.: ДМК Пресс, 2010. – 544с.: ил.
ISBN 978-5-94074-607-2
В книге подробно рассмотрены синтаксис, семантика, техника процедурного
и объектноориентированного программирования на C++Builder. Язык C++ и ба
зовые алгоритмы обработки данных всех типов изучаются параллельно с визуаль
ным программированием. Книга будет также полезна тем, кто имеет определён
ный опыт в программировании, однако желает расширить и углубить свои
знания. Она может служить надёжной платформой для изучения и других языков
программирования, поскольку она основывается на парадигме разработки современ
ных приложений, к которой специалисты продвигались более пяти десятилетий.
Издание предназначено для студентов, преподавателей, инженеров, научных
сотрудников, лицеистов и старшеклассников, желающих самостоятельно изучить
C++Builder «с нуля».
К книге прилагается компактдиск, на котором записаны примеры программ
для среды С++ Builder 5 и C++ Builder 6.
УДК 004.4
ББК 32.973.26-018.2
Федоренко Юрий Петрович
Алгоритмы и программы на C++Builder
Главный редактор Мовчан Д. А.
dm@dmkpress.ru
Дизайн обложки Мовчан А. Г.
Подписано в печать 16.12.2009. Формат 70х100 1/16 .
Гарнитура «Петербург». Печать офсетная.
Усл. печ. л. 36. Тираж 1000 экз.
Webсайт издательства: www.dmkpress.ru
Internetмагазин: www.alianskniga.ru
Корректор Синяева Г. И.
Верстка Паранская Н. В.
© Федоренко Ю. П., 2010
ISBN 9785940746072
© Оформление, ДМК Пресс, 2010
Стр.3
Содержание
Благодарности....................................................... 11
Предисловие ......................................................... 12
Урок 1. Первая программа ....................................... 20
1.1. Внешний вид и назначение приложения Умножитель ......................... 20
1.2. Знакомство с визуальным программированием ................................. 21
1.2.1. Форма ......................................................................................... 22
1.2.2. Тип объекта ................................................................................. 23
1.2.3. Правильный идентификатор ........................................................ 24
1.2.4. Поле ввода .................................................................................. 25
1.2.5. Поле вывода ................................................................................ 27
1.2.6. Командная кнопка ....................................................................... 28
1.3. Разработка кода программы ............................................................... 28
1.3.1 Что такое алгоритм ....................................................................... 28
1.3.2. Алгоритм программы .................................................................. 29
1.3.3. Способы порождение заготовки функции ................................... 30
1.3.4. Заголовок функции ...................................................................... 30
1.3.5. Задание переменных ................................................................... 32
1.3.6. Однострочный комментарий ....................................................... 33
1.3.7. Инициализация переменных ....................................................... 33
1.3.8. Конфигурация компьютера .......................................................... 34
1.3.9. Оператор присваивания .............................................................. 34
1.3.10. Текстовая константа .................................................................. 35
1.3.11. Многострочный комментарий и преобразование текстовых
переменных в переменные вещественного типа ................................... 35
1.3.12. Преобразование переменных вещественного типа в переменные
текстового типа..................................................................................... 36
1.3.13. Форматирование текста программы ......................................... 37
1.4. Сохранение и отладка ......................................................................... 38
1.4.1. Сохранение проекта .................................................................... 38
1.4.2. Компиляция и сборка проекта ..................................................... 39
1.4.3. Предупреждения и подсказки ...................................................... 43
1.4.4. Запуск проекта ............................................................................ 43
1.5. Задача для программирования ........................................................... 44
1.6. Вариант программного решения ......................................................... 45
Стр.4
4
Содержание
Урок 2. Модернизация программы ............................ 47
2.1. Открытие проекта ............................................................................... 47
2.2. Округление результата ........................................................................ 47
Приложение 2.1. Возможности функции FloatToStrF() ........................... 48
2.3. Борьба с ошибками пользователя ....................................................... 49
2.3.1. Исключительные ситуации .......................................................... 49
2.3.2. Молчаливые исключения ............................................................. 54
2.4. Улучшение интерфейса ....................................................................... 55
2.4.1. Выбор пиктограммы для приложения .......................................... 55
2.4.2. Местоположение интерфейса ..................................................... 55
2.4.3. Плавное перетаскивание и протягивание .................................... 55
2.4.4. Горизонтальное и вертикальное выравнивание ........................... 56
2.4.5. Выравнивание по сетке ............................................................... 57
2.4.6. Уравнивание габаритов ............................................................... 58
2.4.7. Одинаковые интервалы ............................................................... 59
2.4.8. Симметрирование объектов относительно центра ...................... 59
2.4.9. Порядок перехода между объектами управления ........................ 60
2.5. Подробнее об отладке программы ...................................................... 60
2.5.1. Предупреждения и подсказки ...................................................... 60
2.5.2. Точки остановки и всплывающая подсказка ................................. 62
2.5.3. Пошаговое выполнение программы ............................................ 64
2.6. Полноценный исполняемый файл ....................................................... 65
2.7. Задача для программирования ........................................................... 68
2.8. Вариант программного решения ......................................................... 68
Урок 3. Операции, математические функции и операторы
выбора ................................................................. 70
3.1. Использование математических функций и констант .......................... 70
3.1.1. Условие задачи и интерфейс программы Дальность .................. 70
3.1.2. Препроцессорная обработка ....................................................... 71
3.1.3. Файл реализации ........................................................................ 72
3.1.4. Описание программы .................................................................. 72
3.2. Основные стандартные математические функции .............................. 74
3.3. Операции и порядок их выполнения .................................................... 76
3.3.1. Операции отношения .................................................................. 76
3.3.2. Круглые скобки ............................................................................ 76
3.3.3. Логические операции .................................................................. 77
3.3.4. Арифметические операции ......................................................... 78
3.3.5. Операции присваивания.............................................................. 79
3.3.6. Порядок вычислений ................................................................... 80
3.4. Условный оператор if ........................................................................ 80
3.5. Оператор множественного выбора switch .......................................... 85
3.6. Дополнительные возможности командной кнопки .............................. 88
3.7. Задача для программирования ........................................................... 89
3.8. Вариант решения задачи ..................................................................... 89
Стр.5
Содержание
5
Урок 4. Все о циклах................................................ 90
4.1. Зачем нужны циклы? ........................................................................... 90
4.2. Оператор цикла for ........................................................................... 96
4.3. Оператор цикла while .......................................................................103
4.4. Оператор цикла do_while .................................................................. 105
4.5. Вложенные циклы ............................................................................. 106
4.6. Задачи для программирования ......................................................... 112
4.7. Варианты решений задач .................................................................. 113
Урок 5. Графики зависимостей ............................... 117
5.1. Построение одномерных зависимостей ............................................ 117
5.2. Построение серии одномерных графиков ......................................... 127
5.3. Модернизируем интерфейс .............................................................. 130
5.3.1. Кнопка для выхода из приложения ............................................ 130
5.3.2. Показ стандартних мультфильмов ............................................. 132
5.3.3. Стандартне кнопки Windows .....................................................134
5.3.4. Размещение картинок на кнопках .............................................. 135
5.3.5. Размер формы и граничные пиктограммы ................................. 135
5.4. Задачи для программирования ......................................................... 136
5.5. Варианты решений задач .................................................................. 137
Урок 6. Одномерные массивы ................................ 139
6.1. Зачем нужны массивы? ..................................................................... 139
6.1.1. Интерфейс приложения............................................................. 140
6.1.2. Задание массива ....................................................................... 141
6.1.3. Суммирование элементов массива ........................................... 143
6.1.4. Определение экстремума ......................................................... 144
6.1.5. Счетчик ...................................................................................... 145
6.1.6. Функция PyskClick в законченном виде ...................................... 146
6.1.7. Компактный вариант функции PyskClick ....................................147
6.1.8. Общие определения .................................................................. 148
6.1.9. Глобальные переменные и константы ........................................ 149
6.1.10. Страж кода .............................................................................. 150
6.2. Метод линейной сортировки ............................................................. 152
6.2.1. Сущность метода....................................................................... 152
6.2.2. Алгоритм метода ....................................................................... 153
6.2.3. Ручная трассировка алгоритма .................................................. 154
6.2.4. Иллюстрация метода ................................................................. 156
6.3. Сортировка методом пузырька..................................................... 159
6.4. Другие методы упорядочивания элементов массива ........................ 162
6.4.1. Применение трёх массивов ....................................................... 162
6.4.2. Применение одного массива ..................................................... 163
6.4.3. Упорядочивание массива методом Ларионова ......................... 166
6.5. Схемы алгоритмов ............................................................................ 167
6.6. Задачи для программирования ......................................................... 172
6.7. Варианты решений задач .................................................................. 172
Стр.6
6
Содержание
Урок 7. Многомерные массивы ............................... 178
7.1. Примеры многомерных массивов ..................................................... 178
7.2. Описание многомерных массивов .................................................... 179
7.3. Доступ к элементам массива ............................................................ 181
7.4. Главная и побочная диагонали........................................................... 182
7.5. Примеры обработки матриц .............................................................. 183
7.6. Задачи для программирования ......................................................... 189
7.7. Варианты решений задач .................................................................. 189
Урок 8. Функции ................................................... 194
8.1. Важный инструмент структурирования программ ............................. 194
8.2. Что уже известно о функциях ............................................................ 195
8.3. Описание и объявление функций ...................................................... 196
8.3.1. Тип возвращаемых значений ..................................................... 196
8.3.2. Если функция не имеет параметров .......................................... 198
8.3.3. Прототип функции ..................................................................... 198
8.3.4. Переменное число параметров функции ................................... 199
8.3.5. Параметры со значениями по умолчанию.................................. 200
8.3.6. Чем функции отличаются от программ ...................................... 200
8.3.7. Операция расширения области видимости ............................... 200
8.3.8. Выход из функции...................................................................... 201
8.3.9. Запрет и разрешение доступа к функции .................................. 201
8.4.Различные способы передачи параметров в функции........................ 202
8.4.1. Передача параметра по значению ............................................. 202
8.4.2. Передача параметра по ссылке ................................................. 203
8.4.3. Передача параметра по адресу ................................................. 204
8.4.4. Применение спецификатора const в ссылочных параметрах ..... 205
8.4.5. Применение спецификатора const в параметрахуказателях .... 205
8.5. Перегрузка функций .......................................................................... 206
8.6.Шаблоны функций ............................................................................. 207
8.6.1. Параметры одинакового типа .................................................... 208
8.6.2. Параметры разного типа ........................................................... 208
8.6.3. Параметры разного формального типа и конкретного типа ....... 208
8.6.4. Необходимость применения всех типов объявленных
параметров ......................................................................................... 209
8.6.5. Другие возможности и ограничения шаблонов.......................... 209
8.6.6. Пример практического применения шаблона ............................ 210
8.7. Иллюстрация применения пользовательских функций ...................... 212
8.8. Задача для программирования ......................................................... 219
8.9. Вариант решения задачи ................................................................... 219
Урок 9. Файлы ..................................................... 224
9.1. Назначения файлов ........................................................................... 224
9.1.1. Устройства для долговременного хранения информации.
История вопроса ................................................................................. 224
9.1.2. Что называется файлом............................................................. 225
Стр.7
Содержание
7
9.1.3. Что содержится в файлах .......................................................... 226
9.1.4. Типы файлов .............................................................................. 227
9.1.5. Работа с файлами на физическом уровне ................................. 227
9.2. Простые приложения с текстовыми файлами ................................... 229
9.2.1. Многострочные окна редактирования Memo и RichEdit ..............229
9.2.2. Невизуальный объект типа TStringList .......................................231
9.3. Обработка массивов в текстовых файлах .......................................... 234
9.3.1. Чтение из файла и запись в файл одномерного массива ........... 234
9.3.2. Чтение из файла и запись в файл двумерных массивов ............. 236
9.4. Двоичные файлы ............................................................................... 240
9.4.1. Простое приложение с двоичным файлом ................................. 243
9.4.2. Одномерный массив в двоичном файле .................................... 243
9.4.3. Матрица в двоичном файле ....................................................... 244
9.4.4. Приложение Квадрат числа ...................................................... 245
9.5. Улучаем интерфейс приложения ....................................................... 247
9.5.1. Создаём меню ........................................................................... 248
9.5.2. Создаём горячие клавиши ......................................................... 251
9.5.3. Создаём кнопки быстрого доступа ............................................ 251
9.6. Задачи для программирования ......................................................... 256
9.7. Варианты решений задач .................................................................. 256
Урок 10. Указатели и динамические переменные....... 261
10.1. Вводные замечания и основные определения................................. 261
10.2. Иллюстрация применения указателей............................................. 265
10.3. Указатели на различные типы данных.............................................. 266
10.3.1. Виды указателей...................................................................... 266
10.3.2. Операции с однотипными и разнотипными указателями ......... 267
10.3.3. Указатель на указатель ............................................................ 268
10.3.4. Константный указатель на константные данные ...................... 269
10.3.5. Неконстантый указатель на константные данные..................... 269
10.3.6. Константный указатель на неконстантные данные ................... 270
10.4. Адресная арифметика с массивами ................................................ 270
10.5. Адресная арифметика с указателями на массивы ........................... 272
10.6. Массивы указателей ....................................................................... 274
10.7. Динамические массивы................................................................... 279
10.7.1. Одномерные динамические массивы ...................................... 279
10.7.2. Двумерные динамические массивы......................................... 282
10.8. Указатели на функции ..................................................................... 285
10.9. Функции, возвращающие указатель на массив ............................... 289
10.10. Важная рекомендация ................................................................... 290
10.11. Задачи для программирования ..................................................... 291
10.12. Варианты решений задач .............................................................. 291
Урок 11. Ссылки ................................................... 294
11.1. Основные свойства ......................................................................... 294
11.2. Использование модификатора const ..............................................297
Стр.8
8
Содержание
11.3. Ссылка на функцию ......................................................................... 297
11.4. Функции, возвращающие ссылку .................................................... 299
11.5. Ссылки на объекты динамических переменных ............................... 300
11.6. Осваиваем новые объекты интерфейса .......................................... 301
11.6.1. Переключатели ........................................................................ 301
11.6.2. Индикаторы ............................................................................. 304
11.6.3. Диалоговое окно ..................................................................... 307
11.6.4. Диаграммы длительных процессов ......................................... 310
11.6.5. Непослушная кнопка ................................................................ 315
11.6.6. Модальные и немодальные формы.......................................... 316
11.7. Задачи для программирования ....................................................... 326
11.8. Варианты решений задач ................................................................ 326
Урок 12. Символы и строки .................................... 329
12.1. Символьные переменные ................................................................ 329
12.1.1. Перевод символов DOS в символы Windows ............................331
12.1.2. Перевод символов Windows в символы DOS ............................333
12.2. Массивы символов .......................................................................... 335
12.2.1. Задание и инициализация ....................................................... 335
12.2.2. Функции для обработки ........................................................... 336
12.3. Переменные типа String .................................................................339
12.3.1. Сравнение строк ...................................................................... 342
12.3.2. Стандартные функции для обработки строк ............................ 343
12.3.3. Иллюстрация обработки строк ................................................ 347
12.4. Задачи для программирования ....................................................... 356
12.5. Варианты решений задач ................................................................ 356
Урок 13. Перечисления, множества, объединения и
структуры ........................................................... 363
13.1. Перечислимый тип переменных ...................................................... 363
13.2. Множества ...................................................................................... 365
13.2.1. Операции над однотипными множествами .............................. 368
13.2.2. Внутреннее представление множеств ..................................... 370
13.2.3. Пример применения множеств ................................................ 372
13.3. Объединения ................................................................................... 374
13.4. Структуры........................................................................................ 375
13.4.1. Простые структуры .................................................................. 375
13.4.2. Вложенные структуры .............................................................. 378
13.4.3. Массивы структур .................................................................... 379
13.4.4. Структуры с вариантными полями ........................................... 380
13.4.5. Методы структур ..................................................................... 381
13.4.6. Пример обработки базы данных .............................................. 382
13.4.7. Наследование структур ........................................................... 390
13.4.8. Защита полей и методов структур ........................................... 392
13.4.9. Двунаправленный список структур .......................................... 394
Стр.9
Содержание
9
13.5. Задачи для программирования ....................................................... 405
13.6. Варианты решений задач ................................................................ 405
Урок 14. Классы ................................................... 414
14.1. Вводные замечания ......................................................................... 414
14.2. Инкапсуляция и наследование ........................................................ 415
14.3. Новый вариант приложения ............................................................ 422
14.4. Полиморфизм ................................................................................. 425
14.4.1 Совместимость объектных типов.............................................. 425
14.4.2. Полиморфизм, виртуальные методы, раннее и позднее
связывание ......................................................................................... 426
14.4.3. Чисто виртуальные методы, абстрактные классы и
полиморфные функции ....................................................................... 429
14.4.4. Применение виртуальных и чисто виртуальных методов,
правила их описания и использования ................................................ 429
14.4.5. Преимущества и недостатки виртуальных методов ................. 431
14.5. Клиенты и дружественные функции класса ..................................... 431
14.6. Статические поля и статические константы класса ......................... 432
14.7. Конструкторы класса ....................................................................... 435
14.7.1. Конструкторы простых классов ............................................... 436
14.7.2. Конструкторы производных классов ........................................ 439
14.7.3. Свойства конструкторов и правила их разработки................... 443
14.8. Деструктор класса........................................................................... 444
14.8.1. Обычные деструкторы ............................................................. 444
14.8.2. Виртуальные деструкторы ....................................................... 448
14.8.3. Свойства деструкторов и правила их разработки .................... 451
14.9. Создание копий объектов................................................................ 452
14.9.1. Побитовое копирование .......................................................... 452
14.9.2. Запрет неявного преобразования типов .................................. 454
14.9.3. Конструктор копирования ........................................................ 454
14.10. Указатель this ..............................................................................457
14.10.1. Назначения и возможности указателя this .............................457
14.10.2. Программное порождение визуальных объектов ................... 459
14.11. Локальные классы ......................................................................... 463
14.12. Шаблоны классов .......................................................................... 463
14.13. Отличие структур и объединений от классов ................................. 467
14.14. Задача для программирования ..................................................... 469
14.15. Вариант решения задачи ............................................................... 469
Урок 15. Графика и мультипликация ........................ 472
15.1. Основные определения ................................................................... 472
15.2. Логотип приложения ....................................................................... 474
15.3. Приложение для просмотра графических файлов ........................... 477
15.4. Типы графических файлов ............................................................... 478
15.5. Объекты для хранения изображений, открытие, сохранение и
переименование файлов ......................................................................... 480
Стр.10
10
Содержание
15.6. Графические примитивы и инструменты для их построения ........... 484
15.6.1. Карандаш и кисть .................................................................... 484
15.6.2. Прямоугольник ........................................................................ 486
15.6.3. Эллипс ..................................................................................... 488
15.6.4. Дуга ......................................................................................... 489
15.6.5. Сектор ..................................................................................... 489
15.6.6. Линия ...................................................................................... 490
15.6.7. Ломаная линия ........................................................................ 491
15.6.8. Многоугольник ........................................................................ 492
15.6.9. Текст ........................................................................................ 493
15.7. Приложение Пособие .................................................................... 495
15.8. Мультипликация с использованием графических примитивов ........ 500
15.9. Мультипликация с применением битовых образов .......................... 504
15.9.1. Использование файлов типа bmp............................................ 504
15.9.2. Применение ресурсов программы .......................................... 508
15.10. Разработка мультфильма Аквариум ..............................................513
15.11. Вариант мультфильма Аквариум, разработанный на основе
применения пользовательских классов ................................................... 520
15.12. Задачи для программирования ..................................................... 524
15.13. Варианты решения задач .............................................................. 525
Урок 16. Запуск чужих программ из вашего
приложения......................................................... 527
16.1. Технология OLE.............................................................................. 527
16.1.1. Знакомство на примере программы ........................................ 528
16.1.2. Программное внедрение OLEобъектов .................................. 535
16.1.3. Быстрый способ внедрения и связывания объектов на основе
существующих документов ................................................................. 536
16.1.4. Сохранение документов в исходных форматах ........................ 537
16.1.5. Развитие технологии OLE .......................................................538
16.2. Задача для программирования ....................................................... 540
16.3. Вариант решения задачи ................................................................. 540
Список литературы ............................................... 541
Алфавитный указатель компонентов
библиотеки VCL.................................................... 542
Алфавитный указатель функций библиотек
C++Builder, API Windows, деректив компилятору, типов
данных, операций и других ключевых слов ............... 543
Стр.11