Hallo Delphi-Gemeinde!
Wir haben in unserem Informatik-Kurs die Aufgabe gestellt bekommen, das BubbleSort-VErfahren graphisch darzustellen. Ich habe damit begonnen, über einen array 20 Editfelder zu definieren (Feld:array[1..20] of tedit
Diese werden mit Zufallszahlen gefüllt und sollen dann sortiert werden. Das ist mir auch schon gelungen, allerdings gibt es ein Problem: Das ganze läuft natürlich so schnell ab, dass es für das Auge nicht sichtbar ist.
Lösung natürlich: Das ganze in einen Timer einbauen. Und daran hakt es leider
Weiß jemand, wie der Programmtext umgeschrieben werden muss, damit der Sortiervorgang sichtbar wird?
Hier der Programmtext:
Delphi-Quellcode:
var
Form1: TForm1;
Feld:array[1..20] of tedit;
implementation
{$R *.DFM}
procedure TForm1.Zufallszahlen1Click(Sender: TObject);
var i:integer;
begin
for i:=1 to 20 do begin
Feld[i].text:=inttostr(random(99)); //Felder werden mit Zufallszahlen gefüllt
end;
end;
procedure TForm1.FormCreate(Sender: TObject); //Felder werden definiert
begin
randomize;
Feld[1]:=edit1;
Feld[2]:=edit2;
Feld[3]:=edit3;
Feld[4]:=edit4;
Feld[5]:=edit5;
Feld[6]:=edit6;
Feld[7]:=edit7;
Feld[8]:=edit8;
Feld[9]:=edit9;
Feld[10]:=edit10;
Feld[11]:=edit11;
Feld[12]:=edit12;
Feld[13]:=edit13;
Feld[14]:=edit14;
Feld[15]:=edit15;
Feld[16]:=edit16;
Feld[17]:=edit17;
Feld[18]:=edit18;
Feld[19]:=edit19;
Feld[20]:=edit20;
end;
procedure TForm1.Bubblesort1Click(Sender: TObject);
var i,j,Platz:integer;
speicherf:array[0..1] of tedit;
begin
for i:=19 downto 1 do
for j:=1 to i do
if strtoint(Feld[j].Text) > strtoint(Feld[j+1].text) //wenn die Zahl in Feld j größer ist als in deren Nachfolgerfeld
then begin
Feld[j].Top:=30; //Feld j wird graphisch heraufgesetzt (normaler Topwert ist 200)
platz:=Feld[j+1].Left; //Left-Wert des Nachfolgerfeldes wird gespeichert
Feld[j+1].Left:=Feld[j].left; //Rechtes Feld wird nach links verschoben
Feld[j].Left:=platz; //Linkes Feld (weiter oben) wird nach rechts verschoben
Feld[j].top:=200; //Feld wird wieder in die Edit-Felder-Reihe reingesetzt
Speicherf[0]:=Feld[j];
Feld[j]:=Feld[j+1];
Feld[j+1]:=Speicherf[0]; //Die Felder bekommen ihre Definition erneuert, so dass es nachher nicht zu Verwechslungen kommt (Feld an Position 1 ist dann edit1 etc.)
end;
end;
Problem: Text in einen Timer einbauen und das "Wandern" sichtbar machen! Wer weiß Rat?
Danke im Vorraus