Einzelnen Beitrag anzeigen

Piwi

Registriert seit: 22. Jan 2003
Ort: Trier
15 Beiträge
 
Delphi 5 Standard
 
#1

BubbleSort graphisch darstellen

  Alt 17. Jan 2004, 14:38
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
  Mit Zitat antworten Zitat