Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Listbox (https://www.delphipraxis.net/72971-listbox.html)

sigma 10. Jul 2006 13:16


Listbox
 
Hallo ich hab ein Problem ich soll Zahlen in eine Listbox einlesen das hab ich hin bekommen

aber nun soll ich dann noch den görßten wert ausgeben wo in der listbox steht aber ich ich weis nicht wie ich das machen muss

ich denke das ich eine schleife brauch aber wie mach ich das dann


wenn mir jemand helfen kann bin ich sehr froh

DP-Maintenance 10. Jul 2006 13:18

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Internet / LAN / ASP.NET" nach "Object-Pascal / Delphi-Language" verschoben.
Ich denke es wird auf eine Frage für diese Sparte herauslaufen.

Delphi-Freak 10. Jul 2006 13:29

Re: Listbox
 
Ja, eine Schleife wäre nicht schlecht. Und dann hilf dir die Funktion Delphi-Referenz durchsuchenMax weiter.

LG, ich

PS: Sag mir noch, was das mit "Internet / LAN / ASP.NET" zu tun hat, dort war es ja ursprünglich.

anfänger123 10. Jul 2006 13:30

Re: Listbox
 
ok danke ich schau mal ob ich es hin bekomme

anfänger123 10. Jul 2006 13:32

Re: Listbox
 
ups das war ja gar keine antwort für mich sorry

sigma 10. Jul 2006 13:33

Re: Listbox
 
sorry da hab ich nicht aufgepasst mein fehler
so versuche mal ob ich es hin bekomme

sigma 10. Jul 2006 13:57

Re: Listbox
 
also ich bin zu blöd dafür um da hin zu bekommen
naja ich versuch es mal weiter trotzdem danke für deine hilfe

anfänger123 10. Jul 2006 14:11

Re: Listbox
 
ich würde das auch gerne wissen wie man das macht
hab gar keine idee wie ich das hin bekommen soll
kann mir nur denken das ich ne schleife brauche aber welche und wie mach ich das dann

sigma 10. Jul 2006 14:12

Re: Listbox
 
falls ich was finde bevor uns jemand hilft sag ich dir bescheid anfänger123

SirThornberry 10. Jul 2006 14:14

Re: Listbox
 
1.) kleinsterWert istgleich erste Zahl in der Liste
2.) Alle anderen Eintrage in der Liste durchgehen
2.1) Wenn der Eintrag X in der Liste kleiner ist als mein bisheriger "kleinsterWert" dann ist mein neuer "kleinsterWert" der Wert von EintragX.

Nils_13 10. Jul 2006 14:19

Re: Listbox
 
Wenn es wirklich der Reihenfolge nach immer höher wird, solltest du das mit z.B. dieser Schleife lösen können:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i : Integer;
begin
  for i := 0 to ListBox1.Items.Count - 1 do // Für alle Items von 0 bis ListBox Itemanzahl - 1
  begin
    Label1.Caption := IntToStr(max(StrToInt(ListBox1.Items[i]), -1));
    // hier wird mit der Funktion max verglichen
    // Wenn es allerdings negativ Zahlen gibt, musst du -1 ersetzen                                                                  
  end;
end;
Das ist eine total schlechte Variante, die ich mir schnell ohne Delphi selber ausgedacht habe, bin für Verbesserungen sehr dankbar.

anfänger123 10. Jul 2006 14:25

Re: Listbox
 
geht bei mir nicht bin zu dumm dafür

SirThornberry 10. Jul 2006 14:26

Re: Listbox
 
anstelle von "geht nicht" gib uns einfach eine Fehlerbeschreibung. Was geht nicht? Welche Fehlermeldung kommt? bei welcher Anweisung kommt die Fehlermeldung etc.

anfänger123 10. Jul 2006 14:34

Re: Listbox
 
Delphi-Quellcode:
for i := 0 to isbListe.Items.Count - 1 do
     begin
     Maximal.Caption := IntToStr(max(StrToInt(isbListe.Items[i]), -1));
so in das Maximal.Caption soll er mir dann den größten wert rein schreiben aber er sagt immer
das maximal nicht definiert wäre
max findet er auch nicht

[edit=SirThornberry]Delphi-Tags gesetzt. Mfg, SirThornberry[/edit]

SirThornberry 10. Jul 2006 14:35

Re: Listbox
 
hast du eine Komponente oder Variable die "Maximal" heißt?

anfänger123 10. Jul 2006 14:38

Re: Listbox
 
ja ich hab eine maximal.caption
aber dort hab ich einen anderen namen müssen eintragen und dann bringt er mir diese fehlermeldung nicht mehr aber

jetzt hab ich den fehler das ein semikolon fehlet weis aber nicht wo

