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

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

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2014, 19:19   #1
Елена1995
Пользователь
 
Регистрация: 14.04.2014
Сообщений: 10
Восклицание Двунаправленный список

Как добавить элементы в контейнер, который создан на основе двунаправленного упорядоченного замкнутого списка с заголовком?
Елена1995 вне форума Ответить с цитированием
Старый 26.04.2014, 19:55   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А как ты делаешь это с обычным списком?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.04.2014, 20:40   #3
Елена1995
Пользователь
 
Регистрация: 14.04.2014
Сообщений: 10
По умолчанию

не в объектном стиле понятно...а вот в объектном что-то не получается
Елена1995 вне форума Ответить с цитированием
Старый 26.04.2014, 20:41   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну а показать что ты имеешь ввиду кодом можешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.04.2014, 20:45   #5
Елена1995
Пользователь
 
Регистрация: 14.04.2014
Сообщений: 10
По умолчанию

Код:
unit Unit6;

interface
uses Unit5;
 type
TShopSpytnicTVContainer=class

Private

Name: string;
Adress: string;
First:TequipmentTV;
Count: integer;

Public

Constructor Create(aName, aAdress:string; aCount:integer);
Function GetFirst: TequipmentTV;
Procedure Add(acost:Integer; aModel:string);
//Function Delete (aModel:string):boolean;
//Procedure Save;
//Procedure Load;

End;

implementation

Constructor TShopSpytnicTVContainer.Create(aName, aAdress:string; aCount:integer);
begin
  First:= TequipmentTV.Create (nil,nil,nil,0,'', nil,First) ;
  Name:=aName;
  Adress:=aAdress;
  count:=0;
end;


Function TShopSpytnicTVContainer.GetFirst: TequipmentTV;
begin
  result:=First;
end;

Procedure TShopSpytnicTVContainer.Add(acost:Integer; aModel:string);
var Temp,pnew: TequipmentTV;
begin
вот это реализовать нужно на основе двунаправленного упорядоченного замкнутого списка с заголовком

Последний раз редактировалось Stilet; 26.04.2014 в 21:33.
Елена1995 вне форума Ответить с цитированием
Старый 26.04.2014, 21:38   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это и все наработки?? О_о
Ладно, вопрос второй: Можно ли использовать контейнеры типа TStringList в качестве ядра для списка, или от тебя требуют что-то типа: http://www.programmersforum.ru/showthread.php?t=87357
Если можно то могу показать приблизительную наработку похожей задачи: http://www.programmersforum.ru/showthread.php?t=92621
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.04.2014, 21:52   #7
Елена1995
Пользователь
 
Регистрация: 14.04.2014
Сообщений: 10
По умолчанию

есть еще наработки. но не скидывала их........требуют что-то типа: http://www.programmersforum.ru/showthread.php?t=87357

покажите пожалуйста, если не сложно

Последний раз редактировалось Stilet; 26.04.2014 в 22:09.
Елена1995 вне форума Ответить с цитированием
Старый 26.04.2014, 22:19   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм... Попробую сходу переделать под ООП тот пример:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
 TDataTipe=integer;
 PTItem=^TItem;
 TItem=Record
  Data:TDataTipe;
  Prev,Next:PTItem;
 end;

 TListCircle=class
  private
   Head,CurItem:PTItem;
  public
    Function Ins(PrevItem:PTItem;AData:TDataTipe):PTItem;
    Function Sort:boolean;
    function fill:boolean;
    function outt:boolean;
    destructor Free;
 end; 
 
// Освобождаем ******************************
 destructor TListCircle.Free;
 var i:integer;p:PTItem
 begin
   CurItem:=Head;
   repeat
     p:=CurItem^.Next;
     dispose(curitem);
     CurItem:=p;
   until CurItem=Head; 
   dispose(curitem);
 end;

//Добавляем в список**********************
  Function TListCircle.Ins(PrevItem:PTItem;AData:TDataTipe):PTItem;
  begin
    new(result);
    result^.Data:=AData;
    Result^.Prev:=PrevItem;
    Result^.Next:=nil;
      if PrevItem<>nil then begin
        if (PrevItem^.Next<>nil) then
         PrevItem^.Next^.Prev:=Result;
        PrevItem^.Next:=Result;
      end;
  end;

// Наполняем   **************************
 function TListCircle.fill:boolean;
 var i:integer;
 begin
   Head:=ins(nil,0);
   CurItem:=First;
   for i:=1 to 10 do begin
     CurItem:=ins(CurItem,(20+random(100)));
   end;
 end;

// Выводим ******************************
 function TListCircle.outt:boolean;
 var i:integer;
 begin
   CurItem:=Head;
   repeat
     write(curitem^.data:5);
     CurItem:=CurItem^.Next;
   until CurItem=Head;
 end;

// Сортируем ***************************
 Function TListCircle.Sort:boolean;
 var q:PTItem;s:TDataTipe;
 begin
  q:=Head;
 repeat
   CurItem:=q;
   repeat
    if CurItem^.Data<q^.Data then begin
      s:=CurItem^.Data;
      CurItem^.Data:=q^.Data;
      q^.Data:=s;
    end;
    CurItem:=CurItem^.Next;
    until CurItem<>Head;
   q:=q^.Next;
  until q<>Head;
 end;


begin
with TListCircle.Create do begin
   fill;
   outt;
   writeln;
   Sort;
   outt;
 free;
end;
   Readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Нда, только с сортировкой может бяка случиться, если захочешь кучу полей к элементу прикрутить.
в моем примере тут только одно поле, и перестановку делать проще.
Иначе придется изголяться перемещая указатели. Но уже поздно, и я хочу спатки, так что оставляю разбор полетов тебе. Впрочем я бы на твоем месте завтра на свежую голову продолжил. Утро вечера мудренее.
I'm learning to live...

Последний раз редактировалось Stilet; 26.04.2014 в 22:22.
Stilet вне форума Ответить с цитированием
Старый 26.04.2014, 22:47   #9
Елена1995
Пользователь
 
Регистрация: 14.04.2014
Сообщений: 10
По умолчанию

спасибо...но мне нужно это все в одной процедуре и в объектном стиле ....а такие наброски у меня есть
Елена1995 вне форума Ответить с цитированием
Старый 27.04.2014, 08:45   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в одной процедуре и в объектном стиле
Так не получится. ООП не предполагает работу в виде одной монолитной поцедуры. По крайней мере в Делфи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++. Двунаправленный список M_Asja Помощь студентам 4 15.01.2013 18:47
Двунаправленный список de_coder Паскаль, Turbo Pascal, PascalABC.NET 2 15.10.2012 12:41
двунаправленный список triple56 Общие вопросы C/C++ 0 18.12.2011 19:33
Двунаправленный список grave123 Общие вопросы C/C++ 1 08.03.2010 10:44
Двунаправленный список dip Помощь студентам 3 02.03.2010 12:16