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

Win XP
D5
BeitragVerfasst: Mo 20.06.05 18:23 
Hey Leute!
Ich hab ein Programm zu Selection Sort geschrieben. Das Problem daran ist, dass es zwar die Zahlen alle richtig sortiert, aber das sortierte Ergebnis mit in einem Schritt ausgibt. Ich soll es aber so programmieren, dass es jeden einzelnen Tauschschritt einzeln ein ein StrinGrid ausgibt. Aber WIE? Ich sitz schon ne ganze Woche an der Lösung, hab verschiedene Sachen ausprobiert, aber keine hat geholfen!

Also bitte bitte helft mir!

Danke schon im voraus.

Hier noch der Quelltext meiner Lösung:
ausblenden 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:
procedure TForm2.BitBtn3Click(Sender: TObject);
 Var z,j,zmax,max:integer;
 begin
 Sort.cells[0,2]:='Sortiert';
 for z:=10 downto 1 do
   begin
    zmax:=z;
    max:=zahl[z];
    Sort.cells[z,2]:=IntToStr(max);
     for j:=1 to (z-1do
     if zahl[j]>max then
      begin
       zmax:=j;
       max:=zahl[j];
       Sort.cells[z,2]:=IntToStr(max);
      end;
     zahl[zmax]:=zahl[z];
     zahl[z]:=max;
     Sort.cells[z,2]:=IntToStr(zahl[zmax]);
     Sort.cells[z,2]:=IntToStr(zahl[z]);
    end;
end;

end.


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconMotzi: Topic aus VCL (Visual Component Library) verschoben am Mo 20.06.2005 um 19:34
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mo 20.06.05 21:13 
Hallo,

wenn ich das richtig verstehe willst du nur die Zwischenschritte anzeigen.
Dafür solltest du in der inneren Schleife dein Programm auffordern, mal eine Pause zu machen um Dinge wie z.B. das Zeichnen des Fensters zu übernehmen. Hierdurch wird dein Algorytmus aber erheblich langsammer. Der Befehl dazu heißt Application.ProcessMessages in deinem Programm muss das dann so aussehen:

ausblenden 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:
procedure TForm2.BitBtn3Click(Sender: TObject);
 Var z,j,zmax,max:integer;
 begin
 Sort.cells[0,2]:='Sortiert';
 for z:=10 downto 1 do
   begin
    zmax:=z;
    max:=zahl[z];
    Sort.cells[z,2]:=IntToStr(max);
     for j:=1 to (z-1do
     if zahl[j]>max then
      begin
       zmax:=j;
       max:=zahl[j];
       Sort.cells[z,2]:=IntToStr(max);
       Application.ProcessMessages;
      end;
     zahl[zmax]:=zahl[z];
     zahl[z]:=max;
     Sort.cells[z,2]:=IntToStr(zahl[zmax]);
     Sort.cells[z,2]:=IntToStr(zahl[z]);
    end;
end;

end.


Sollte das ganze dann immer noch zu schnell laufen, so das man es nciht richtig sieht, kannst du noch ein sleep(250); direckt dahinter setzen. Damit wird nach jedem Durchlauf eine viertel Sekunde gewartet.

Gruß
Klabautermann
Paul Threadstarter
Hält's aus hier
Beiträge: 7

Win XP
D5
BeitragVerfasst: Mo 20.06.05 21:24 
Titel: Super, funktioniert
Hab deine Lösung sofort ausprobiert, mit sleep funktioniert das spitzenmäßig. Danke dafür.

Ich hatte aber eigentlich vor, dass mir jeder Sortierschritt in eine neue Stringgridzeile ausgegeben wird, damit am Ende eine Art Schreibtischtest im Stringgrid vorliegt. Vielleicht gibts dafür auch ne Lösung?! Vielen Dank für deine Mühe!

Paul