Вот условие:
"Описать класс КОЛЬЦЕВОЙ СПИСОК из произвольных объектов и реализовать действия над списками:
1) Начать работу
2) Длина списка
3) Перейти к следующему элементу
4) Текущий элемент
5) Вставить элемент
6) Удалить элемент
Описать класс ЭЛЕМЕНТ на базе начального объекта, который имеет методы "показать" и "равно", и решить задачу вычисления максимального колличества равных элементов списка, идущих подряд.
Решить задачу для элементов, что вмещают в себе массивы заданного размера."
Описание классов у меня есть и вроде правильное. А вот с самой програмкой не могу разобраться:
Код: Выделить всё
const q=3;
type
AnyRef = ^AnyObject;
AnyObject = Object
public
Constructor Init;
Destructor Done;
end;
Constructor AnyObject.Init;
begin
end;
Destructor AnyObject.Done;
begin
end;
type
rlist = ^relem;
relem = record
obj: AnyRef;
next: rlist
end;
type
List = Object(AnyObject)
r: rlist;
public
Constructor RLInit;
Function Len: integer;
Procedure Next;
Function Current: AnyRef;
Procedure Insert;
Procedure Delete;
Destructor RLDone;
end;
Constructor List.RLInit;
begin
r:=nil
end;
Function List.Len: integer;
var i: word;
p: rlist;
begin
i:=0;
p:=r;
if p<>nil then
repeat
p:=p^.next;
i:=i+1
until p=r;
Len:=i
end;
Procedure List.Next;
begin
if r<>nil then
begin
r:=r^.next;
end
else
begin
writeln('Next: Spysok pust');
halt
end;
end;
Function List.Current: AnyRef;
begin
if r<>nil then
begin
Current:=r^.obj;
end
else
begin
writeln('Current: Spysok pust');
halt;
Current:=nil;
end;
end;
Procedure List.Insert;
var p: rlist;
n: AnyRef;
begin
new(p);
if r=nil then
begin
p^.obj:=n;
p^.next:=p;
end
else
begin
p^:=r^;
r^.obj:=n;
r^.next:=p;
end;
r:=p;
end;
Procedure List.Delete;
var p: rlist;
begin
if r=nil then
begin
writeln('Delete: Spysok pust');
halt
end;
if r^.next=r then
begin
p:=r;
r:=nil
end
else
begin
p:=r^.next;
r^:=p^
end;
dispose(p)
end;
Destructor List.RLDone;
var p,p1: rlist;
n: AnyRef;
begin
p:=r;
while p<>nil do
begin
n:=p^.obj;
p1:=p;
p:=p^.next;
dispose(p1);
end;
r:=nil;
end;
type M = array [1..q] of integer;
type
Element = Object(AnyObject)
mas: M;
public
Constructor ElemInit;
Procedure Show;
Function Equals(elem: Element): boolean;
Destructor ElemDone;
end;
Constructor Element.ElemInit;
var mas1: M;
begin
mas:=mas1;
end;
Procedure Element.Show;
var j: integer;
begin
for j:=1 to q do
begin
write(mas[j]);
end;
end;
Function Element.Equals(elem: Element): boolean;
var mas1: M;
h: integer;
begin
for h:=1 to q do
begin
if mas[h]=mas1[h] then
begin
Equals:=true;
end
else
begin
Equals:=false;
end;
end;
end;
Destructor Element.ElemDone;
begin
end;
{-----------------------------------------------------------------------}
var msv: M;
sp,sp1: List;
k,l,s: integer;
elem: Element;
begin
sp.RLInit;
sp1.RLInit;
write('Vvedite dlinu spyska = ');
read(l);
for k:=1 to l do
begin
msv.Insert(elem);
end;
end.
Искала-искала информацию о элементах-массивах, но ничегошеньки не нашла( Поэтому прошу вас, помогите разобраться, что к чему.
Заранее спасибо большое!