Entwickler-Ecke
Sonstiges (Delphi) - Sortierproblem im Memofeld
DoctorT4ever - Fr 12.12.03 00:00
Titel: Sortierproblem im Memofeld
Hi,
muss für jgst 12, informatik nen reaktionstester machen.
Die Reaktionszeiten werden in einem Memofeld ausgegeben.
SORTIERPROBLEM:
Folgendes Problem, um im Memo-Feld die Ergebnisse auszugeben muss ich (so weit ich weiß) INTTOSTR verwenden. Dann wird Bubble-Sort angewendet um die Ergebnisse zu sortieren.
ABER: Dann wird zum Beispiel die Zeit 1121 ms vor der Zeit 258 ms einsortiert, obwohl diese ja viel langsamer ist.
Ich müsste denke ich Integer-Zahlen vergleichen und nicht String-Variablen, aber wie realisier ich das in dem Programm? Würd mich über Tipps freuen!
Hier 2 ausschlaggebende (gekürzte) Prozeduren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| procedure TForm1.Shape3MouseDown
begin ... reaktion:=zeit2-zeit1; edit1.text:=inttostr(reaktion) + 'ms';
memo1.lines.add(inttostr(reaktion) + ' ms ' + Spielername); sortieren; end;
procedure tform1.sortieren; var hilf:string; lauf,durchgang:integer;
begin
with memo1 do begin for durchgang :=0 to lines.count-2 do for lauf:=0 to lines.count-2 do
if lines[lauf] > lines[lauf+1] then
begin hilf:=lines[lauf+1]; lines[lauf+1]:=lines[lauf]; lines[lauf]:=hilf; end;
end; end; |
Christian S. - Fr 12.12.03 00:09
Hallo und herzlich Willkommen im DF!
Um die Werte zu vergleichen, musst Du den String wieder in einen Integer umwandeln: StrToInt. Dann kannst Du vergleichen.
Es könnte (je nach Anzahl der gespeicherten Zahlen) schneller sein, die Zahlen in ein Array of Integer zu speichern, dieses jeweils zu sortieren und dann in einem Rutsch das Memo daraus heraus neu zu füllen.
MfG
Peter
Delete - Fr 12.12.03 00:10
Erst sortieren, dann in das Memo schreiben.
Christian S. - Fr 12.12.03 00:18
@Luckie: jo, dachte ich mir schon. War mir bei kleinen Zahlen (also so 10mal oder so) nicht sicher, ob der Aufwand wirklich lohnt. Man könnte das Programm dazu nutzen, herauszufinden, ob die Reaktionszeit des Menschen ausreicht, um einen Unterschied zwischen beiden Varianten zu merken. ;-)
@DoctorT4ever: bitte nur eine Frage pro Topic. Eröffne für den zweiten Teil ein neues Topic und entferne die zweite Frage aus diesem!
DoctorT4ever - Fr 12.12.03 00:36
@ peter, welches ist denn nun die bessere variante? viele werte werden es nicht sein, im grunde 10 oder so, wenn man noch alte dazu lädt, vielleicht 20...
dass es mit strtoint gehen muss war mir klar, aber ich hatte versucht in einem schritt alle zahlen (lines) in integer umzuwandeln, klappt aber nich...
könnt ihr mir vorschläge mit quelltextbeispielen geben?
hab nicht viel erfahrung mit delphi...
danke
Christian S. - Fr 12.12.03 09:29
Hallo!
Die sauberere (waren das jetzt genug "re"?) Variante ist auf jeden Fall die, die Zahlen in einem Array of Integer zu speichern. Codebeispiele sind nicht wirklich sinnvoll, wenn man nicht weiß, wo Deine Probleme liegen. Probier es mit dem Array einfach mal aus und melde Dich, wenn Du nicht weiter kommst.
Ach ja, ein Tutorial zu Arrays gibt es in der entsprechenden Abteilung hier im Forum.
MfG
Peter
P.S.: Danke fürs Aufteilen des Topic!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!