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

[ Миронченко ] Императивное и объектно-ориентированное програмирование на Turbo Pascal и Delphi

.pdf
Скачиваний:
68
Добавлен:
25.04.2014
Размер:
3.16 Mб
Скачать

Ⱥ. ɋ. Ɇɢɪɨɧɱɟɧɤɨ

ɂɦɩɟɪ ɬɢɜɧɨɟ ɢ ɨɛɴɟɤɬɧɨ-ɨɪɢɟɧɬɢɪɨɜ ɧɧɨɟ ɩɪɨɝɪ ɦɦɢɪɨɜ ɧɢɟ

ɧ Turbo Pascal ɢ Delphi

Ƚɥɭɛɨɤɨɟ ɩɨɝɪɭɠɟɧɢɟ

ȼɆȼ

Ɉɞɟɫɫ

2007

Ʉ 32.973.2-018

Ɇ642

ɍȾɄ 004.438

Ɋɟɰɟɧɡɟɧɬ

Ɇɡɭɪɨɤ ɂ.ȿ., ɤ ɧɞɢɞ ɬ ɬɟɯɧɢɱɟɫɤɢɯ ɧ ɭɤ, ɞɨɰɟɧɬ ɤ ɮɟɞɪɵ ɦ ɬɟɦ ɬɢɱɟɫɤɨɝɨ ɨɛɟɫɩɟɱɟɧɢɹ ɤɨɦɩɶɸɬɟɪɧɵɯ ɫɢɫɬɟɦ Ɉɞɟɫɫɤɨɝɨ ɧ ɰɢɨɧ ɥɶɧɨɝɨ ɭɧɢɜɟɪɫɢɬɟɬ ɢɦ. ɂ.ɂ. Ɇɟɱɧɢɤɨɜ

ɂɦɩ ɪ ɬɢɜɧɨ ɢ ɨɛɴ ɤɬɧɨ-ɨɪɢ ɧɬɢɪɨɜ ɧɧɨ ɩɪɨɝɪ ɦɦɢɪɨɜ ɧɢ ɧ Turbo Pascal ɢ Delphi /

Ⱥ.ɋ. Ɇɢɪɨɧɱɟɧɤɨ – Ɉɞɟɫɫ : ȼɆȼ, 2007. – 408 ɫ.: ɢɥ.

ISBN 978-966-413-039-1

ȼ ɤɧɢɝɟ ɩɨɫɥɟɞɨɜɚɬɟɥɶɧɨ ɢɡɥɚɝɚɸɬɫɹ ɤɨɧɰɟɩɰɢɢ ɢɦɩɟɪɚɬɢɜɧɨɝɨ ɢ ɨɛɴɟɤɬɧɨɨɪɢɟɧɬɢɪɨɜɚɧɧɨɝɨ ɩɪɨɝɪɚɦɦɢɪɨɜɚɧɢɹ ɢ ɪɟɚɥɢɡɚɰɢɹ ɷɬɢɯ ɩɪɢɧɰɢɩɨɜ ɜ ɹɡɵɤɚɯ Turbo Pascal ɢ Delphi. Ⱥɧɚɥɢɡɢɪɭɸɬɫɹ ɧɟɞɨɫɬɚɬɤɢ ɨɛɴɟɤɬɧɨ-ɨɪɢɟɧɬɢɪɨɜɚɧɧɨɝɨ ɩɪɨɝɪɚɦɦɢɪɨɜɚɧɢɹ ɢ ɩɪɟɞɥɚɝɚɟɬɫɹ ɦɟɬɨɞ ɞɥɹ ɢɯ ɭɫɬɪɚɧɟɧɢɹ.

ɍɱɟɛɧɢɤ ɩɨɞɯɨɞɢɬ ɤɚɤ ɞɥɹ ɡɚɧɹɬɢɣ ɜ ɭɱɟɛɧɵɯ ɡɚɜɟɞɟɧɢɹɯ, ɬɚɤ ɢ ɞɥɹ ɫɚɦɨɫɬɨɹɬɟɥɶɧɨɝɨ ɢɡɭɱɟɧɢɹ ɹɡɵɤɨɜ Turbo Pascal ɢ Delphi. ȼ ɭɱɟɛɧɢɤɟ ɛɨɥɟɟ 140 ɩɪɢɦɟɪɨɜ ɩɪɨɝɪɚɦɦ ɢ ɨɤɨɥɨ 210 ɡɚɞɚɱ ɩɨ ɩɪɨɝɪɚɦɦɢɪɨɜɚɧɢɸ ɢ ɦɚɬɟɦɚɬɢɤɟ ɞɥɹ ɫɚɦɨɫɬɨɹɬɟɥɶɧɨɝɨ ɪɟɲɟɧɢɹ.

Ⱦɥɹ ɫɬɭɞɟɧɬɨɜ ɜɭɡɨɜ, ɭɱɚɳɢɯɫɹ ɫɬɚɪɲɢɯ ɤɥɚɫɫɨɜ ɲɤɨɥ ɢ ɥɢɰɟɟɜ ɫ ɭɝɥɭɛɥɟɧɧɵɦ ɢɡɭɱɟɧɢɟɦ ɢɧɮɨɪɦɚɬɢɤɢ ɢ ɮɢɡɢɤɨ-ɦɚɬɟɦɚɬɢɱɟɫɤɢɯ ɞɢɫɰɢɩɥɢɧ, ɚ ɬɚɤɠɟ ɞɥɹ ɜɫɟɯ ɢɧɬɟɪɟɫɭɸɳɢɯɫɹ ɢɧɮɨɪɦɚɬɢɤɨɣ ɢ ɩɪɨɝɪɚɦɦɢɪɨɜɚɧɢɟɦ.

Ɇ 2404010000 2007

© Ɇɢɪɨɧɱɟɧɤɨ Ⱥ.ɋ., 2007

 

3

Краткое содержание

 

Предисловие ......................................................................................................

10

Благодарности ...........................…….................................................................

11

Список условных обозначений ...........................................................................

12

Часть 1: Императивное программирование ........................................................

13

Глава 0. Программистское введение ........................................................

13

Глава 1. Математическое введение .........................................................

24

Глава 2. Первые шаги ..............................................................................

41

Глава 3. Использование оператора if ........................................................

52

Глава 4. Операторы циклов .....................................................................

66

Глава 5. Несколько операторов на закуску ..............................................

81

Глава 6. Массивы .....................................................................................

89

Глава 7. Подпрограммы ...........................................................................

106

Проект 1. Длинная арифметика ................................................................

126

Глава 8. Рекурсия .....................................................................................

130

Глава 9. Модули и записи ........................................................................

154

Глава 10. Матрицы, множества и перечисления ......................................

165

Проект 2: Теория голосования .................................................................

184

Глава 11: Символы и строки ...................................................................

189

Глава 12: Файлы ......................................................................................

196

Проект 3: Эволюционно стабильные стратегии ........................................

207

Глава 13. Динамическая память ..............................................................

213

Проект 4. Поиск сходных слов ................................................................

244

Глава 14. Выведение ................................................................................

247

Часть 2: Объектно-ориентированное программирование .....................................

256

Предисловие ко 2-й части .................................................................................

256

Глава 15. Основы Delphi .........................................................................

257

Глава 16. Объектно-ориентированное программирование ........................

278

Проект 5: Криптография .........................................................................

320

Глава 17. Визуальное программирование ................................................

323

Глава 18. Графика ...................................................................................

351

Проект 6: Беовульф и Нибелунги ............................................................

368

Глава 19. Проблемы ООП. Везенспрограммирование ..............................

372

Напутствие ..............................................................................................

387

Решения и ответы ...................................................................................

388

Список литературы .................................................................................

403

4

Полное содержание

Предисловие

..............................................................................………..

10

Благодарности

…….........…........................…........................................

11

Список условных обозначений ................................................................

12

Часть 1: Императивное программирование ...................................................

13

Глава 0. Программистское введение ........................................................

13

0.1. Какие бывают языки программирования .................................

13

0.2. Устройство ПК ..............................................................……..

18

0.3. Классификация языков программирования ..............................

20

