Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Objekte direkt verketten???
Died12 - Mo 18.08.08 14:49
Titel: Objekte direkt verketten???
Hallo Liebe Delphi Community,
Ich besuche die 13. Klasse eines Gymnasiums und bin wirklich nicht grade ein Ass in Informatik. Wir haben uns in der Vergangenheit mit der Klasse TList in Form einer Vokabelliste auseinandergesetzt. Nun sollen wir bis Freitag folgende Aufgabe lösen die auch noch benotet wird und ich bitte euch um Hilfe:
Die Klasse TList stellt eine Verwaltungsstruktur für Listenobjekte zur Verfügung. Die Objekte sind zwar logisch verkettet, tatsächlich jedoch sind sie in die Liste "eingehängt". Als Alternative bietet es sich an, die Objekte direkt zu verketten, indem jedes Listenobjekt einen Verweis auf seinen Vorgänger erhält.
1)Formulieren Sie eine solche Alternative unter Benutzung von Hat-,Ist- und Kennt Beziehung.
2) Erstellen Sie ein zugehöriges Klassendiagramm.
3) Implementieren Sie diese Alternative.
Keine Idee wie ich das realisieren kann. Bitte erklärt es mir.
Narses - Di 19.08.08 20:59
Titel: Re: Objekte direkt verketten???
Moin und :welcome: im Forum!
Died12 hat folgendes geschrieben: |
Ich besuche die 13. Klasse eines Gymnasiums und bin wirklich nicht grade ein Ass in Informatik.
[...]
Keine Idee wie ich das realisieren kann. |
Vielleicht das "falsche" Fach gewählt? :nixweiss: Manchmal hilft´s auch einfach, wenn man zuhört, was der Lehrer im Unterricht so erzählt... :zwinker:
sorry, aber für Null-Plan-Fragen muss man auch einen Spruch kassieren können *g*
Died12 hat folgendes geschrieben: |
| Nun sollen wir bis Freitag folgende Aufgabe lösen die auch noch benotet wird und ich bitte euch um Hilfe: |
Vorab: du kannst sicher nicht erwarten, dass wir für dich deine Hausaufgaben machen. :| Wenn sie auch noch benotet werden, wäre das sogar ein Betrugsversuch, nur mal zum drüber nachdenken. :idea:
Died12 hat folgendes geschrieben: |
Als Alternative bietet es sich an, die Objekte direkt zu verketten, indem jedes Listenobjekt einen Verweis auf seinen Vorgänger erhält.
[...]
Bitte erklärt es mir. |
Es geht hier um eine sogenannte
verkettete Liste [
http://de.wikipedia.org/wiki/Verkettete_Liste]. Das könnte man in Delphi etwa so abbilden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| type TMyObject = class(TObject) private FText: String; FNext: TMyObject; public property Text: String read FText write FText; property Next: TMyObject read FNext write FNext; end; |
Das Beispiel oben ist nur zur Veranschaulichung gedacht (es wird sich so nicht verwenden lassen, ich habe absichtlich einen wichtigen Teil weggelassen, den der Compiler braucht, damit er das "versteht"; aber ein bischen was sollst du schließlich auch noch machen ;)).
cu
Narses
Inicus63 - Mi 20.08.08 11:57
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113:
| . . .
type TListe = class (TObject) private hListe: TList; AktPos: Integer; public constructor Create; virtual; destructor Destroy; override; property AktElement: TListe read FNext write FNext procedure Append (Elem: TObject); virtual; procedure Insert (Elem: TObject); virtual; procedure Delete; virtual; function GetElement: TObject; virtual; procedure First; virtual; procedure Last; virtual; procedure Previous; virtual; procedure Next; virtual; function IsEmpty: Boolean; virtual; function IsFirst: Boolean; virtual; function IsLast: Boolean; virtual; end;
implementation
constructor TListe.Create; begin inherited Create; hListe := TList.Create; AktPos := -1; end;
destructor TListe.Destroy; begin hListe.Destroy; inherited Destroy end;
procedure TListe.Append (Elem: TObject); begin hListe.Add (Elem); AktPos := hListe.Count-1; end;
procedure TListe.Insert (Elem: TObject); begin if not Self.IsEmpty then begin hListe.Insert (AktPos, Elem); AktPos := hListe.IndexOf (Elem) end else Self.Append (Elem) end;
procedure TListe.Delete; begin if not IsEmpty then begin hListe.Delete (AktPos); if AktPos >= hListe.Count then AktPos := hListe.Count-1 end; end;
function TListe.GetElement: TObject; begin if not IsEmpty then GetElement := hListe.Items[AktPos] end;
procedure TListe.First; begin If AktPos >= 0 then AktPos := 0 end;
procedure TListe.Last; begin if AktPos >= 0 then AktPos := hListe.Count-1; end;
procedure TListe.Previous; begin if AktPos >= 1 then AktPos := AktPos-1; end;
procedure TListe.Next; begin if AktPos <= hListe.Count-2 then AktPos := AktPos+1; end;
function TListe.IsEmpty: Boolean; begin IsEmpty := (AktPos <= -1) end;
function TListe.IsFirst: Boolean; begin IsFirst := (AktPos = 0) end;
function TListe.IsLast: Boolean; begin IsLast := (AktPos = hListe.Count-1) end;
end. |
So müsste der gesamte Code aussehen, nur wie implementiere ich da jetzt die verkettete Liste ein?
Moderiert von
Christian S.: Delphi-Tags hinzugefügt
Gausi - Mi 20.08.08 12:05
Wenn du eine verkettete Liste haben willst, dann musst du vom Delphi-Typ TList weg. Denn das heißt zwar Liste, ist aber ein Array.
Narses hat da die ersten Ansätze geliefert. In eine Liste kommen Objekte rein, die jeweils den Vorgänger und Nachfolger in der Liste speichern. Die Liste muss dann diese "Zeiger" auf Vorgänger und Nachfolger ändern, wenn Daten/Objekte angehängt, eingefügt oder gelöscht werden. Die Methoden sind dann in etwa die, die du da auch schon hast. Aber das mit TList ist Murks.
Died12 - So 24.08.08 22:35
Titel: Thema verkettete Liste
Hallo allerseits!!
Ersteinmal danke für die kompetente Hilfe. Ich wollte jedoch nur einaml anmerken das ich keinen gebeten habe meine Hausaufgaben zumachen. Ich habe mir ienfach schnelle Hilfe erhofft weil unser Kurs nicht grade der Beste ist und wir auch nciht so recht mit unserer Lehrerin klar kommen. Deswegen jedoch direkt wegen eines Betrugsverscuhes angeklagt zu werden habe ich nicht gedacht :shock: :shock: !!
Naja wie dem auch sei vielen Dank nochmal und wenn ich noch einmal Probleme haben sollte wende ich mich vertrauensvoll an das Forum.
mfG Andre
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!