Autor Beitrag
Noctis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 06.03.09 00:46 
Abend,

Sitze jetzt seit 6 Stunden an einem Programm, jetzt komm ich aber an einer Stelle nicht mehr weiter und mir brummt langsam der Kopf.

Ich habe mit record mehrere arrays (integer) definiert.
die werte werden eingelesen und an eine listbox übergeben.

nun möchte ich in der listbox die eingegebenen werte vergleichen um herauszufinden welches der größte bzw der niedrigste wert dieser listbox ist.

den größten/niedrigste wert (mach ich dann mit einer radiobox) wert soll dann erstmal an ein edit feld übergeben werden.

wie könnte man das am besten bewerkstelligen?

bis jetzt bin ich bei
ausblenden Delphi-Quelltext
1:
2:
3:
 FOR i := 0 TO ListBox1.Items.Count - 1 DO
      if listbox1.Items[i] > listbox1.Items[i+1then
         edit1.text:=listbox1.Items[i];


bin mir erstmal noch ein kaffee machen ;)


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Fr 06.03.2009 um 01:13
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 06.03.09 00:54 
Moin!

user profile iconNoctis hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe mit record mehrere arrays (integer) definiert.
[...]
nun möchte ich in der listbox die eingegebenen werte vergleichen um herauszufinden welches der größte bzw der niedrigste wert dieser listbox ist.
Wenn die Elemente der Listbox Zahlen sind, dann darfst du keinen Stringvergleich machen (was du aktuell tust), das klappt nicht. Du mußt die Werte als Zahl vergleichen. :idea:

user profile iconNoctis hat folgendes geschrieben Zum zitierten Posting springen:
bis jetzt bin ich bei
ausblenden Delphi-Quelltext
1:
2:
3:
 FOR i := 0 TO ListBox1.Items.Count 1 DO
      if listbox1.Items[i] > listbox1.Items[i+1then
         edit1.text:=listbox1.Items[i];
Das knallt auf jeden Fall, da du über die Anzahl der Elemente hinaus zugreifst. :?

user profile iconNoctis hat folgendes geschrieben Zum zitierten Posting springen:
wie könnte man das am besten bewerkstelligen?
Ansatz:
- Den ersten Wert aus der Listbox als größten/kleinsten Wert annehmen
- In einer Schleife vom 2. bis zum letzten Element durchgehen und schauen, ob der aktuelle Wert größer/kleiner ist

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 06.03.09 00:58 
user profile iconNoctis hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe mit record mehrere arrays (integer) definiert.
die werte werden eingelesen und an eine listbox übergeben.

nun möchte ich in der listbox die eingegebenen werte vergleichen um herauszufinden welches der größte bzw der niedrigste wert dieser listbox ist.
Moment mal, was hat es für einen Sinn die Werte erst in einen String umzuwandeln und dann in der ListBox irgendwie vergleichen, wenn du sie doch voeher schon direkt als Zahlen hast?

user profile iconNoctis hat folgendes geschrieben Zum zitierten Posting springen:
den größten/niedrigste wert (mach ich dann mit einer radiobox) wert soll dann erstmal an ein edit feld übergeben werden.
Wenn du mit dem Integerarray arbeitest, dann kannst du direkt vorgehen wie user profile iconNarses geschrieben hat und am Ende den kleinsten Wert aus der entsprechenden Variable ins Edit schreiben.
Noctis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 06.03.09 01:13 
naja, Problem ist nur dass ich nicht recht weiss wie ich es anstellen soll.

das mit dem integer <-> string bringt mich hier auch schon ein wenig durcheinander, da ich in der methode die ich jetzt habe auch erst wieeder vom string in den integerwert umrechne.

wie soll ich die werte denn vorher vergleichen?


..das habe ich eben probiert

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
begin
  listbox1.Items[1]:=max;
    for I := 1 to ListBox3.Items.Count do
      begin
        if listbox3.items[i] > listbox3.Items[1then
        listbox3.items[i]:=max;
      end;

      edit1.text:=max;

  end;
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 06.03.09 01:20 
Moin!

user profile iconNoctis hat folgendes geschrieben Zum zitierten Posting springen:
das mit dem integer <-> string bringt mich hier auch schon ein wenig durcheinander, da ich in der methode die ich jetzt habe auch erst wieeder vom string in den integerwert umrechne.
Machst du doch gar nicht, jedenfalls nicht in dem Code, den du gezeigt hast. :gruebel:

user profile iconNoctis hat folgendes geschrieben Zum zitierten Posting springen:
wie soll ich die werte denn vorher vergleichen?
Fragen wir mal anders rum: Wie kommen denn die Werte in die Listbox? ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Noctis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 06.03.09 01:26 
in dem code oben fehlt vor jedem max das StrtoInt ^^

*schnief* ja jetzt seh ich das auch gerade, guck wahrscheinlich heute schon zulange auf delphie

ausblenden Delphi-Quelltext
1:
 liste[i].jump:=strtoint(Edit3.Text);					


und dann ->

ausblenden Delphi-Quelltext
1:
Listbox3.Items.Add(inttostr(liste[i].jump));					


so ejtzt sind die werte als string in der liste.
meine logik war dabei: ich kann die werte nicht vergleichen bevor diese nicht in der liste eingetragen sind.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 06.03.09 01:29 
Moin!

user profile iconNoctis hat folgendes geschrieben Zum zitierten Posting springen:
so ejtzt sind die werte als string in der liste.
meine logik war dabei: ich kann die werte nicht vergleichen bevor diese nicht in der liste eingetragen sind.
Und das ist genau "falsch rum" :arrow: du solltest die Minimum/Maximum-Suche vor der Ausgabe in die Listbox machen (naja, genau genommen sollte es egal sein, wann du das machst, wenn du die Werte in der Listbox nicht mehr veränderst). :idea: So sparst du dir nämlich das ständige Umwandeln für die numerischen Vergleiche. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Noctis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 06.03.09 01:47 
mir missfällt bloß leider die Syntax um werte eines arrays zu vergleichen ^^, sonst wäre mir unter umständen schon vorhin eine idee gekommen.

nach dem motto

ausblenden Delphi-Quelltext
1:
2:
3:
4:
case of
a[1] > a [2]
a[2] > a[3]
...


möchte ich es ja nun nicht gerade machen :S
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 06.03.09 01:49 
Moin!

Wo ist das Problem? Geht z.B. so:
ausblenden Delphi-Quelltext
1:
if (liste[i].jump > liste[i+1].jump) then					
Schleife drum rum, fertig. :)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Noctis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 06.03.09 02:08 
ahhhh :D


gesagt, getan.

ausblenden Delphi-Quelltext
1:
2:
3:
for i := 1 to 20 do
if (liste[i].jump > liste[i+1].jump) then
max:=liste[i].jump;


aber irgendwie hab ich noch einen fehler in der ausgabe, er gibt nicht [i]>[i+1] sondern den zuletzt eingegebenen [i]-wert ein :?
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 06.03.09 02:11 
Moin!

user profile iconNoctis hat folgendes geschrieben Zum zitierten Posting springen:
aber irgendwie hab ich noch einen fehler in der ausgabe, er gibt nicht [i]>[i+1] sondern den zuletzt eingegebenen [i]-wert ein :?
Du hast dich ja auch nicht an das Kochrezept von weiter oben gehalten... ;)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
max := liste[1].jump; // erster Wert ist angenommenes Maximum
for i := 2 to 20 do // vom 2. bis zum letzten Wert schauen
  if (liste[i].jump > max) then // ist dieser Wert größer als das (bisherige) Maximum?
    max := liste[i].jump; // jup, dann merken
cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Noctis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 06.03.09 02:20 
jetzt funktioniert es, danke für die investierte zeit :)

werde dann mal an dem rest des programmes weiterarbeiten :P
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 06.03.09 02:31 
Moin!

Markierst du den Thread noch entsprechend, wenn dein Problem gelöst ist? Danke. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.