Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2013, 20:20   #1
v.pro
Новичок
Джуниор
 
Регистрация: 25.12.2013
Сообщений: 1
Радость Кольцевой список

Всем добрый вечер! Помогите, пожалуйста, доделать задание.
Вот условие:

"Описать класс КОЛЬЦЕВОЙ СПИСОК из произвольных объектов и реализовать действия над списками:
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.

Если бы элементы не состояли из массивов, а просто из цифр, то другое дело. А я с информатикой, увы, не дружила никогда, а тем более с ООП. Мне одногрупник подсказал, что вроде внутри программы в цикле for k:=1 to l создать по одному об’єкту класса Element (пусть будет elem), заполнить его mas, и вставить его в список: "msv.Insert(elem)", а потом сравнивать elem и elem^.next (или что-то вроде того). Но я так и не разобралась, что он имел в виду...
Искала-искала информацию о элементах-массивах, но ничегошеньки не нашла( Поэтому прошу вас, помогите разобраться, что к чему.

Заранее спасибо большое!
v.pro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кольцевой список Jigedara Помощь студентам 5 07.05.2013 15:50
Кольцевой список Fatalita Помощь студентам 0 28.11.2012 17:18
Си. Кольцевой список F_A_N_Alex Помощь студентам 3 06.10.2009 08:20
Кольцевой список counter Общие вопросы C/C++ 4 20.10.2008 08:09