![]() |
Items eines List Objektes addieren
Hallo,
habe folgendes Problem: - ich habe mir ein Programm erstellt in dem ich einige werte in ein Memofeld übergebe. mein problem liegt darin das ich bestimmte werte nicht addieren kann bzw es wird mir ein relativ großer wert ausgegeben. ich habe mir die werte in einer Liste abgespeichert. nur das addieren funzt nicht so wie es sollte. Hier mal der Quelltext:
Code:
TItem = class(TObject)
public next: TItem; wert: real; end; TListe = class(TObject) private first: TItem; last: TItem; public gesamt: real; procedure add(wert: real); function addieren(gesamt: real):real; function count(): integer; end; implementation { TListe } procedure TListe.add(wert: real); //Item hinzufügen var Item: TItem; begin Item:= TItem.Create; Item.wert:= wert; if first = Nil then begin first:= Item; last:= Item; end else begin last.next:= Item; last:= Item; end; end; function TListe.addieren(gesamt: real):real; //Items addieren var i: integer; Item: TItem; begin gesamt:= 0; i:= count; for i := 0 to count - 1 do begin gesamt:= gesamt + Item.wert; <--(Item.wert) hier wird mir dieser riesige wert übergeben end; Result:= gesamt; end; function TListe.count: integer; //Zählen der Items var i: integer; Item: TItem; begin i:= 1; Item:= first; if first = Nil then begin i:= 0; end else begin while Item.next <> Nil do begin i:= i+1; Item:= Item.next; end end; result:= i; end; end. ich hoffe es kann mir jemand helfen :( |
AW: Items eines List Objektes addieren
Bei Count iterierst Du durch die Einträge. Beim eigentlichen Summieren nimmst Du immer den gleichen Wert.
|
AW: Items eines List Objektes addieren
Zitat:
Vielleicht sollte es noch eine Funktion geben die mit TListe.Item(AIndex : Integer) : TItem; auch das angesprochene Item zurück gibt. Auch werden die erzeugten TItems nie freigegeben. |
AW: Items eines List Objektes addieren
Das sieht eh komisch aus, wozu ein Parameter und ein Funktionsergebnis, die am Ende dasselbe enthalten sollen? Aus dem Kopf würde ich das etwa so machen:
Delphi-Quellcode:
function TListe.addieren: real;
var Item: TItem; begin Result := 0; Item := First; while Assigned(Item) do begin Result := Result + Item.wert; Item := Item.Next; end; end; |
AW: Items eines List Objektes addieren
Hallo...
Zitat:
Delphi-Quellcode:
Eigentlich kann das gar nicht compilieren weil TObject kein Count hat und mit Item statt First bzw. der Zuweisung derselben wie in #4 gearbeitet wird.
for i := 0 to count - 1 do
begin gesamt:= gesamt + Item.wert; <--(Item.wert) hier wird mir dieser riesige wert übergeben end; Schreibfehler? PS: Warum wird mit TItem gearbeitet und nicht direkt mit den Werten? |
AW: Items eines List Objektes addieren
Zitat:
|
AW: Items eines List Objektes addieren
wo implementiert er count? Count bezieht sich in diesem Falle auf TListe. Das ist aber keine Liste.
Delphi-Quellcode:
function TListe.addieren(gesamt: real):real; //Items addieren
var i: integer; Item: TItem; begin gesamt:= 0; i:= count; for i := 0 to count - 1 do |
AW: Items eines List Objektes addieren
Außerdem ist das eine einfach verkettete Liste, also doch Liste, nur eben nicht von TList o.ä. abgeleitet und nicht (ohne selbst zu implementierende Verrenkungen) indiziert ansprechbar.
[edit] Und hier ist der Count: Zitat:
|
AW: Items eines List Objektes addieren
@DeddyH:
hab ich was an den Augen? :gruebel:
Delphi-Quellcode:
Nachtrag: Ich nehme alles zurück. Ich geh dann mal aus der Sonne. :oops:
TListe = class(TObject)
|
AW: Items eines List Objektes addieren
Zitat:
Wenn du es nicht findest, dann STRG-F im Browser und suche alle Stellen mit "TListe.count" |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz