Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Items eines List Objektes addieren (https://www.delphipraxis.net/185940-items-eines-list-objektes-addieren.html)

Nugi89 20. Jul 2015 15:06

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 :(

mkinzler 20. Jul 2015 15:15

AW: Items eines List Objektes addieren
 
Bei Count iterierst Du durch die Einträge. Beim eigentlichen Summieren nimmst Du immer den gleichen Wert.

Bambini 20. Jul 2015 15:20

AW: Items eines List Objektes addieren
 
Zitat:

Zitat von Nugi89 (Beitrag 1309288)
Delphi-Quellcode:
 
  for i := 0 to count - 1 do
  begin
    gesamt:= gesamt + Item.wert; <--(Item.wert) hier wird mir dieser riesige wert übergeben
  end;

Das Item Objekt ist auch nicht zugewiesen. Sollte eigentlich eine Schutzverletzung geben.
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.

DeddyH 20. Jul 2015 15:53

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;

haentschman 20. Jul 2015 16:12

AW: Items eines List Objektes addieren
 
Hallo...
Zitat:

TListe = class(TObject)
...ähmm.:gruebel: TListe ist keine Liste.
Delphi-Quellcode:
for i := 0 to count - 1 do
  begin
    gesamt:= gesamt + Item.wert; <--(Item.wert) hier wird mir dieser riesige wert übergeben
  end;
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.

Schreibfehler?

PS: Warum wird mit TItem gearbeitet und nicht direkt mit den Werten?

mkinzler 20. Jul 2015 16:14

AW: Items eines List Objektes addieren
 
Zitat:

Eigentlich kann das gar nicht compilieren weil TObject kein Count hat
Er implementiert diese Funktion aber für seinen Klasse

haentschman 20. Jul 2015 16:17

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

DeddyH 20. Jul 2015 16:18

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:

Delphi-Quellcode:
function TListe.count: integer;

[/edit]

haentschman 20. Jul 2015 16:20

AW: Items eines List Objektes addieren
 
@DeddyH:
hab ich was an den Augen? :gruebel:
Delphi-Quellcode:
TListe = class(TObject)
Nachtrag: Ich nehme alles zurück. Ich geh dann mal aus der Sonne. :oops:

Sir Rufo 20. Jul 2015 16:21

AW: Items eines List Objektes addieren
 
Zitat:

Zitat von haentschman (Beitrag 1309303)
@DeddyH:
hab ich was an den Augen? :gruebel:
Delphi-Quellcode:
TListe = class(TObject)

Ja, schau den ersten Beitrag an

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 18:30 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz