Объект-список

End.

X.Free;

X.Add(y);

Begin

Uses SysUtils,Dialogs,

Begin

Begin

Begin

Begin

Public

Protected

Private

Orig:pointer;

{поле Orig используется как указатель адреса динамической области}

jMin, jMax:integer; {поля –– первый и последний индексы вектора}

{ метод определения адреса j-го элемента вектора}

function ElemP (j:integer):RealP;

{методы для чтения и записи j-го элемента вектора}

function OutElem (j:integer):Real;

procedure InpElem(j:integer;r:Real);

{ конструктор и деструктор }

constructor Create(jMin_,jMax_:integer);

destructor Destroy; override;

{ конструктор – это статический метод, деструктор – виртуальный метод, он перекрыт для динамического замещения в классе- потомке}

property Elem(j:integer):Real read OutElem {свойство}

write InpElem; default;

procedure Vanish; { метод для создания нулевого вектора}

procedure Add(x:TVect); { метод сложения векторов }

procedure Sub(x:TVect); { метод вычитания векторов }

end;

implementation {исполняемая часть }

constructor TVect.Create(jMin_;jMax_:integer);

inherited Create;

{вызов унаследованного конструктора}

jMin:=jMin_;

jMax:=jMax_;

GetMem(Orig,(jMax – jMin + 1)*Sizeof(Real));

Vanish;

end;

destructor TVect.Destroy;

begin FreeMem(Orig,(jMax – jMin + 1)*Sizeof(Real));

inherited Destroy;

{вызов унаследованного деструктора}

end;

function TVect.ElemP(j:integer):RealP;

ElemP:=Ptr(LongInt(Orig))+(j – jMin)*Sizeof(Real);

end;

Procedure TVect.InpElem(j:integer;r:real);

Elemp(j)^:=r;

{содержимому j-го элемента вектора присвоено значение r}

end;

function TVect.OutElem(j:integer):real;

result:=Elemp(j)^;

{результату присваивается содержимое j-го элемента вектора}

end;

procedure TVect.Vanish;

var j:integer;

begin for j:= jMin to jMax do

ElemP(j)^:=0.0;

end;

procedure TVect.Add(x:TVect); {метод сложения векторов}

var j:integer;

begin for j:=jMin to jMax do

ElemP(j)^:=ElemP(j)^ + x.ElemP(j)^;

end;

procedure TVect.Sub(x:TVect); {метод вычитания векторов}

var j:integer;

begin for j:= jMin to jMax do

ElemP(j)^:=ElemP(j)^ – x.ElemP(j)^;

end;

end. {конец модуля VecMat }

Модуль необходимо сохранить под именем VecMat.pas, затем использовать в других модулях и программах. Напишем программу, которая использует поля, методы и свойства класса TVect из модуля VecMat для конкретных объектов – векторов x и y.

Program Project_Vector;

VecMat in ‘VecMat.pas’;

var x,y:TVect;

i:integer;

c:real;

begin x:=TVect.Create(1,5);

y:=TVect.Create(1,5);

// конструктор создает вектора из 5 элементов

x.Vanish; //создается нулевой вектор – x

for i:=1 to 5 do

readln(c);

// ввод значений элементов вектора

y.Elem[i]:=c;

// вызов свойства для ввода элементов вектора y

end;

for i:=1 to 5 do

write(y.Elem[i]:4:1,’ ’);

// вызов свойства для вывода элементов вектора y

writeln;

// сложение векторов x и y, результат записывается в x

for i:=1 to 5 do

write(x.Elem[i]:4:1,’ ’);

// вызов свойства для вывода элементов вектора x

writeln;

y.Free;

// уничтожение объектов x,y

readln;

Создать объект-список, предусмотреть в нем методы добавления нового элемента в начало и в конец списка. Методы удаления элементов из начала и из конца списка, методы вывода списка на экран и удаления этого списка.

Пусть список состоит из целых чисел.

top – это указатель на первый элемент списка.

bottom – указатель на последний элемент списка.

size – количество элементов в списке.

Метод print позволяет вывести на экран элементы списка;

Метод addtop(x) – добавляет целое число х в начало списка;

Метод addbottom(x) – добавляет целое число х в конец списка;

Метод deltop – удаляет первый элемент списка;

Метод delbottom – удаляет последний элемент списка;

Конструктор create – дает полям начальное значение;

Деструктор destroy – уничтожает список.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: