Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListBox Zahlen addieren und dann durch Count teilen (https://www.delphipraxis.net/41123-listbox-zahlen-addieren-und-dann-durch-count-teilen.html)

Toenn 26. Feb 2005 13:37


ListBox Zahlen addieren und dann durch Count teilen
 
Hi,
wie kann ich alle Zahlen einer ListBox addieren und dann durch ListBox1.Count teilen?


Danke,
tuenn

PS: Is dringend ^^

Dani 26. Feb 2005 13:42

Re: ListBox Zahlen addieren und dann durch Count teilen
 
Hi. Strings kannst du mit Delphi-Referenz durchsuchenStrToInt bzw. Delphi-Referenz durchsuchenStrToIntDef in Integers umwandeln. Zum teilen kannst du entweder div oder trunc(Summe / Count) benutzen.

Toenn 26. Feb 2005 13:50

Re: ListBox Zahlen addieren und dann durch Count teilen
 
hmm was is daran falsch:

Delphi-Quellcode:
var i, arsch: Integer;
begin
for i := 1 to ListBox1.ItemIndex do
 arsch := arsch+StrToInt(ListBox1.Items[ListBox1.ItemIndex]);
???

Danke,
toenn

Elite 26. Feb 2005 13:54

Re: ListBox Zahlen addieren und dann durch Count teilen
 
ka, mach`s so:
Delphi-Quellcode:
var
 i, average: integer;
begin
 average := 0;
 for i := 0 to ListBox1.Items.Count-1 do
  average := average + strtoint(ListBox1.Items[i]);
 average := average div Listbox1.Items.Count;
end;
Edit: Bug gefunden: Schaut mal auf das Profil von Toenn, links neben seinem Post. Fällt euch was auf?

Muetze1 26. Feb 2005 13:59

Re: ListBox Zahlen addieren und dann durch Count teilen
 
Moin!

ItemIndex gibt die Eintragsnummer an die gerade selektiert ist (wenn MultiSelect aus ist) oder -1, daher ist die Schleife so falsch.

Durch debuggen hättest du auch sehen können, das dein ItemIndex wahrscheinlich mehr als zu klein wäre um mit der Schleife über alle Items zu laufen.

Auch versuchst du über eine Schleife alle Einträge anzusprechen, benutzt dazu aber in der Schleife ItemIndex - ohne das du ihn irgendwo in der Schleife änderst. Daher nimmt er immer den selben Eintrag.

Deine Variable "Arsch" müsstest du vor der Schleife auf 0 setzen, da es eine lokale Variable ist und diese hat beim Eintritt in die Procedure zufällige Werte und das kann dein Ergebnis verfälschen.

Als Tipps:
Delphi-Quellcode:
ListBox1.Items.Count
Items[i]
MfG
Muetze1

Binärbaum 26. Feb 2005 15:25

Re: ListBox Zahlen addieren und dann durch Count teilen
 
Zitat:

Zitat von Elite
Edit: Bug gefunden: Schaut mal auf das Profil von Toenn, links neben seinem Post. Fällt euch was auf?

[OT]
Das ist kein Bug. Wenn man mal genauer im Profil von Toenn nachschaut, steht dort folgendes als Wohnort:
Düsseldorf Beiträge: 10000
Durch den automatischen Zeilenumbruch rutscht alles nach Düsseldorf in eine neue Zeile und es sieht so aus, als ob der Benutzer 10000 Beiträge hat.
[/OT]

4toms 26. Feb 2005 15:43

Re: ListBox Zahlen addieren und dann durch Count teilen
 
Hausaufgabe abgeschrieben / nicht selbst erstellt.

Setzen, schämen, sechs!

Toenn 26. Feb 2005 21:59

Re: ListBox Zahlen addieren und dann durch Count teilen
 
Hi,
das:
Delphi-Quellcode:
var i, arsch: Integer;
begin
arsch := 0;
for i := 1 to ListBox1.ItemIndex do
arsch := arsch+StrToInt(ListBox1.Items[ListBox1.ItemIndex]);
ShowMessage(IntToStr(ListBox1.Count));
geht. Jedoch kommt raus: 3 stat 3,3333333333.
Wie kann ich die Nachkommastellen anzeigen?

Danke,
Toenn

Muetze1 27. Feb 2005 03:26

Re: ListBox Zahlen addieren und dann durch Count teilen
 
Moin!

Was machst du mit der Variablen Arsch? Hochzählen und dann einfach nicht mehr nutzen? Wie willst du denn den Durchschnitt berechnen wenn du Arsch nicht verwendest?

Wenn du einfach mal einen Blick in die Hilfe geworfen hättest, dann hättest du rausgefunden das dir Count die Anzahl der Einträge in der ListBox angibt und das sind bei dir anscheinend 3 Einträge - somit ist alles korrekt was das Programm ausgibt. Die ListBox enthält keine 3,33333 Einträge - wie sähe denn ein 1/3 Eintrag aus?

Also da helfen dir auch keine Ausgabe von Kommastellen - weil da gibt es einfach keine Kommastellen...

MfG
Muetze1

Toenn 27. Feb 2005 14:01

Re: ListBox Zahlen addieren und dann durch Count teilen
 
Doch das geht. Du verstehst scheinbar nicht was ich machen will :)
Der soll den Durchschnitt berechnen. Alle Zahlen adieren und dann durch ListBox1.Count teilen :).
Die Variable Arsch wird später als ShowMessage rausgeworfen :D
Und 2+3+5 sind 10 und das durch 3 is 3,3333333.

Danke,
Toenn

Muetze1 27. Feb 2005 16:04

Re: ListBox Zahlen addieren und dann durch Count teilen
 
Moin!

Zitat:

Zitat von Toenn
Doch das geht. Du verstehst scheinbar nicht was ich machen will :)

Doch, alles verstanden - aber du scheinst nicht zu lesen was ich schreibe, oder?

Zitat:

Zitat von Toenn
Der soll den Durchschnitt berechnen. Alle Zahlen adieren und dann durch ListBox1.Count teilen :).

Ja, war mir schon seit deinem ersten Post klar.

Zitat:

Zitat von Toenn
Die Variable Arsch wird später als ShowMessage rausgeworfen :D

ok, im Moment machst du mit ShowMessage noch nix mit Arsch - aber ok, belassen wir es mal dabei.

Zitat:

Zitat von Toenn
Und 2+3+5 sind 10 und das durch 3 is 3,3333333.

Auch richtig - und bei deinem vorherigen Post "beschwerst" du dich, das er dir eine 3 ausgibst anstatt 3,33333 - und darauf hin sagte ich dir, das du schliesslich die Anzahl der Zeilen in der ListBox ausgibst - und wenn da eine 2, eine 3 und eine 5 in jeweils einer Zeile steht, dann sind das 3 Zeilen - und die Anzahl der Zeilen gibst du mit deinem Code aus, genau dort:
Delphi-Quellcode:
ShowMessage(IntToStr(ListBox1.Count));
Wo sollte denn da irgendwelche Kommastellen herkommen?

Und um nochmals auf deinen Quellcode zurück zu kommen, welcher so aussah:
Delphi-Quellcode:
var
  i, arsch: Integer;
begin
  arsch := 0;
 
  for i := 1 to ListBox1.ItemIndex do
    arsch := arsch+StrToInt(ListBox1.Items[ListBox1.ItemIndex]);

  ShowMessage(IntToStr(ListBox1.Count));
Dann machst du folgendes:

- setze Variable Arsch auf 0
- Zähle die Variable i von 1 bis zum Index der aktuell ausgewählten Zeile in ListBox
- mit jedem Durchlauf erhöhe die Variable Arsch um den Wert der Zahl in der ausgewählten Zeile
- Zeige die Anzahl der Zeilen in der ListBox in einer MessageBox an.

Dann frage ich mich doch: wo ist bei dem Quellcode auch nur Ansatzweise irgendwas in Richtung deiner Aufgabenstellung zu sehen? Ich hatte dich vorhin schon auf folgendes hingewiesen:

ListBox1.ItemIndex = Index des aktuell ausgewählten Eintrags oder -1 wenn keiner ausgewählt ist
i = Schleifenvariable und wird von 1 aufwärts gezählt - also müsstest du doch i verwenden um jede einzelne Zeile der ListBox anzusprechen und den entsprechenden Wert zu Arsch dazu zu addieren.

Und zu guter letzt: du teilst noch nirgendwo den Inhalt der Variablen Arsch durch die Anzahl der Zeilen in der ListBox.

Ich werde und will dir keinen fertigen Quellcode zu der Aufgabe geben, sonst lernst du nix - und ich hoffe auch das du mich jetzt mal verstehst .... :wink:

MfG
Muetze1

kiar 27. Feb 2005 16:08

Re: ListBox Zahlen addieren und dann durch Count teilen
 
hallo,

ausserdem kann nie 3,33333 rauskommen da der 'arsch' ne integer zahl ist :mrgreen:

raik

roderich 27. Feb 2005 16:16

Re: ListBox Zahlen addieren und dann durch Count teilen
 
@Alle

ich verstehe nicht, wie man sich soviel Mühe mit jemandem geben kann, der zu faul ist, seine Hausaufgaben selbst zu machen und Null Bock hat, sich mit dem gestellten Thema auch nur ansatzweise zu beschäftigen.

Roderich

Muetze1 27. Feb 2005 16:39

Re: ListBox Zahlen addieren und dann durch Count teilen
 
Moin!

Zitat:

Zitat von kiar
ausserdem kann nie 3,33333 rauskommen da der 'arsch' ne integer zahl ist :mrgreen:

Es ist nicht gesagt, dass das Ergebnis der Division wieder "Arsch" zugewiesen wird. Man kann direkt teilen und das Ergebnis ohne Variable gliech als Argument weitergeben.

MfG
Muetze1

killerkarl 27. Feb 2005 17:20

Re: ListBox Zahlen addieren und dann durch Count teilen
 
Delphi-Quellcode:
var i:Integer;
var av:Real;
begin
av:=0;
for i:=0 to Listbox1.items.count-1 do
av:=av+StrToFloat(Listbox1.Items.Strings[i]);
av:=av/listbox1.Items.count;
showmessage(FloatToStr(av));
end;
Das sollte klappen oder nicht?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:53 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-2025 by Thomas Breitkreuz