Программирование на языке Object Pascal

Методическое пособие - Компьютеры, программирование

Другие методички по предмету Компьютеры, программирование

), где (x) - любой объект программы (переменная, массив, объект указателя);

CSeg: word; - (возвращает значение хранящееся в регистре CS) в начале работы программы в регистре программы (CS) хранится сегмент кода;

DSeg: word; - (возвращает значение регистра DS) в начале работы программы в регистре (DS) хранится сегмент данных;

MaxAvail: int64; - (возвращает в байтах размер наибольшего непрерывного участка кучи);

MemAvail: int64; - (возвращает в байтах размер общего свободного пространства кучи);

Ofs(x): word; - (возвращает значение смещения адреса для указанного объекта (x)) (x) - выражение любого типа или имя процедуры;

Seg(x): word; - (возвращает значение содержащее сегмент адреса указанного объекта);

PTR(s, o: word): pointer; - (s - сегмент, o - смещение) возвращает значение типа pointer по заданному сегменту (s) и смещению (o).

 

Динамические структуры памяти

 

Преимущества динамической памяти становятся особенно очевидными при организации динамических структур. Элементы этих структур связанны через адреса. К таким структурам относятся: стеки, очереди, деревья, сети, …

Основой моделирования динамических структур являются списки (конечно множество динамических элементов размещающихся в разных областях памяти и объединенных в логически упорядоченную последовательность с помощью специальных указателей, адресов связи). В списке каждый элемент имеет информационное поле и ссылку, т.е. адрес другого элемента списка.

Список - линейная структура данных, с помощью которой задаются одномерные отношения.

Структуры элемента одномерного списка

 

Однонаправленный список:

 

Двунаправленный список:

 

Порядок расположения информационных и ссылочных полей в элементе произволен.

Информационная часть может содержать поля различных типов.

Ссылки должны быть однотипны.

В зависимости от числа ссылок список бывает однонаправленный и двунаправленный.

 

Линейный однонаправленный список:

- голова списка.

Список называется пустым, если указатель на первый элемент равен Nil: First=Nil;

Линейный двунаправленный список:

 

- голова списка.

Last - хвост списка.

Так же существуют кольцевые списки, у которых последний элемент указывает на первый.

Пример Описание элемента однонаправленного списка:

 

TypeType=^zap; point=^zap;=record; zap=record;: integer; int1: integer;: string; int2: string; : EL;next: point;;prev: point;

End;

 

Все действия над элементами списка (вставка, удаление, перестановка) сводятся к действиям со ссылками. Сами элементы при этом своего физического положения в памяти не меняют.

Задачи для работы с линейным списком.

1_Создание пустого списка:

Create_Empty_List (var first: EL);

First:= nil;

End;

 

_Добавление элемента в список:

 

Procedure Create_New_Elem (var p: EL);(p);^: inf1:= StrToInt (Edit1.text);^: inf2:= Edit2.text;^: next:= nil;;_Empty_List (first);_New_Elem (p1);:= p1;_New_Elem (p2);^.next:=p2

 

3_Подсчет количества элементов в списке:

 

Function Count_El (first: EL): integer;: integer;: EL;first=nil then k:=0:=1;:= first;q^.next <> nil do:=k+1;:=q*next;;;;:= k;;

 

Аналогично записывается процедура: 1. вывода списка на экран;

. поиск внутри списка…

_Вставка элемента в начало списка:

 

Procedure ins_Bea_List (p: EL; var first: EL);first=nil then:= p;^.next:= nil;;^.next:=first;:=p;

End;

End;

 

_Добавление элемента в конец списка:

Procedure ins_End_List (p: EL; var first: EL);: EL;first=nil then:=p;^.next:=nil;;:=first;q^.next<>nil do=q^.next;^.next:=p;^.next:=nil;;

End;

 

_Добавление элемента в середину списка (после i-того элемента):

 

ins_After_i (p: EL; first: EL; i: integer);,q: EL;,n: integer;:= Count_EL (first);(inil do:=q^.next;^.next:=p;;;:=first;:=1;k<i do:=k+1;:=t^.next;;:=t^.next;//в t:=i, a в q:=i+1^.next:=p;^.next:=q;;

End;

 

 

7_Удаление первого элемента в списке:

 

Procedure Del_Beg_List (var first: EL);: EL;first<>nil then:=first;p^.next=nil then(p);:=nil;;:=first;:=first^.next;(p);;

End;

End;

 

 

_Удаление последнего элемента в списке:

 

Procedure Del_End_List (var first: EL);,g: EL;first=nil then exit;first^.next=nil then:=first;(t);:=nil;;:=first;:=first;q^.next<>nil do:=q;:=q^.next;;

// t - предпоследний, q - последний.

Dispose (q);^.next:=nil;;

End;

 

 

9_Удаление i-того элемента из середины списка:

 

Procedure Del (var first: EL; i: integer);, q: EL;, n: integer;first=nil then exit;:=count_EL(first);(in) then(I задано не корректно);;;

If i=1 then

Begin

// удаление первого элемента в списке (процедура выше)

End;i=n then

// удаление последнего элемента в списке (процедура выше)

End;:= first;:= nil;:=1;k<I do:=k+1;:=t;:=t^.next;;:=t^.next;//(i-1):=q, (i):=t, (i+1):=k^.next:=k;(t);;

End;

 

 

10_Удаление всего списка:

Del_List (var first: EL);; q: EL;first=nil then exit;:=first;:=nil;q<>nil do:=q;:=q^.next;(p);;:=nil;;

 

Кроме линейных структур, с помощью указателей можно реализовать не линейные структуры (деревья).

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

 

 

np: ^node;=record;: string;: np;: np;;

 

Графика в Delphi

 

Delphi позволяет использовать графические возможности операционной системы Windows. В операционной системе Windows графические возможности предоставляет графический интерфейс Win32. в частности интерфейс известный как GDI. Интерфейс GDI используется в системе Win32 для рисования и раскраски изображений. До появления Delphi для программирования графики в среде Windows необходимо бы