0.4. Как ПК понимает языки программирования .............................

22

Глава 1. Математическое введение .........................................................

24

1.1. Множества ..............................................................…………..

24

1.2. Операции над множествами .....................................................

24

1.3.Числа .............................................................………………… 25

1.4.Системы счисления ..............................................................… 30

1.5. Арифметические действия в двоичной системе счисления …...

31

1.6. Представление двоичных чисел в ПК

………………………….. 32

1.7. Шестнадцатеричная система счисления

………………………... 34

1.8. Более общая точка зрения на системы счисления

……………... 34

1.9. Фибоначчиева система счисления

……………………………… 35

1.10. Метод математической индукции

…………………………….. 37

1.11. Логарифмы …………………..................................................

38

1.12. Последовательности и прогрессии

…………………………….. 38

Задачи

..............................................................……………………

39

Глава 2. Первые шаги ..............................................................…………..

41

2.1. Базовые концепции процедурного программирования ..………

41

2.2. Что нам понадобится для работы

 

43

2.3. Первые программы ..............................................................…

43

2.4. Ввод значений с клавиатуры. Процедура Readln(x)

…………...

49

2.5. Несколько заключительных слов

………………………………. 50

Задачи

..............................................................……………………

50

Глава 3. Использование оператора if ........................................................

 

52

3.1. Немного справочной информации

……………………………… 52

3.2. Структура программы в Turbo Pascal

.…………………………. 53

3.3.Числовые типы данных …………………………………………. 54

3.4.Ограничены ли вычислительные возможности компьютера? ... 55

3.5. Условный оператор .................................................................

 

56

3.6. Условный оператор с ветвью else

................................………..

59

3.7. Делимость чисел. Операции div, mod .................................…..

59

3.8. Решение линейного уравнения

.................................…………

60

3.9.Тип Boolean .................................……………………………… 62

3.10.Логические операции .................................………………….. 62

Задачи ..................................................................…………………

65

Глава 4. Операторы циклов .................................…………………………

66

4.1.Цикл for …………………………………………………………… 66

4.2.Вычисление факториала .................................………………... 67

5

4.3.

Циклы while и repeat .................................……………………..

69

4.4.

Нахождение НОК и НОД 2-х чисел .................................…….

70

4.5.Процедуры break и continue .................................…………….. 74

4.6.Проверка чисел на простоту .................................…………….. 75

4.7.Как компьютер может вычислить значение функции? ……….. 76

Задачи ..................................………………………………………...

78

Глава 5. Несколько операторов на закуску ………...................................

81

5.1.Оператор case .................................……………………………. 81

5.2.Символьный тип .................................………………………… 82

5.3. Работа с клавиатурой .................................……………………

83

5.4. Генератор псевдослучайных чисел .................................…….

85

5.5. Директивы компилятора .................…...............………………

86

5.6. Что мы уже знаем о структурном программировании ..............

87

Глава 6. Массивы .................................…………………………………….

89

6.1.Что такое массив? .................................……………………….. 89

6.2.Примеры работы с массивами .................................………….. 90

6.3.Моделирование многочленов .................................………….. 92

6.4.Поиск в массиве .................................…………………………. 96

6.5.Сортировка массива .................................…………………….. 98

6.6. Сортировка методом пузырька (обмена) ..............................… 98

6.7.Сортировка выбором .................................…………………… 100

6.8.Сортировка вставками .................................………………….. 101

6.9. Сравнение простейших алгоритмов сортировки ......................

102

Задачи

.................................…………………………………………

104

Глава 7. Подпрограммы .................................……………………………..

106

7.1. Описание подпрограмм

.................................………………….

106

7.2. Передача массивов в подпрограммы

.................................……

109

7.3. Параметры подпрограмм

.................................………………..

111

7.4. Локальные и глобальные переменные

.................................…..

115

7.5. Открытые параметры-массивы .................................…………

115

7.6. Совместимость и приведение типов

.................................……

116

7.7. Бестиповые ссылки .................................………………………

118

7.8. Процедурный и функциональный типы ...................................

121

Задачи

.................................…………………………………………

124