Delphi-Quellcode:
 for i := 0 to isbListe.Items.Count - 1 do
     begin
     gbMaxi.Caption := IntToStr(max(StrToInt(isbListe.Items[i]), -1));
     end; //hab ich auch gemacht hab es nur vergessen hin zu schreiben
[edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen. Mfg, SirThornberry[/edit]

anfänger123 10. Jul 2006 14:40

Re: Listbox
 
semikolon oder operatpr fehlt ist die fehlermeldung

SirThornberry 10. Jul 2006 14:45

Re: Listbox
 
wenn du bei der schleife ein "begin" hast, muss auch ein "end;" dann kommen. Hast du das eventuell vergessen? Wenn du an deinem Beitrag etwas ändern willst kannst du übrigens den "Edit"-Button über dem entsprechenden Beitrag verwenden.

sigma 10. Jul 2006 14:56

Re: Listbox
 
hab es leider nicht hin bekommen der quelltext von anfänger123 versteh ich nicht kann mir vielleicht jemand helfen damit ich auch wieder genau weis um was es geht
verstehe nicht wie der dann auf den größten wert kommen will so

Nils_13 10. Jul 2006 15:03

Re: Listbox
 
Es ist eigentlich nicht schwer. Die Items fangen bei 0 an und hören z.B. bei 255 auf --> das letzte Item hat die höchste Zahl (255).
Delphi-Quellcode:
for i := 0 to isbListe.Items.Count - 1 do
begin
  gbMaxi.Caption := IntToStr(max(StrToInt(isbListe.Items[i]), -1));
  // Hier wird ganz einfach das höchste Item in ein Label mit dem Namen "gbMaxi" geschrieben. IsbListe ist die ListBox.
  // max - Siehe OH
end;

Phoenix 10. Jul 2006 15:05

Re: Listbox
 
Achtung: Pseudocode:
Delphi-Quellcode:
var
  i: integer;
  vergleichswert: integer;
begin
  vergleichswert := 0;

  for i := 0 to liste.Items.Count - 1 do
  begin
    if ( StrToInt(liste.Items[i]) > StrToInt(liste.Items[vergleichswert]) ) then
    begin
      // grösseren Wert gefunden:
      Vergleichswert := i;
    end;
  end;
end;
Am Ende hat i den Index des grössten Elementes in der Liste. Ist aber ungetestet.

Delphi-Freak 10. Jul 2006 15:19

Re: Listbox
 
Wenn ich den Code von Phoenix etwas ausbessern darf:
Delphi-Quellcode:
var
  i: integer;
  vergleichswert: integer;
begin
  vergleichswert := 0;

  for i := 1 to liste.Items.Count - 1 do
  begin
    if ( StrToInt(liste.Items[i]) > StrToInt(liste.Items[vergleichswert]) ) then
    begin
      // grösseren Wert gefunden:
      vergleichswert := i;
    end;
  end;
end;
-> »Am Ende hat vergleichswert den Index des grössten Elementes in der Liste.«

for i := 1 to..., weil StrToInt(liste.Items[0]) > StrToInt(liste.Items[0]) nie stimmen kann -> unnötig bei 0 zu beginnen


LG, ich

sigma 11. Jul 2006 07:56

Re: Listbox
 
also ich hab das jetzt ausprobiert und er zeigt mir immer noch nicht den größten wert an


Delphi-Quellcode:
begin
vergleichswert := 0;
for i := 0 to isbliste.Items.Count - 1 do
  begin
    if ( StrToInt(isbliste.Items[i]) > StrToInt(isbliste.Items[vergleichswert]))
    then
    begin
      Vergleichswert := i;
      edtText.Text := FloatToStr (Vergleichswert);

    end;
  end;
end;
und wenn ich i:=1 setze geht es auch nicht

wenn ich die werte 4,5,6 und 9 habe gibt er mir als größter wert die 3 aus das versteh ich nicht kann mir vielleicht jemand helfen

marabu 11. Jul 2006 09:22

Re: Listbox
 
Hi,

du hast nur den Index ausgegeben und nicht den Wert
Delphi-Quellcode:
begin
  vergleichswert := 0;
  for i := 0 to isbliste.Items.Count - 1 do
  begin
    if ( StrToInt(isbliste.Items[i]) > StrToInt(isbliste.Items[vergleichswert])) then
    begin
      Vergleichswert := i;
      edtText.Text := isbliste.Items[vergleichswert];
    end;
  end;
end;
Grüße vom marabu

xaromz 11. Jul 2006 09:25

Re: Listbox
 
Hallo,

Die Variable "Vergleichswert" beinhaltet nicht die größte Zahl, sondern den Index der größten Zahl. Du bekommst also das Ergebnis mit isbliste.Items[Vergleichswert].

Hier mal das Ganze als Funktion:
Delphi-Quellcode:
function GetMax(LB: TListBox): Integer;
var
  i: Integer;
  Max: Integer;
begin
  if LB.Items.Count = 0 then // Listbox ist leer -> -1
  begin
    Result := -1;
    Exit;
  end;

  Max := 0;
  for i := 1 to LB.Items.Count - 1 do
    if (StrToInt(LB.Items[i]) > StrToInt(LB.Items[Max])) then
      Max := i;
  Result := StrToInt(LB[Max]);
end;
In der ListBox dürfen aber nur Zahlen stehen, sonst gibt's einen Fehler.

Gruß
xaromz

anfänger123 11. Jul 2006 09:49

Re: Listbox
 
so hab es jetzt hin bekommen mit dem maximal und dem minimal wert jetzt versuch ich nur noch den mittel wert und dann hab ich es auch endlich fertig
danke für eure hilfe ohne euch hätte ich es nciht hin bekommen

also an alle die mir geholfen habe danke

Balu der Bär 11. Jul 2006 09:50

Re: Listbox
 
MIttelwert? Wo is das Problem, die rechnest alle Zahlen (Listbox.Items) zusammen und teilst sie dann durch die Anzahl dieser.

anfänger123 11. Jul 2006 09:56

Re: Listbox
 
ja und das muss ich jetzt noch raus finden wie ich das in eine shcleife schreibe

sigma 11. Jul 2006 09:58

Re: Listbox
 
danke für eure hilfe hab jetzt auch endlich den maximalwert

viellen danke für eure schnelle hilfe

Balu der Bär 11. Jul 2006 10:00

Re: Listbox
 
Delphi-Quellcode:
var
 i, value : Integer;

for i := 0 to Listbox1.Items.Count-1 do
 value := value + StrToInt(Listbox1.Items[i])

value := value mod Listbox1.Items.Count-1;
Obwohl, mir fällt grad ein das wäre ja der Durchschnitt und nicht der Mittelwert. :shock:

xaromz 11. Jul 2006 10:02

Re: Listbox
 
Hallo,
Zitat:

Zitat von Balu der Bär
Obwohl, mir fällt grad ein das wäre ja der Durchschnitt und nicht der Mittelwert. :shock:

Nicht mal das. Du rechnest hier ja mit mod (Anzahl - 1). Richtig ist "value := Round(value / Listbox1.Items.Count);". Für den Durchschnitt, versteht sich.

Gruß
xaromz

anfänger123 11. Jul 2006 10:15

Re: Listbox
 
und wie errechne ich jetzt denn mittelwert

marabu 11. Jul 2006 12:25

Re: Listbox
 
Hi.

Durchschnitt und (arithmetischer) Mittelwert sind landläufig dasselbe. Wenn du aber den mittleren Wert (Median) brauchst, dann musst du deine Werte erst sortieren. Maximum und Minimum sind dann Abfallprodukte des Sorts und der Median ergibt sich zu:

Delphi-Quellcode:
function Median(s: TStrings): Extended;
var
  iMedian: Integer;
begin
  iMedian := s.Count div 2;
  if Odd(s.Count)
    then Result := StrToInt(s[iMedian])
    else Result := (StrToInt(s[iMedian]) + StrToInt(s[Pred(iMedian)])) / 2;
end;
Grüße vom marabu

sigma 11. Jul 2006 13:33

Re: Listbox
 
hallo hat jemand vielleicht noch eine andere idee wie ich den Mittelwert raus bekomme weil #ich hab keine und die eine Lösung versteh ich nicht

xaromz 11. Jul 2006 13:50

Re: Listbox
 
Hallo,
Zitat:

Zitat von sigma
hallo hat jemand vielleicht noch eine andere idee wie ich den Mittelwert raus bekomme weil #ich hab keine und die eine Lösung versteh ich nicht

es geht hier gerade mal um 4 Zeilen Code. Das wirst Du doch rausbekommen, was da passiert.
Zwei Tipps:
Die einzelnen Befehle in der Hilfe nachschlagen.
Am Anfang der Funktion einen Breakpoint setzen und schrittweise durchgehen. Dabei beobachten, wie sich die Variablen verändern.

Wenn das nichts nützt, nochmal konkret nachfragen. Ansonsten würde ich Dir empfehlen, ein paar Tutorials durchzulesen; diese Funktion ist äußerst trivial, und wenn Du hier schon Schwierigkeiten hast, ist wohl das Aneignen von Grundlagen der erste Schritt :wink: .

Gruß
xaromz


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 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