Autor Beitrag
DoctorT4ever
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 12.12.03 00:00 
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:


ausblenden volle Höhe 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;   //NACHBARTAUSCH
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;

_________________
Das Leben ist ein sche*** Spiel, aber geile Grafik!


Zuletzt bearbeitet von DoctorT4ever am Fr 12.12.03 00:30, insgesamt 2-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 12.12.03 00:10 
Erst sortieren, dann in das Memo schreiben.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
DoctorT4ever Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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

_________________
Das Leben ist ein sche*** Spiel, aber geile Grafik!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".