Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Arraywerte vergleichen
Noctis - Fr 06.03.09 00:46
Titel: Arraywerte vergleichen
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
Delphi-Quelltext
1: 2: 3:
| FOR i := 0 TO ListBox1.Items.Count - 1 DO if listbox1.Items[i] > listbox1.Items[i+1] then edit1.text:=listbox1.Items[i]; |
bin mir erstmal noch ein kaffee machen ;)
Moderiert von
Narses: Topic aus VCL (Visual Component Library) verschoben am Fr 06.03.2009 um 01:13
Narses - Fr 06.03.09 00:54
Moin!
Noctis hat folgendes geschrieben : |
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:
Noctis hat folgendes geschrieben : |
bis jetzt bin ich bei
Delphi-Quelltext 1: 2: 3:
| FOR i := 0 TO ListBox1.Items.Count - 1 DO if listbox1.Items[i] > listbox1.Items[i+1] then edit1.text:=listbox1.Items[i]; | |
Das knallt auf jeden Fall, da du über die Anzahl der Elemente hinaus zugreifst. :?
Noctis hat folgendes geschrieben : |
| 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
jaenicke - Fr 06.03.09 00:58
Noctis hat folgendes geschrieben : |
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?
Noctis hat folgendes geschrieben : |
| 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
Narses geschrieben hat und am Ende den kleinsten Wert aus der entsprechenden Variable ins Edit schreiben.
Noctis - 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
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[1] then listbox3.items[i]:=max; end;
edit1.text:=max;
end; |
Narses - Fr 06.03.09 01:20
Moin!
Noctis hat folgendes geschrieben : |
| 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:
Noctis hat folgendes geschrieben : |
| wie soll ich die werte denn vorher vergleichen? |
Fragen wir mal anders rum: Wie kommen denn die Werte in die Listbox? ;)
cu
Narses
Noctis - 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
Delphi-Quelltext
1:
| liste[i].jump:=strtoint(Edit3.Text); |
und dann ->
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 - Fr 06.03.09 01:29
Moin!
Noctis hat folgendes geschrieben : |
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
Noctis - 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
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 - Fr 06.03.09 01:49
Moin!
Wo ist das Problem? Geht z.B. so:
Delphi-Quelltext
1:
| if (liste[i].jump > liste[i+1].jump) then |
Schleife drum rum, fertig. :)
cu
Narses
Noctis - Fr 06.03.09 02:08
ahhhh :D
gesagt, getan.
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 - Fr 06.03.09 02:11
Moin!
Noctis hat folgendes geschrieben : |
| 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... ;)
Delphi-Quelltext
1: 2: 3: 4:
| max := liste[1].jump; for i := 2 to 20 do if (liste[i].jump > max) then max := liste[i].jump; |
cu
Narses
Noctis - 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 - Fr 06.03.09 02:31
Moin!
Markierst du den Thread noch entsprechend, wenn dein Problem gelöst ist? Danke. ;)
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!