Проект 1. Длинная арифметика .................................……………………..

126

Глава 8. Рекурсия .................................…………………………………….

130

8.1.Рекурсия в биологии .................................…………………….. 130

8.2.Рекурсия в литературе .................................………………….. 130

8.3.Рекурсия в математике .................................………………….. 131

8.4.Зачем нужна рекурсия в программировании? ........................... 132

8.5.Алгоритм Евклида .................................……………………….. 134

8.6. Вычисление натуральной степени числа ..............................…

135

8.7. Приближенное решение уравнения методом бинарного деления

135

8.8.Рекурсия contra Итерация .................................………………. 138

8.9.Быстрая сортировка .................................……………………… 141

8.10.Генерирование перестановок .................................………….. 143

8.11.Переборные алгоритмы .................................……………….. 145

6

8.12. Косвенная рекурсия .................................……………………

147

8.13. В чем итерация выигрывает у рекурсии .................................

150

8.14. Рекурсия в LISP .................................…………………………

150

8.15. Сопрограммы .................................…………………………...

151

Задачи .................................…………………………………………

152

Глава 9. Модули и записи .................................…………………………...

154

9.1.Модули и их структура .................................…………………. 154

9.2.Взаимодействие модулей .................................………………. 158

9.3.Тип Запись .................................……………………………….. 159

9.4.Оператор with .................................……………………………. 162

9.5.Записи с вариантами .................................…………………….. 162

Задачи .................................…………………………………………

163

Глава 10. Матрицы, множества и перечисления .................................…..

165

10.1. Матрицы .................................…………………………………

165

10.2. Обобщение процедур работы с матрицами .............................

167

10.3.Матрицы в математике ……………….................................... 170

10.4.Действия над матрицами .................................………………. 171

10.5.Множества ………………………………………………………. 173

10.6.Сортировка подсчетом .................................…………………. 174

10.7.Перечисляемый тип .................................…………………… 176

10.8.Магические квадраты .................................………………….. 178

Задачи .................................…………………………………………

181

Проект 2: Теория голосования .................................……………………..

184

Глава 11: Символы и строки .................................………………………..

189

11.1.Массивы символов .................................…………………….. 189

11.2.Тип String .................................……………………………….. 189 Задачи .................................………………………………………… 195

Глава 12: Файлы .................................……………………………………...

196

12.1. Логические и физические файлы .................................……...

196

12.2.Открытие и закрытие файлов .................................………….. 196

12.3.Текстовые файлы .................................……………………….. 197

12.4.Типизированные файлы .................................………………. 198

12.5. Последовательный и прямой доступ к файлам ......................

199

12.6.Буфер ввода/вывода .................................…………………… 200

12.7.Бестиповые файлы .................................…………………….. 201

12.8. О количестве обращений к файлу

.................................…….

203

Задачи .................................…………………………………………

206

Проект 3: Эволюционно стабильные стратегии

.................................……

207

1. Постановка задачи ............................…………………………….

207

2. Моделирование жизни популяции ..............................…………..

208

Глава 13. Динамическая память .................................……………………

213

13.1. Структура памяти, доступной программе .............................

213

13.2. Использование бестиповых указателей .................................

216

13.3. Указатель Nil .................................…………………………….

219

13.4. Обобщенная сортировка массива

.................................……...

220

13.5. Указатели и ссылки .................................……………………..

223

13.6. Динамические структуры данных

.................................…….

223

7

13.7.Стеки .................................……………………………………. 224

13.8.Однонаправленные списки .....................…..........…………… 227

13.9.Кольцевые списки .................................……………………… 230

13.10.Характеристика списков .................................……………… 233

13.11.Деревья .................................………………………………… 233

13.12.Разбор формулы .................................……………………….. 234

13.13.Сортировка с помощью дерева .................................………. 239

13.14.Характеристика деревьев .................................…………….. 242

Задачи .................................…………………………………………

242

Проект 4. Поиск сходных слов .................................……………………..

244

Глава 14. Выведение .................................…………………………………

247

14.1. Программа и модульное программирование ...........................

247

14.2. Простейший язык программирования .................................…

248

14.3. Все ли могут алгоритмы? .................................………………

250

14.4. Простейший модульный язык программирования .................

252

14.5.Взаимодействие с операционной системой …………………… 252

14.6.Загрузка ОС .................................…………………………….. 255

Часть 2: Объектно-ориентированное программирование ……………………. 256

Предисловие ко 2-й части .................................…………………………...

256

Глава 15. Основы Delphi

.................................…………………………….

257

15.1. Среда Delphi

.................................…………………………….

257

15.2. Консольное приложение в Delphi

.................................……...

258

15.3. Изменения в Delphi (по сравнению с ТР) ................................

259

15.4. Работа с динамической памятью

.................................……...

265

15.5.Использование диалогов .................................………………. 269

15.6.Работа с файлами .................................………………………. 270

15.7.

Файлы, связанные с проектом .................................…………

273

15.8.

Динамически подключаемые библиотеки (DLL) .....................

274

15.9.Подключение библиотеки .................................……………… 275

15.10.Использование модулей в DLL .................................………. 277

15.11.Что нам дает DLL? .................................…………………… 277

Глава 16. Объектно-ориентированное программирование ……………….. 278

16.1.Модульный подход и ООП .................................…………….. 278

16.2.Как объединить данные с подпрограммами средствами процедурного программирования .................................…………… 278

16.3. Объявление класса. Способы доступа к элементам класса ….

280

16.4. Конструкторы и деструкторы .................................…………

281

16.5.Агрегация классов .................................……………………… 283

16.6.Наследование .................................…………………………... 287

16.7.Виртуальные функции, полиморфизм и динамическое

связывание .................................……………………………………. 292

16.8.Смешанные иерархии …………………………………………... 294

16.9.Иерархия классов Delphi .................................………………. 295

16.10.Абстрактные классы .................................………………….. 296

16.11.Методы класса .................................………………………… 298

16.12.Класс TObject .................................…………………………. 298

16.13. Приведение классов. Операторы is, as .................................

299

8

16.14.

Метаклассы .................................…………………………….

301

16.15.

Методы метаклассов и метаобъектов .................................

304

16.16.Свойства .................................……………………………….. 305

16.17.Индексированные свойства .................................………….. 307

16.18.Взаимодействие классов .................................……………… 309

16.19.Интерфейсы .................................……………………………. 310

16.20.Новое в Delphi 2005 .................................………………….. 314

Задачи .................................…………………………………………

319

Проект 5: Криптография .................................…………………………….

320

Глава 17. Визуальное программирование

.................................…………

323

17.1. Оконные приложения в Windows

.................................……...

323

17.2. Создание оконных приложений в Delphi ................................

324

17.3. Первое оконное приложение

.................................…………..

324

17.4. Добавляем компоненты на форму

.................................…….

326

17.5. Убегающая кнопка. Обработчик события OnMouseMove …...

328

17.6. Установка пароля на программу

.................................……….

332

17.7. Динамическое создание компонентов .................................…

332

17.8. Общие свойства компонентов

.................................…………

333

17.9. Свойства элементов управления (TControl) ...........................

334

17.10.События мыши и клавиатуры .................................……….. 334

17.11.TComboBox .................................……………………………. 335

17.12. Описание работы калькулятора .................................……... 335

17.13.Исключения .................................…………………………... 340

17.14.Класс TList .................................…………………………….. 344

17.15. Процессы и потоки .................................……………………

346

Задачи .................................…………………………………………

350

Глава 18. Графика .................................……………………………………

351

18.1. Цвет кисти и пера .................................………………………

351

18.2.Рисование многоугольников .................................………….. 351

18.3.Рисование линий .................................……………………….. 352

18.4.Рисуем шашечную доску .................................………………. 354

18.5.Фракталы .................................……………………………….. 357

18.6. Построение самоподобных фракталов

………………………... 361

18.7. Реализация черепашьей графики

.............................…………

362

Задачи .................................…………………………………………

366

Проект 6: Беовульф и Нибелунги .................................…………………..

368

Глава 19. Проблемы ООП. Везенспрограммирование

……………………. 372

