Объект-список
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 – уничтожает список.