В серии: Библиотека ALT Linux Free Pascal и Lazarus Учебник по программированию Е. Р. Алексеев О. В. Чеснокова Т. В. Кучер Москва ДМК Пресс, ALT Linux, 2010 УДК 004.432 ББК 22.1 А47 Free Pascal и Lazarus: Учебник по программирова- А47 нию/Е.Р.Алексеев,О.В.Чеснокова,Т.В.Кучер—М.:ALT Linux, 2010. — 438с. : ил. — (Библиотека ALT Linux). ISBN 978-5-94074-611-9 Free Pascal — свободная реализация языка Паскаль, совместимая с Borland Pascal и Object Pascal — Delphi, но при этом обладающая инекоторымидополнительнымивозможностями.Свободныйкомпиля- торFreePascal—кросплатформенныйпродукт,реализованный,вчаст- ности,дляоперационныхсистемLinuxиWindows.Даннаякнигапред- ставляет собой учебник по алгоритмизации и программированию на основе языка Free Pascal. Кроме того, читатель познакомится с прин- ципамисозданиявизуальныхприложенийвсредеLazarus. Ккаждойтемеприлагаются25вариантовзадачдлясамостоятель- ного решения, что позволит использовать книгу не только начинаю- щимсамостоятельноизучатьпрограммирование,ноипреподавателям вучебномпроцессе. Сайткниги:http://books.altlinux.ru/freepascal/ Книга адресована преподавателям и учащимся средних и высших учебных заведений, а также широкому кругу читателей, интересую- щихсяпрограммированием. УДК 004.432 ББК 22.1 Книгу можно приобрести: В компании «Альт Линукс»: (495) 662-3883. E-mail: [email protected] Internet-магазин: http://shop.altlinux.ru В торгово-издательском холдинге «Альянс-книга»: Оптовые покупки: (495) 258-91-94, 258-91-95. E-mail: [email protected] Internet-магазин: http://www.alians-kniga.ru/ Материалы, составляющие данную книгу, распространяются на условиях лицензии GNU FDL.Книгасодержитследующийтекст,помещаемыйнапервуюстраницуобложки:«Всерии “БиблиотекаALTLinux”».Название:«FreePascalиLazarus:Учебникпопрограммированию». Книга не содержит неизменяемых разделов. Авторы разделов указаны в заголовках соответ- ствующихразделов.ALTLinux—торговаямаркакомпанииALTLinux.Linux—торговаямар- ка Линуса Торвальдса. Прочие встречающиеся названия могут являться торговыми марками соответствующихвладельцев. ISBN 978-5-94074-611-9 °c Алексеев Е. Р., 2010 °c ALT Linux, 2010 °c Издание,ДМКПресс, 2010 Оглавление Оглавление 3 Введение 6 Глава 1. Средства разработки программ на языке Free Pascal 8 1.1 Процесс разработки программы . . . . . . . . . . . . . . . . . . . 8 1.2 Среда программирования Free Pascal . . . . . . . . . . . . . . . . 9 1.3 Среда разработки Geany . . . . . . . . . . . . . . . . . . . . . . . 15 1.4 Среда визуального программирования Lazarus . . . . . . . . . . . 17 Глава 2. Общие сведения о языке программирования Free Pascal 51 2.1 Структура проекта Lazarus . . . . . . . . . . . . . . . . . . . . . . 51 2.2 Структура консольного приложения . . . . . . . . . . . . . . . . . 52 2.3 Элементы языка . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 2.4 Данные в языке Free Pascal . . . . . . . . . . . . . . . . . . . . . 55 2.5 Операции и выражения . . . . . . . . . . . . . . . . . . . . . . . . 63 2.6 Стандартные функции . . . . . . . . . . . . . . . . . . . . . . . . 67 2.7 Задачи для самостоятельного решения . . . . . . . . . . . . . . . 78 Глава 3. Операторы управления 80 3.1 Основные конструкции алгоритма . . . . . . . . . . . . . . . . . . 80 3.2 Оператор присваивания. . . . . . . . . . . . . . . . . . . . . . . . 82 3.3 Составной оператор . . . . . . . . . . . . . . . . . . . . . . . . . . 82 3.4 Условные операторы . . . . . . . . . . . . . . . . . . . . . . . . . 82 3.5 Операторы цикла . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 3.6 Задачи для самостоятельного решения . . . . . . . . . . . . . . . 135 Глава 4. Подпрограммы 140 4.1 Общие сведения о подпрограммах. Локальные и глобальные переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 4.2 Формальные и фактические параметры. Передача параметров в подпрограмму . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 4.3 Процедуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 4.4 Функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 4.5 Решение задач с использованием подпрограмм . . . . . . . . . . 151 4.6 Рекурсивные функции . . . . . . . . . . . . . . . . . . . . . . . . 169 4 Оглавление 4.7 Особенности работы с подпрограммами . . . . . . . . . . . . . . 173 4.8 Разработка модулей . . . . . . . . . . . . . . . . . . . . . . . . . . 176 4.9 Задачи для самостоятельного решения . . . . . . . . . . . . . . . 179 Глава 5. Использование языка Free Pascal для обработки массивов 182 5.1 Общие сведения о массивах . . . . . . . . . . . . . . . . . . . . . 182 5.2 Описание массивов . . . . . . . . . . . . . . . . . . . . . . . . . . 183 5.3 Операции над массивами . . . . . . . . . . . . . . . . . . . . . . . 185 5.4 Ввод-вывод элементов массива . . . . . . . . . . . . . . . . . . . 185 5.5 Вычисление суммы и произведения элементов массива . . . . . . 198 5.6 Поиск максимального элемента в массиве и его номера . . . . . 199 5.7 Сортировка элементов в массиве . . . . . . . . . . . . . . . . . . 200 5.8 Удаление элемента из массива . . . . . . . . . . . . . . . . . . . . 204 5.9 Вставка элемента в массив . . . . . . . . . . . . . . . . . . . . . . 208 5.10 Использование подпрограмм для работы с массивами . . . . . . 210 5.11 Использование указателей для работы с динамическими массивами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 5.12 Примеры программ . . . . . . . . . . . . . . . . . . . . . . . . . . 218 5.13 Задачи для самостоятельного решения . . . . . . . . . . . . . . . 245 Глава 6. Обработка матриц в Паскале 248 6.1 Ввод-вывод матриц . . . . . . . . . . . . . . . . . . . . . . . . . . 250 6.2 Алгоритмы и программы работы с матрицами . . . . . . . . . . . 262 6.3 Динамические матрицы . . . . . . . . . . . . . . . . . . . . . . . 298 6.4 Задачи для самостоятельного решения . . . . . . . . . . . . . . . 301 Глава 7. Обработка файлов средствами Free Pascal 303 7.1 Типы файлов в Free Pascal . . . . . . . . . . . . . . . . . . . . . . 303 7.2 Работа с типизированными файлами . . . . . . . . . . . . . . . . 304 7.3 Бестиповые файлы в языке Free Pascal . . . . . . . . . . . . . . . 328 7.4 Обработка текстовых файлов в языке Free Pascal . . . . . . . . . 340 7.5 Задачи для самостоятельного решения . . . . . . . . . . . . . . . 345 Глава 8. Работа со строками и записями 347 8.1 Обработка текста . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 8.2 Работа с записями . . . . . . . . . . . . . . . . . . . . . . . . . . 352 8.3 Задачи для самостоятельного решения по теме «Строки» . . . . 361 8.4 Задачи для самостоятельного решения по теме «Записи» . . . . 362 Глава 9. Объектно-ориентированное программирование 367 9.1 Основные понятия. . . . . . . . . . . . . . . . . . . . . . . . . . . 367 9.2 Инкапсуляция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 9.3 Наследование и полиморфизм . . . . . . . . . . . . . . . . . . . . 380 Оглавление 5 9.4 Перегрузка операций . . . . . . . . . . . . . . . . . . . . . . . . . 392 9.5 Задачи для самостоятельного решения . . . . . . . . . . . . . . . 405 Глава 10. Графика в Lazarus 409 10.1 Средства рисования в Lazarus . . . . . . . . . . . . . . . . . . . . 409 10.2 Построение графиков . . . . . . . . . . . . . . . . . . . . . . . . . 418 10.3 Задачи для самостоятельного решения . . . . . . . . . . . . . . . 429 Заключение 433 Сведения об авторах 434 Литература 435 Предметный указатель 436 Введение Авторы книги давно хотели написать учебник по программированию, кото- рыйбылбыполезенпользователямразличныхоперационныхсистем.Благодаря компании ALT Linux, мы попытались это сделать. В качестве языка программи- рования был выбран язык Free Pascal, который представляется нам ясным, ло- гичнымигибкимязыкомиприучаеткхорошемустилюпрограммирования.Сво- боднораспространяемыекомпиляторыязыкаFreePascalреализованывомногих дистрибутивах Linux, есть свободные компиляторы и для ОС Windows. Кроме того,вэтойкнигемыпопыталисьпознакомитьчитателяспринципамисоздания визуальных приложений в среде Lazarus. В настоящее время существует множество подходов к изучению программи- рования. По мнению авторов, нельзя изучать программирование на каком-либо языке,неизучивметодыразработкиалгоритмов.Однимизнаиболеенаглядных методов составления алгоритмов является язык блок-схем. Об этом свидетель- ствует и многолетний опыт авторов преподавания программирования. Мы по- пыталисьнаписатьучебникпоалгоритмизацииипрограммированию,насколько нам это удалось—судить читателю. Авторы надеются, что читатель имеет первоначальные навыки работы на персональном компьютере под управлением ОС Linux или Windows и знаком со школьным курсом математики. Книга состоит из десяти глав. В первой главе читатель узнает о средствах разработки программ на Free Pascal, напишет свои первые программы. Во второй главе изложены основные элементы языка (переменные, выра- жения, операторы) Free Pascal. Описаны простейшие операторы языка: присва- ивания и ввода-вывода, приведена структура программы, приведены примеры простейших программ линейной структуры. Третья глава является одной из ключевых в изучении программирования. Внейизложенаметодикасоставленияалгоритмовспомощьюблок-схем.Приве- денобольшоеколичествопримеровблок-схемалгоритмовипрограммразличной сложности. Авторы рекомендуют внимательно разобрать все примеры и выпол- нить упражнения этой главы, и только после этого приступать к изучению по- следующих глав книги. Оглавление 7 Вчетвёртой главечитательнабольшомколичествепримеровпознакомится с подпрограммами. Описан механизм передачи параметров между подпрограм- мами. Один из параграфов посвящён рекурсивным подпрограммам. В заверше- нии главы рассмотрен вопрос создания личных модулей. Пятаяишестаяглавыпосвященыизучениюалгоритмовобработкимассивов и матриц. Здесь же читатель познакомится и с реализацией этих алгоритмов на языке Free Pascal. Именно эти главы совместно с третьей являются ключом к пониманию принципов программирования. Седьмая глава знакомит читателя с обработкой файлов на языке Free Pas- cal под управлением ОС Linux и Windows. На практических примерах изложен механизм прямого и последовательного доступа к файлам и обработки ошибок ввода-вывода. Описана работа с бестиповыми и текстовыми файлами. Восьмая глава посвящена обработке строк и записей. Приведённые примеры позволят читателю разобраться с принципами обработки таблиц в языке Free Pascal. В девятой главе авторы описали принципы объектно-ориентированного про- граммирования и их реализацию в языке Free Pascal. В десятой главе рассмотрены графические возможности Lazarus, изложено подробное описание алгоритма построения графиков непрерывных функций на экране дисплея. Приведены тексты программ изображения графиков функций с подробными комментариями. К каждой теме прилагаются 25 вариантов задач для самостоятельного реше- ния, что позволит использовать книгу не только начинающим самостоятельно изучать программирование, но и преподавателям в учебном процессе. С рабочими материалами книги можно познакомиться на сайте Евгения Ро- стиславовича Алексеева—http://www.teacher.dn-ua.com. Авторы благодарят компанию ALT Linux и лично Кирилла Маслинского за возможность издать эту книгу. Авторы выражают благодарность своим родным за помощь и понимание. Алексеев Е. Р., Чеснокова О. В., Кучер Т. В. Донецк, январь 2009 г. Глава 1 Средства разработки программ на языке Free Pascal В этой главе мы начинаем знакомство с программированием на языке Free Pascal. Язык программирования Free Pascal ведёт своё начало от классического языка Pascal, который был разработан в конце 60-х годов XX века Никлаусом Виртом. Н. Вирт разрабатывал этот язык как учебный язык для своих студен- тов. С тех пор Pascal, сохранив простоту и структуру языка, разработанного Н. Виртом, превратился в мощное средство программирования. С помощью со- временного языка Pascal можно производить простые расчёты, разрабатывать программыдляпроведениясложныхинженерныхиэкономическихвычислений. 1.1 Процесс разработки программы Разработку программы можно разбить на следующие этапы: 1) Составление алгоритма решения задачи. Алгоритм—это описание после- довательности действий, которые необходимо выполнить для решения по- ставленной задачи. 2) Написаниетекстапрограммы.Текстпрограммы пишутнакаком-либоязы- ке программирования (например на Free Pascal) и вводят его в компьютер с помощью текстового редактора. 3) Отладка программы. Отладка программы—это процесс устранения оши- бок из текста программы. Все ошибки делятся на синтаксические и логи- ческие. При наличии синтаксических ошибок (ошибок в написании опера- торов) программа не запускается. Подобные ошибки исправляются проще всего.Логическиеошибки—этоошибки,прикоторыхпрограммаработает, но неправильно. В этом случае программа выдаёт не те результаты, кото- рыеожидаетразработчикилипользователь.Логическиеошибкиисправить сложнее, чем синтаксические, иногда для этого придётся переписывать от- дельные участки программы, а иногда и перерабатывать весь алгоритм. 1.2. Среда программирования Free Pascal 9 4) Тестирование программы. Тестирование программы—процесс выявления ошибок в работе программы. Процессыотладкиитестированиясопровождаютсянеоднократнымзапуском программынавыполнение.Процессзапускапрограммыможетбытьосуществлён только после того, как введённая в компьютер программа на алгоритмическом языкеPascal1 будетпереведенавдвоичныймашинныйкод исозданисполняемый файл. Процесс перевода текста программы в машинный код называют трансля- цией. Все трансляторы делятся на два класса: интерпретаторы—трансляторы, которые переводят каждый оператор • программы в машинный код, и по мере перевода операторы выполняются процессором; компиляторы переводятвсюпрограммуцеликом,иеслипереводвсейпро- • граммыпрошёлбезошибок,тополученныйдвоичныйкодможнозапускать на выполнение. Есливкачестветрансляторавыступаеткомпилятор,топроцесспереводатек- стапрограммывмашинныйкодназываюткомпиляцией.Припереводепрограм- мы с языка Pascal в машинный код используются именно компиляторы2. Рассмотрим основные этапы обработки компилятором программы на языке Pascal. 1) Компилятор анализирует, какие внешние библиотеки3 нужно подключить, разбирает текст программы на составляющие элементы, проверяет син- таксические ошибки и в случае их отсутствия формирует объектный код (вWindows—файлсрасширением.obj,вLinux—файлсрасширением.o). Получаемый на этом этапе двоичный файл (объектный код) не включает в себя объектные коды подключаемых библиотек. 2) На втором этапе компоновщик подключает к объектному коду програм- мы объектные коды библиотек и генерирует исполняемый код программы. Этотэтапназываетсякомпоновкой илисборкойпрограммы.Полученныйна этом этапе исполняемый код программы можно запускать на выполнение. НасегодняшнийденьсуществуетмножествокомпиляторовязыкаPascal,сре- ди которых можно выделить Borland Pascal, Delphi, а также свободно распро- страняемый кроссплатформенный компилятор языка Free Pascal и среду визу- ального программирования Lazarus. 1.2 Среда программирования Free Pascal Рассмотрим процесс установки компилятора Free Pascal в ОС Linux. Для установки программ в операционной системе Linux служит менеджер пакетов. В разных дистрибутивах Linux используются различные менеджеры 1Какиналюбомдругомязыке. 2Вместотермина«компилятор»влитературеиногдаиспользуюттермин«трансляторком- пилирующеготипа». 3ВбиблиотекахязыкаPascalхранитсяобъектный(двоичный)кодстандартных(таких,как sin(x),cos(x)идр.)функцийипроцедурязыка. 10 Глава 1. Средства разработки программ на языке Free Pascal Рис. 1.1. Менеджер пакетов Synaptic пакетов, например, в ALT Linux можно воспользоваться программой Synaptic. ОкноSynapticпредставленонарис.1.1.ВшкольнойлинейкедистрибутивовALT Linux Free Pascal и Lazarus присутствуют сразу после установки операционной системы. Обратитевнимание,чтодляустановкипрограммнеобходимоустановитьспи- сок источников программ (список репозиториев4). ДляустановкиFreePascalвокнеSynaptic(см.рис.1.1)необходимощёлкнуть по кнопке Найти и в открывшемся окне ввести fpc (см. рис. 1.2). Менеджер программ находит программу FreePascal, после чего в окне Synaptic необходи- мо отметить программы fpc (Free Pascal Compiler Meta Package) для установки (спомощьюконтекстногоменюилиспомощьюкнопкиОтметитьдляобновле- ния)иначатьустановку,щёлкнувпокнопкеПрименить.Послеэтогоначнётся процесс загрузки пакетов из Интернета и их установки. В состав метапакета fpс входит компилятор языка Free Pascal fpc и среда разработки fp-ide. Для запуска среды разработки в Linux необходимо просто в терминале набрать fp. На рис. 1.3 представлено окно среды разработки про- грамм на языке Free Pascal в ОС Linux. 4Списокрепозиториев—списокофициальныхсайтов,скоторыхможноустанавливатьпро- граммы.