AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

BubbleSort graphisch darstellen

Ein Thema von Piwi · begonnen am 17. Jan 2004 · letzter Beitrag vom 18. Jan 2004
Antwort Antwort
Seite 1 von 2  1 2      
Piwi

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

BubbleSort graphisch darstellen

  Alt 17. Jan 2004, 15: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
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: BubbleSort graphisch darstellen

  Alt 17. Jan 2004, 15:41
Kuck dir mal in deinem Delphi Verzeichnis, das Thread Demo an. da ist das gemacht worden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3

Re: BubbleSort graphisch darstellen

  Alt 17. Jan 2004, 15:42
Statt eines Timers kannst Du nach jedem Tausch mit dem Befehl Hier im Forum suchenSleep arbeiten, dieser hält das Programm für xxx Millisekunden an

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#4

Re: BubbleSort graphisch darstellen

  Alt 17. Jan 2004, 15:48
so z.B.:
Delphi-Quellcode:
procedure TForm1.Bubblesort1Click(Sender: TObject);
begin
  Timer1.Enabled := True;
end;
procedure Timer1Timer(Sender:TObject);
begin
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 (normal: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.)
          Application.ProcessMessages; // gibt Application chance, die Veränderungen auf den
                                        // Bildschirm zu bringen

          Break; // bricht die Schleife ab
      end;
end;
Wenn Du nun den Timer auf Intervall = 1000 setzt, so macht er alle 1000 Millisekunden einen Sortierschritt.
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
czapie

Registriert seit: 17. Nov 2002
Ort: Berlin
384 Beiträge
 
Delphi 5 Standard
 
#5

Re: BubbleSort graphisch darstellen

  Alt 17. Jan 2004, 16:33
Hi,

ich habe zu meiner Abi-Vorbereitung letzte Woche genau das geschrieben, bloß noch mit anderen Sortieralgorithmen. Ich habe meines "Pause" mit Application.ProcessMessages gemacht auch wenn das nicht ganz sauber ist. Wenn du willst schicke ich es dir.
Schick einfach ne PN oder ne Mail.
Czapie.
Was man zu verstehen gelernt hat, fürchtet man nicht mehr.
(Marie Curie)
http://www.cafes-in-berlin.com
  Mit Zitat antworten Zitat
Piwi

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

Re: BubbleSort graphisch darstellen

  Alt 17. Jan 2004, 16:41
@Leuselator:

Bei diesem Programmtext meldet er immer, dass """ kein gültiger Integerwert ist.
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#7

Re: BubbleSort graphisch darstellen

  Alt 18. Jan 2004, 07:05
Ich habe Deine Sortierroutine nicht verändert. Es liegt also an etwas anderem: am Timer! Du mußt ihn im Object-Inspektor disablen, da er sonst sofort nach Programmstart, also bevor Du die Edits mit Werten gefüllt hast, lostimed () und sortieren will.
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Piwi

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

Re: BubbleSort graphisch darstellen

  Alt 18. Jan 2004, 19:40
Auf diese Weise kann man zwar den Sortierprozess verlangsamen, aber man sieht immer noch nicht, wie die Editfelder wandern, was ja mein eigentliches Ziel ist...
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#9

Re: BubbleSort graphisch darstellen

  Alt 18. Jan 2004, 19:42
Welche Weise auch immer Du meinst Hast Du eine Application.ProcessMessages eingebaut, damit die Updates auch angezeigt werden?

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
cyberkiller0072001

Registriert seit: 5. Jan 2004
Ort: Netz
68 Beiträge
 
Delphi 5 Professional
 
#10

Re: BubbleSort graphisch darstellen

  Alt 18. Jan 2004, 19:56
Ich hab mal nen sortieralgorithmus sichbar dargestellt...auch für info, wenn dus noch nicht hast, einfach ne mail...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz