Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Динамический список (массив) элементов (объектов)
Форум программистов > Системное программирование > Delphi и Pascal > Delphi - FAQ
Bap
Здраствуйте, у меня возникла ситуация написать короткую программу по созданию динамического списка элементов с использованием классов.
Долго ковырялся и не чего толком не сделал, суть в том что визуальные компонетов использовать не надо ... начал как всегда с создания TMassive с свойствами: количество элементов в массиве (списке), первый элемент, собственно ссылка на элемент (TElement), функция создания массива, удаления, поиска и добавления элемента в массив. TElement: идентификато (короткое название пока), ссылка на следующий элемент (может кинуть это в массив????), позиция в массиве (может ее тоже туда dry.gif в массив ), функции иннициализации и удаления...

народ хелп это надо срочно на штомповать ... blink.gif
sax_ol
Это "курсач"?
Bap
Не курсач ... мне надо посматреть как это делается ... везде темы на эту лажу есть, а как надо и правильно ну нету ... а то набодяжу ... если есть пример в курсаче давай посматрю или проще выложи сюда будет разбирать .... плтззззззззз blink.gif
sax_ol
Ну и что у вас не получается? показывайте свои пробы.
Bap
Вот мой плохой и корявый код:
PElement=^TElement;
    TElement=object
      info:string;
      n:integer;
      last:PElement;
      constructor create;
    end;
    PMassive=^TMassive;
    TMassive=object
        { указатели на первое и последнее звенья списка }
        first, last:PElement;
        { число элементов массива }
        count : Integer;
        { Конструктор создает новый пустой массив }
        constructor create;
        destructor destroy;
        { Функция, выдающая текущий размер массива }
        function length : Integer; virtual;
        { Функции индексации }
        function get(i:Integer):string; virtual;
        procedure put(i:Integer; e:TElement); virtual;
        { Процедура добавления нового элемента в конец массива }
        procedure add(e:TElement); virtual;
        { Вспомогательная функция поиска элемента по номеру }
        function find(i : Integer):PElement;
    end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
   constructor TMassive.create;
    begin
       first:= nil;  last:= nil;  count:=0;
    end;
    destructor TMassive.destroy;
        var current, save:PElement;
    begin
        current:=first;
        while current <> nil do begin
            save:=current;
            current:=current^.next;
            dispose(save);
        end;
        first:=nil;  last:=nil;  count:=0;
    end;

    function TMassive.length:Integer;
    begin
        length:=count
    end;

    function TMassive.find(i : Integer) : PElement;
        var current : PElement;
    begin
       if i < 1 then begin
          ShowMessage('Ошибка индексации: выход индекса!');
          halt(100)
       end;
       current := first;
       while (i > 1) and (current <> nil) do begin
           current := current^.next; dec(i)
       end;
       if current = nil then begin
          ShowMessage('Ошибка индексации: выход индекса');
          halt(100)
       end;
       find := current
    end;

    function TMassive.get(i : Integer) : string;
    begin
       get := find(i)^.info
    end;

    procedure TMassive.add(e:TElement);
        var newElement : PElement;
    begin
        new(newElement);
        newElement^.info:='{ту та полный косяк после пива}';
        newElement^.:=nil;
        if first = nil then
            first := newElement
        else
        last^.next := newElement
        last:=newElement;
        inc(count)
    end;
sax_ol
Это не код, это фигня полная. Тут очень много всякой ерунды, что даже говорить неохота.
Вы скажите зачем вам реализация через "next"?
Bap
а как ??? я че тебе блин фома ...если бы я знал тобы вообще сюда не зашел!!! процедура вводнового вообще не доделана ... брал с примера ...
надо пересмотреть начало а остальное будет видно ...

Модератор: Выражения выбираем, не в пивной, ку? Если вы сюда зашли и вам пытаются помочь, то как минимум надо уважать.
sax_ol
Цитата(Bap @ 20:08:2008 - 12:06) *
а как ???
Например так как это сделано в TStringList или TObjectList.
Bap
Все успокоился! TObjectList - возможно, хорошо посмотрю ... есть где для примера посматреть, что к чему что бы я вкурс дела влетел??? blink.gif
не буду ругтася матом!! чесное пионерское!
sax_ol
Посмотреть можно (нужно) на саму реальзацию TObjectList, т.е. в VCL, уверяю вас там все просто.
Bap
blink.gif дома напишу посмотрим что к чему привело!!!
Bap
... посмотрел это же компонента не стандартная а мне надо стандартная по TStringList а смысл, проще написать консольное приложение....
кто может помочь при написаниии классов TMassive и TElement а то я зароюсь мне еще программить!!! blink.gif
sax_ol
Цитата(Bap @ 21:08:2008 - 06:54) *
это же компонента
Это ваще не "компонента"

На сколько я понял вам просто нужен готовый код. Врядли вы его тут найдете.
Bap
вот и разобрались что хоть в чем-то!! ниче я разбирусь в этом TObjectList тогда скину и посмотрим где что не так!!!

blink.gif
sax_ol
Цитата(Bap @ 21:08:2008 - 07:30) *
разбирусь в этом TObjectList тогда скину и посмотрим где что не так
Этот TObjectList работает во благо уже не первую пятилетку, поэтому искать в нем "где что не так", по меньшей мере бестолку.
Bap
я же начинающий программер, сам в основном программирую на 1С! И с делфи хочу больше разобратся надо!!! biggrin.gif
sax_ol
Это похвально, вот поэтому не поленитесь и просмотрите код этих типов.
Bap
blink.gif было отложено в долгий и прАтивный ящик!!! - сдавал конфигу!!!

кто-нибудь скинет ссылку на использование TObjectList в примерах???? Плизззз!!!
etc
$(DELPHI)\Demos
Bap
Не понял (верней не дошло)! где-то на портале есть документация???
Morpheus
нет, имееться в виду это на локальном компе , в папке где установлен делфи( $(DELPHI) ) есть папка с примерами (Demos)
Bap
Отлично, посмотрю!!!
//********************************************
Morpheus а по чему ты такой злой модератор??
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.