19.1. История языков программирования

………………………….. 372

19.2. Обзор некоторых объектно-ориентированных языков ……… 373

Simula

.................................……………………………………

373

Smalltalk .................................………………………………..

373

Delphi (Object Pascal) .................................…………………. 374

С++

.................................……………………………………...

375

Java

.................................……………………………………...

378

19.3. Компиляция или интерпретация

………………………………. 379

19.4. Недостатки объектно-ориентированных языков

…………… 380

Описание самоорганизующихся систем

……………………... 380

9

Объекты языкового уровня и объекты времени выполнения . 380

Взаимодействие программы с операционной системой ……. 381

19.5. Несколько терминов из биологии …………………………….

381

19.6. Везенспрограммирование (Wesensprogrammierung) ………….

382

Основные понятия …………………………………………….. 382 Жизнь существа ……………………………………………….. 383

Убираем ненужные технические понятия ……………………

384

Описание программ на разных языках ……………………….

385

Общая картина .................................…………………………

386

19.7. Что мы с вами еще не сделали …………………………………. 386

Напутствие .................................……………………………………………

387

Решения и ответы

.................................……………………………………

388

Глава 1

.................................…………………………………………

388

Глава 2

.................................…………………………………………

390

Глава 3

.................................…………………………………………

391

Глава 4

.................................…………………………………………

392

Глава 6

.................................…………………………………………

396

Глава 7

.................................…………………………………………

397

Глава 8

.................................…………………………………………

399

Глава 10

.................................………………………………………..

400

Глава 11

.................................………………………………………..

400

Глава 18

.................................………………………………………..

401

Список литературы

.................................………………………………….

403

10

Предисловие

Мне ненавистно все, что только поучает меня, не расширяя и непосредственно не оживляя моей деятельности.

Иоганн Вольфганг Гёте

Вкниге рассматриваются концепции императивного и объектноориентированного программирования и реализация этих принципов в языках Turbo Pascal и Delphi. Кроме того, в последней главе автор анализирует недостатки современных языков программирования и предлагает собственную концепцию везенспрограммирования, которая должна устранить многие из проблем.

Книга разделена на 2 части. В первой из них (главы 0-14) рассматриваются концепции императивного программирования.

Вглавах 0,1 вводятся основные понятия программирования и вкратце рассматриваются концепции языков программирования, существующие на сегодняшний день.

Вглавах 2-13 рассматривается язык Turbo Pascal, один из наиболее популярных языков программирования. По мере роста знаний читателя изученные понятия рассматриваются с более общих позиций, что позволяет глубже понять материал.

Глава 14 - заключительная в первой части учебника. В ней рассматривается ряд общих вопросов, связанных с процедурным программированием (написание обобщенных программ, структурированность языков) и с программированием вообще (понятие машин Тьюринга, ограниченность алгоритмических машин).

Вторая часть (главы 15-19) посвящена объектно-ориентированному программированию (ООП) и взаимодействию программ с операционной системой.

В19-й главе, после того, как вы уже основательно изучили императивные и объектно-ориентированные языки, автор анализирует достижения в области языков программирования и современное состояние языков. На мой взгляд, последние десятилетия не принесли для объектно-ориентированного программирования ничего существенного нового, а все изменения сводились к залатыванию дыр в существующих языках и обрастанию языков лишними понятиями. Поэтому автор предлагает свой выход из создавшегося положения – в переходе к везенспрограммированию.

Книга содержит более 140 примеров с исходным кодом (около 7500 строк кода),

вкоторых рассматриваются многие важные алгоритмы, часто встречающиеся на практике. В учебнике есть около 210 задач по программированию и математике, которые можно разделить на 3 уровня:

1. Задачи разной сложности, позволяющие лучше усвоить пройденный материал. 2. Задачи, расширяющие материал книги. Выполняя их, вы сможете не только потренироваться в решении интересных задач, но и глубже понять

рассмотренные в главах темы.

3. Проекты. В проектах вам предлагается тема для работы, а также несколько советов по ее выполнению. Работая над каким-то из проектов, вы можете посмотреть, на что вы способны.

Миронченко Андрей