Тема: Кільцевий список
Усім доброго дня! Будь ласка, допоможіть мені з такою задачою:
Описати клас КІЛЬЦЕВИЙ СПИСОК з довільних об'єктів та реалізувати дії над списками
1) Почати роботу
2) Довжина списку
3) Перейти до наступного елемента
4) Поточний елемент
5) Вставити елемент
6) Видалити елемент
Описати клас ЕЛЕМЕНТ на базі початкового об'єкта, який має методи "показати" та "дорівнює", та розв'язати задачу обчислення максимальної кількості рівних елементів списку, що йдуть підряд.
Розв'язати задачу для елементів, які містять масиви заданого розміру.
Ось, власне, реалізація кільцевого списку. Операції Init, Next та Current написала сама, тому до кінця не впевнена в їх правильності.
unit IntRList;
interface
type
  rlist = ^relem;
  relem = record
            d: integer;
            next: rlist
          end;
procedure Init(var r: rlist);
function Len(r: rlist): integer;
procedure Next(var r: rlist);
function Current(r: rlist): integer;
procedure Insert(var r: rlist; n: integer);
procedure Delete(var r: rlist);
implementation
procedure Init(var r: rlist);
  begin
    r:=nil
  end;
function Len;
  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 Next(var r: rlist);
  begin
   if r<>nil then begin
     r:=r^.next;  end
   else
     begin
      writeln('Next: Spysok porozhniy');
      halt
     end;
  end;
function Current(r: rlist): integer;
  begin
   if r<>nil then begin
     Current:=r^.d; end
   else
     begin
      writeln('Current: Spysok porozhniy');
      halt;
      Current:=0;
     end;
  end;
procedure Insert;
  var p: rlist;
  begin
    new(p);
    if r=nil then
      begin
        p^.d:=n; p^.next:=p;
      end
    else
      begin
        p^:=r^; r^.d:=n; r^.next:=p;
      end;
    r:=p;
  end;
procedure Delete;
  var p: rlist;
  begin
    if r=nil then begin
      writeln('Delete: Spysok porozhniy');
      halt
    end;
    if r^.next=r then
      begin
        p:=r; r:=nil
      end
    else
      begin
        p:=r^.next; r^:=p^
      end;
    dispose(p)
  end;
 
end.А ось мої намагання розв'язати задачу. Як я зрозуміла умову задачі, то мені треба створити порожній список,  ввести "l" масивів розміру "size", та вставити їх по черзі в список. А потім, вважаючи ці масиви елементами списку, просто порівнювати їх. І у разі рівності збільшувати макс. значення рівних елементів sum на одиничку.
Program Proekt2;
Uses IntRList;
Type
  AnyRef = ^AnyObject;
  AnyObject = Object
                Constructor Initial;
                Destructor Done; Virtual;
              end;
  ElemRef = ^Element;
  Element = Object(AnyObject)
             public
              Procedure Show(s: rlist);
                begin
                 writeln(s);
                end;
              Function Equals(s,s1: rlist): boolean;
                begin
                 if s=s1 then
                  begin
                   Equals:=true;
                  end
                 else
                  begin
                   Equals:=false;
                  end;
                end;
            end;
  Constructor AnyObject.Initial;
    begin
    end;
  Constructor AnyObject.Done;
    begin
    end;
var m: array [1..size] of integer;
    l,k,i,sum: integer;
    spysok: rlist;
begin
 Init(spysok);
 write('Rozmir massyviv = ');
 read(size);
 write('Dovzhyna spysku = ');
 read(l);
 for k:=1 to l do
  begin
   for i:=1 to size do
    begin
     readln(m[i]);
    end;
   Insert(m,k);
   k:=k+1;
   end;
 sum:=0;
 if m=m^.next then
  begin
   sum:=sum+1;
  end;
end.Відкомпілювати програму не вдається (помилка 37, пропущено End а де - не знаю)
Буду дуже вдячна за ваш час і вашу допомогу. Якщо у вас будуть якісь запитання, постараюсь на них відповісти)

