Указатели бывают типизированные и Нетипизированные



Описание указателей:Типизированный указатель хранит адрес переменной определенного типа.

Var

<имя указателя>:^<тип>;

Нетипизированный указатель не связанный с каким-либо конкретным типом данных

Var

<имя указателя>:Pointer;

 Оба указателя могут предварительно объявляться как тип, а затем по типу описываться переменные.

Var

p: ^ real;//переменная, в которой будет записан адрес вещественного числа

 Операции над указателями:
Для указателей определены операции:

- присваиванияp1 := p2;

- проверки на равенство и неравенство ifp1 = p2 then …;

- разыменование указателя p^;

- взятие адреса переменной p:= @ a.

Операция разыменования (разадресации) указателяприменяется для обращения к значению переменной, адрес которой хранится в указателе:

Var

p1: ^word;

L:word; // предварительно в p1 должен быть записан адрес отличный от nil

p1^ := 2; // по адресу указанному в p1 отослать значение 2,

p1^ := p1^ +1;

L:=2* p1^ ;

inc(p1^);

writeln(p1^);

39. Выделение динамической памяти для типизированных указателей.
Для типизированных указателей память под динамически размещаемую переменную удобно выделять процедурой New(p1), которая выделяет память под переменную соответствующего типа и присваивает указателю адрес, начиная с которого будет располагаться переменная.

Процедура Dispose(p1), наоборот освобождает память выделенную под переменную, указатель остается ему присваивается значение nill возможно его дальнейшее использование.
Для типизированного указателя можно выделять память процедурой GetMem

Для нетипизированных указателей память под динамически размещаемую переменную следует выделять процедурой GetMem, высвобождать FreeMem

ProcedureGetMem(varP:pointer; Size: Integer); - резервирует за указателем фрагмент памяти размером Size байтов.

ProcedureFreeMem(varP:pointer [; Size: Integer]); - возвращает в динамическую память фрагмент, который был зарезервированным указателем P.

FunctionSizeOf(x):Integer; - возвращает количество байтов, занимаемой переменной или типом х.

 

40. Динамические структуры данных:В программах чаще всего используются:

a) линейные списки

b) стеки

c) очереди

d) бинарные деревья

Элемент динамической структуры состоит из двух частей:

a) информационной, ради хранения которой и создается структура;

b) указателей, обеспечивающих связь элементов друг с другом, например:

 

Очередь: Начальное формирование очереди: new(beg); beg^.d := 100; beg^.s := 'Вася'; beg^.p := nil;         fin := beg; Добавление элемента в конец: new(p); p^.d := 10; p^.s := 'Петя'; p^.p := nil; fin^.p := p; fin := p;

 

41. Линейные списки:Каждый элемент списка содержит ключ, идентифицирующий этот элемент.

(Односвязные, двусвязные, кольцевые)
Операции со списком:

начальное формирование списка (создание первого элемента);

добавление элемента в конец списка;

чтение элемента с заданным ключом;

вставка элемента в заданное место списка (до или после элемента с заданным ключом);

удаление элемента с заданным ключом;

упорядочивание списка по ключу.

 

Примерработы: program linked_list; const n = 5; type pnode = ^node; node = record { элементсписка } d : word; s : string; p : pnode; еnd; Var beg : pnode; { указатель на начало списка } i, key: word; s: string; option: word; const text: array [1 .. n] of string = ('one', 'two', 'three', 'four', 'five');  

 

42.Бинарное дерево:

Бинарное дерево — динамическая структура данных, состоящая из узлов, каждый из которых содержит кроме данных не более двух ссылок на различные бинарные деревья.

На каждый узел имеется ровно одна ссылка.

Начальный узел называется корнем дерева.

Операции:

Для бинарных деревьев определены операции:

• включения узла в дерево;

• поиска по дереву;

• обхода дерева;

• удаления узла.

Элемент дерева:

Type

pnode = ^node;

node = record

data : word;                                                       { ключ }

left :pnode;                                                       { указатель на левое поддерево }

right :pnode                                                       { указатель на правое поддерево }

end;

Поиск по дереву:

function find(root : pnode; key : word; var p,

parent :pnode) : boolean;

begin

p := root;                                                          { поиск начинается от корня }

while p <> nil do begin

if key = p^.data then                                   { такойузелесть }

begin find := true; exit end;                          

parent := p; { запомнить ук-ль перед спуском }

if key <p^.data

then p := p^.left                                            { спуститьсявлево }

else p := p^.right;                                          { спуститься вправо }

end;

find := false;

end;

ит. д.

 

42. Модули – это программные единицы, служащие для размещения фрагментов программ, работают они совместно с основной программой, но компилироваться могут отдельно. Используемые модули указываются в разделе Uses.

Конструкция модуля

Unit<имя модуля>;

Interface

Implementation

Initialization

Finalization

end.

В разделе interface мы сообщаем компилятору, какие типы, переменные, конс-танты, подпрограммы должны стать доступными основной программе и/или другим модулям.

При объявлении типов и переменных они указываются полностью, а при объяв-лении глобальных подпрограмм указываются только их заголовки.

В разделе Implementation описываются подпрограммы объявленные в интерфейс-ной части.

Пример:

Требуется написать модуль, в котором реализуется комплексная арифметика.

Меню File/New/Unit – создает новый файл модуля без формы, который будет компилироваться отдельно.

unit comp;

Interface

type com=record

re,im:real;

end;

function add(x,y:com):com;

function sub(x,y:com):com;

functionmul(x,y:com):com;

function dv(x,y:com):com;

implementation

function add(x,y:com):com;

begin

add.re:=x.re+y.re;

add.im:=x.im+y.im;

end;

function sub(x,y:com):com;

begin

sub.re:=x.re+y.re;

sub.im:=x.im+y.im;

end;

functionmul(x,y:com):com;

begin

mul.re:=x.re*y.re-x.im*y.im;

mul.im:=x.re*y.im+x.im*y.re;

end;

end.

 


Дата добавления: 2018-05-12; просмотров: 250; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!