- •1 Средства разработки программ на языке Free Pascal
- •1.1 Процесс разработки программы
- •1.2 Среда программирования Free Pascal
- •1.2.1 Работа в текстовом редакторе Free Pascal
- •1.2.2 Запуск программы в среде Free Pascal и просмотр результатов
- •1.3 Текстовый редактор Geany
- •1.4 Среда визуального программирования Lazarus
- •1.4.1 Установка Lazarus в ОС Linux
- •1.4.2 Установка Lazarus под управлением ОС Windows
- •1.4.3 Среда Lazarus
- •1.4.4 Главное меню Lazarus
- •1.4.5 Окно формы
- •1.4.6 Окно редактора Lazarus
- •1.4.7 Панель компонентов
- •1.4.8 Инспектор объектов
- •1.4.9 Первая программа в Lazarus
- •1.4.10 Полезная программа
- •1.4.11 Консольное приложение среды Lazarus
- •1.4.12 Операторы ввода - вывода данных
- •2 Общие сведения о языке программирования Free Pascal
- •2.1 Структура проекта Lazarus
- •2.2 Структура консольного приложения
- •2.3 Элементы языка
- •2.4 Данные в языке Free Pascal
- •2.4.1 Символьный тип данных
- •2.4.2 Целочисленный тип данных
- •2.4.3 Вещественный тип данных
- •2.4.4 Тип дата-время
- •2.4.5 Логический тип данных
- •2.4.6 Создание новых типов данных
- •2.4.7 Перечислимый тип данных
- •2.4.8 Интервальный тип
- •2.4.9 Структурированные типы
- •2.4.10 Указатели
- •2.5 Операции и выражения
- •2.5.1 Арифметические операции
- •2.5.2 Операции отношения
- •2.5.3 Логические операции
- •2.5.4 Операции над указателями
- •2.6 Стандартные функции
- •2.7 Задачи для самостоятельного решения
- •3 Операторы управления
- •3.1 Основные конструкции алгоритма
- •3.2 Оператор присваивания
- •3.3 Составной оператор
- •3.4 Условные операторы
- •3.4.1 Условный оператор if…then…else
- •3.4.2 Оператор варианта case
- •3.5 Обработка ошибок. Вывод сообщений в среде Lazarus
- •3.6 Операторы цикла
- •3.6.1 Оператор цикла с предусловием while .. do
- •3.6.2 Оператор цикла с постусловием repeat … until
- •3.6.3 Оператор цикла for … do
- •3.7 Операторы передачи управления
- •3.8 Решение задач с использованием циклов
- •3.9 Ввод данных из диалогового окна в среде Lazarus
- •3.10 Задачи для самостоятельного решения
- •3.10.1 Разветвляющийся процесс
- •3.10.2 Циклический процесс
- •4 Подпрограммы
- •4.2 Формальные и фактические параметры. Передача параметров в подпрограмму
- •4.3 Процедуры
- •4.4 Функции
- •4.5 Решение задач с использованием подпрограмм
- •4.6 Рекурсивные функции
- •4.7 Особенности работы с подпрограммами
- •4.7.1 Параметры-константы
- •4.7.2 Процедурные типы
- •4.8 Разработка модулей
- •4.9 Задачи для самостоятельного решения
- •5 Использование языка Free Pascal для обработки массивов
- •5.1 Общие сведения о массивах
- •5.2 Описание массивов
- •5.3 Операции над массивами
- •5.4 Ввод-вывод элементов массива
- •5.4.2 Ввод-вывод данных в визуальных приложениях
- •5.5 Вычисление суммы и произведения элементов массива
- •5.6 Поиск максимального элемента в массиве и его номера
- •5.7 Сортировка элементов в массиве
- •5.7.1 Сортировка методом «пузырька»
- •5.7.2 Сортировка выбором
- •5.8 Удаление элемента из массива
- •5.9 Вставка элемента в массив
- •5.10 Использование подпрограмм для работы с массивами
- •5.11 Использование указателей для работы с динамическими массивами
- •5.11.1 Работа с динамическими переменными и указателями
- •5.11.2 Работа с динамическими массивами с помощью процедур getmem и freemem
- •5.12 Примеры программ
- •5.13 Задачи для самостоятельного решения
- •6 Обработка матриц во Free Pascal
- •6.1 Ввод-вывод матриц
- •6.2 Алгоритмы и программы работы с матрицами
- •6.3 Динамические матрицы
- •6.4 Задачи для самостоятельного решения
- •7 Обработка файлов средствами Free Pascal
- •7.1 Типы файлов
- •7.2 Работа с типизированными файлами
- •7.2.1 Процедура AssignFile
- •7.2.2 Процедуры reset, rewrite
- •7.2.3 Процедура СloseFile
- •7.2.4 Процедура rename
- •7.2.5 Процедура erase
- •7.2.6 Функция eof
- •7.2.7 Чтение и запись данных в файл
- •7.3 Бестиповые файлы в языке Free Pascal
- •7.4 Обработка текстовых файлов в языке Free Pascal
- •7.5 Задачи для самостоятельного решения
- •8 Работа со строками и записями
- •8. 1 Обработка текста
- •8.2 Работа с записями
- •8.3 Задачи для самостоятельного решения по теме «Строки»
- •8.4 Задачи для самостоятельного решения по теме «Записи»
- •9.1 Основные понятия
- •9.2 Инкапсуляция
- •9.3 Наследование и полиформизм
- •9.4 Перегрузка операций
- •9.5 Задачи для самостоятельного решения
- •10 Графика во Free Pascal
- •10.1 Средства рисования в Lazarus
- •10.2 Построение графиков
- •10.3 Задачи для самостоятельного решения
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus |
432 |
chislo.y:=StrToFloat(Edit2.Text); Str1:='Kompleksnoe chislo '+
chislo.ComplexToStr() ; Memo1.Lines.Add(Str1) ;
Str1:='Modul chisla '+ FloatToStrF(chislo.Modul(),ffFixed, 5, 2);
Memo1.Lines.Add(Str1) ; Str1:='Argument chisla '+
FloatToStrF(chislo.Argument(),ffFixed, 5, 2); Memo1.Lines.Add(Str1) ;
chislo.Free;
end; initialization {$I unit1.lrs} end.
9.2 Инкапсуляция
Инкапсуляция — один из важнейших механизмов объектно-ори- ентированного программирования (наряду с наследованием и полиформизмом). Класс представляет собой единство трех сущностей – полей, свойств и методов, что и является инкапсуляцией. Инкапсуляция позволяет создавать класс как нечто целостное, имеющее определённую функциональность. Например, класс TForm содержит в
себе (инкапсулирует) все необходимое, чтобы создать диалоговое окно.
Основная идея инкапсуляции – защитить поля от несанкционированного доступа. Поэтому целесообразно поля объявлять в разделе private. Прямой доступ к полям объекта: чтение и обновление их
содержимого должно производиться посредством вызова соответствующих методов. В FreePascal для этого служат свойства класса.
Свойства - это специальный механизм классов, регулирующий доступ к полям. Свойства объявляются с помощью зарезервированных слов property, read и write. Обычно свойство связано с не-
которым полем и указывает те методы класса, которые должны использоваться при записи в это поле или при чтении из него. Синтак-
сис объявления свойств следующий:
propety имя_1: тип read имя_чтения write имя_2
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus |
433 |
Зарезервированное слово read описывает метод чтения свойств объекта, а слово write описывает метод записи свойств объекта. Имя_1 и имя_2 – соответственно имена методов, обеспечивающих
чтение или запись свойства.
Если необходимо, чтобы свойство было доступно только для чтения или только для записи, следует опустить соответственно часть write или read.
Рассмотрим следующий пример. Создадим класс – многоугольник, имя класса TPolygon. Полями класса будут:
•K – количество сторон многоугольника;
•p – массив, в котором будут храниться длины сторон много-
угольника.
Методами класса будут:
•конструктор Create, обнуляющий элементы массива p;
• Perimetr() - функция вычисления периметра фигуры;
•Show() - функция формирования сведений о фигуре (количество сторон и периметр);
•Set_Input() - функция проверки исходных данных.
Расположим на форме кнопку и метку. При щелчке по кнопке появляется окно ввода количества сторон многоугольника. Если количество сторон введено корректно, то инициализируется объект «Многоугольник» с количеством сторон, равным введенному, в противном случае количество сторон многоугольника принимается равным по умолчанию 50. После этого вычисляется периметр фигуры и результаты выводятся на форму в метке Label1.
Ниже приведен листинг программы с комментариями, результаты работы программы можно увидеть на рис. 9.2.
unit Unit1; |
|
|
|
{$mode objfpc}{$H+} |
|
|
|
interface |
|
|
|
uses |
SysUtils, |
LResources, |
Forms, |
Classes, |
Controls, Graphics, Dialogs, StdCtrls; type
{ TForm1 }
TForm1 = class(TForm) Button1: TButton;
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus |
434 |
Label1: TLabel;
procedure Button1Click(Sender: TObject); private
{private declarations } public
{public declarations }
end; type
//Объявление класса многоугольник Tpolygon. TPolygon = class
//Закрытые поля. Private
K : integer;
p : array of real; //Открытые методы. Public
constructor Create; |
//Конструктор. |
|
//Метод вычисления периметра. |
||
function Perimetr():real; |
|
|
//Метод формирования сведений. |
||
function Show():String; |
|
|
Protected |
//Защищенные методы. |
//Процедура проверки данных. procedure Set_Input(m:integer); Published
//Объявление свойства n. //Свойство n оперирует полем K.
//В описании свойства после слова read //стоит имя поля — K. Это значит, что //функция чтения отсутствует и пользователь //может читать непосредственно значение поля. //Ссылка на функцию Set_Input после //зарезервированного слова write означает, //что с помощью этой функции в поле K будут //записываться новые значения.
Property n: integer read K write Set_Input; end;
var
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus |
435 |
Form1: TForm1;
//Объявление переменной типа //класс многоугольник. Figure: TPolygon; implementation
//Описание конструктора. constructor TPolygon.Create; var i:integer;
begin
K:=50;//Присваивание начальных значений полям. //Выделение памяти под массив p. SetLength(p,K);
for i:=0 to K-1 do p[i]:=0; inherited Create;
end;
//Функция вычисления периметра. function TPolygon.Perimetr():real; var Sum:real; i:integer;
begin Sum:=0;
for i:=0 to K-1 do Sum:=Sum+p[i]; Perimetr:=Sum;
end;
//Метод формирования сведений о фигуре. function TPolygon.Show():String;
begin
Show:='Многоугольник с количеством сторон '+ IntToStr(K)+chr(13)+'Периметр = '+
FloatToStr(Perimetr())
end;
//Метод записи данных в поле K. procedure TPolygon.Set_Input(m:integer); begin
//Если введенное значение положительное число, //то записать его в поле K,
//иначе вернуться к начальному значению. if m>1 then K:=m else K:=50;
end;
Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus |
436 |
{TForm1 } //Обработка события.
procedure TForm1.Button1Click(Sender: TObject); var i, m:integer;
s:string; begin
//Ввод количества сторон многоугольника. s:=InputBox('Ввод','Введите количество сторон
многоугольника','6');
Val(s,m); //Инициализация объекта. Figure:=TPolygon.Create; with Figure do
begin
//Метод проверки исходных данных. Set_Input(m);
//Формирование массива случайных чисел. for i:=0 to K-1 do p[i]:=random(50);
//Обращение к методу вычисления периметра. s:=Show();
end;
//Вывод результатов в окно формы. Label1.Caption:= s;
end; initialization {$I unit1.lrs} end.
Рисунок 9.2: Результат работы программы с классом многоугольник