![]() |
|
#1
|
|||
|
|||
![]() Здравствуйте, Уважаемые. Есть следующая задача, реализовать двунаправленный список с головным элементом. Внутри каждого элемента должен находиться некоторый объект. Есть ли годные мануалы по созданию таких списков? У меня программа постоянно вылетает с экзепшенами, связанными с ошибками памяти, хотя первым делом я вызываю конструктор для объекта. В общем, кто сталкивался с такими списками, напишите, пожалуйста, простейший пример, или скиньте ссылочку на сабж, заранее благодарен.
P.S. Я пишу пакмана, именно в него надо внедрить этот список, пока ничего, кроме как сделать с его помощью таблицу рекордов не придумал. Т.е. есть список - рекорды, в каждом элементе есть объект, рекорд, содержащий поля имя, набранные очки и рейтинг в топе игроков. Если есть другие идеи по области использования в данной игре списков - поделитесь ![]() P.P.S. Как сделать так, чтобы экзешник нельзя было запустить дважды? Т.е. чтобы программа писала что-нибудь вроде " Нельзя запустить, так как одна копия продукта уже запущена". P.P.P.S. Слышал про Now, в качестве альтернативы системного таймера, также интересует этот вопрос, кто знает, огромная просьба - расписать в кратце. |
#2
|
||||
|
||||
![]() Ну а почему готовым решением не воспользоваться? TList для этого и предназначен.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
![]() Задача курсовой работы не позволяет
![]() Надо именно свой список, к сожалению.. |
#4
|
||||
|
||||
![]() Ну вот держите, когда-то писал для паскаля:
Код:
Unit DBase; interface Type TDic = record ID: Integer; Context: String[50]; DicName: String[20]; end; PDicList = ^TDicList; TDicList = record Data: TDic; Prev,Next: PDicList; end; TDictionary = object FileName: String; Items,First,Last: PDicList; constructor Create; procedure Add(id: Integer; Context, DicName: String); procedure Load(FN: String); procedure Save(FN: String); function GetContext(id: Integer): String; function GetID(Context, DicName: String): Integer; end; TData = record ID: Integer; ProductionID: Integer; Mark: String[50]; Date: String[10]; Completed: Boolean; end; PDataList = ^TDataList; TDataList = record Data: TData; Prev,Next: PDataList; end; TDatabase = object FileName: String; Items: PDataList; procedure Add(id, ProductionID: Integer; Mark,Date: String; Completed: Boolean); procedure Load(FN: String); procedure Save(FN: String); end; implementation constructor TDictionary.Create; begin Items := nil; FileName := 'Dictionary.dat'; end; procedure TDictionary.Add(id: Integer; Context, DicName: String); Var P: PDicList; begin New(P); P^.Data.ID := id; P^.Data.Context := Context; P^.Data.DicName := DicName; P^.Prev := nil; P^.Next := nil; if Items <> nil then begin Items^.Next := P; P^.Prev := Items; end else First := P; Items := P; Last := P; end; procedure TDictionary.Load(FN: String); Var DicFile: file of TDic; Rec: TDic; begin FileName := FN; Assign(DicFile, FileName); {$I-}Reset(DicFile);{$I+} if IOResult <> 0 then Exit; while not Eof(DicFile) do begin Read(DicFile, Rec); Add(Rec.ID, Rec.Context, Rec.DicName); end; Close(DicFile); end; procedure TDictionary.Save(FN: String); Var DicFile: file of TDic; P: PDicList; begin Assign(DicFile, FN); Rewrite(DicFile); P := Items; while P <> nil do begin Write(DicFile, P^.Data); P := P^.Prev; end; Close(DicFile); end; function TDictionary.GetContext(id: Integer): String; Var P: PDicList; begin GetContext := #0; P := Items; while P <> nil do begin if P^.Data.ID = id then begin GetContext := P^.Data.Context; Exit; end; P := P^.Prev; end; end; function TDictionary.GetID(Context,DicName: String): Integer; Var P: PDicList; begin GetID := -1; P := Items; while P <> nil do begin if (P^.Data.Context = Context) and (P^.Data.DicName = DicName) then begin GetID := P^.Data.ID; Exit; end; P := P^.Prev; end; end; procedure TDatabase.Add(id, ProductionID: Integer; Mark,Date: String; Completed: Boolean); Var P: PDataList; begin New(P); P^.Data.ID := id; P^.Data.ProductionID := ProductionID; P^.Data.Mark := Mark; P^.Data.Date := Date; P^.Data.Completed := Completed; P^.Prev := nil; P^.Next := nil; if Items <> nil then begin Items^.Next := P; P^.Prev := Items; end; Items := P; end; procedure TDatabase.Load(FN: String); Var DataFile: file of TData; Rec: TData; begin FileName := FN; Assign(DataFile, FileName); {$I-}Reset(DataFile);{$I+} if IOResult <> 0 then Exit; while not Eof(DataFile) do begin Read(DataFile, Rec); Add(Rec.ID, Rec.ProductionID, Rec.Mark, Rec.Date, Rec.Completed); end; Close(DataFile); end; procedure TDatabase.Save(FN: String); Var DataFile: file of TData; P: PDataList; begin Assign(DataFile, FN); Rewrite(DataFile); P := Items; while P <> nil do begin Write(DataFile, P^.Data); P := P^.Prev; end; Close(DataFile); end; end. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
![]() Спасибо, Вам, буду разбираться.
|