| Autor |
Beitrag |
Slice
      
Beiträge: 28
|
Verfasst: So 15.02.09 12:13
Hey,
also wir sollen den Sortiervorgang von Quicksort grafisch darstellen. Also entweder in nem Image oder ner Paintbox. Hab allerdings keine Ahnung wie das gehen soll^^ könnte mir da mal jmd weiterhelfen? btw: muss bis heute abend fertig sein, aber ich denke es wird nicht sehr aufwendig sein oder?
Hier mal der aktuelle 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: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; Button2: TButton; PaintBox1: TPaintBox; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private public procedure vertauschen(var a,b:integer); procedure quicksort(links,rechts:integer); end;
var Form1: TForm1; zahl: array[1..100] of integer; i: integer;
implementation
{$R *.DFM} procedure TForm1.vertauschen; var x:integer; begin x:=zahl[a]; zahl[a]:= zahl[b]; zahl[b]:=x; end;
procedure TForm1.quicksort(links,rechts:integer); var i,j,x: integer; begin i:=links; j:=rechts; if j>i then begin x:=zahl[(links+rechts)div 2]; Repeat while zahl[i] < x do Inc(i); while zahl[j] > x do Dec(j); if i <= j then begin vertauschen(i,j); Inc(i); Dec(j); end; Until i>j; quicksort(links,j); quicksort(i,rechts); end; end;
procedure TForm1.Button1Click(Sender: TObject); begin for i:=1 to 100 do begin zahl[i]:=random(100)+1; Listbox1.Items.add(IntToStr(zahl[i])); end; end;
procedure TForm1.Button2Click(Sender: TObject); var i: integer; begin Listbox1.Clear; quicksort(1,100); for i:= 1 to 100 do begin Listbox1.Items.Add(IntToStr(zahl[i])); end; end;
end. |
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: So 15.02.09 12:24
guck mal in die Delphi-Beispiele...
|
|
Slice 
      
Beiträge: 28
|
Verfasst: So 15.02.09 12:31
Boldar hat folgendes geschrieben : | | guck mal in die Delphi-Beispiele... |
gehts nicht etwas genauer??^^ hab nix gefunden...
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 15.02.09 12:33
In der Demo zu Threads gibt es ein Beispiel mit verschiedenen Sortieralgorithmen, u.a. Quicksort.
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: So 15.02.09 12:41
Hatte ich schon vor ein paar Tagen hier geklärt:
www.delphiforum.de/v...rder=asc&start=0
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Slice 
      
Beiträge: 28
|
Verfasst: So 15.02.09 13:35
ok habs aber trotzdem noch net ganz richtig  ich bekomme jetzt aber nur das fertig sortierte gezeichnet aber nicht das sortieren selbst...
so sieht jetzt der teil mit dem zeichnen aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.zeichnen; var k : integer; position : integer; begin position := 0; PaintBox1.Canvas.Pen.Color := clLime; for k := 1 to 400 do begin position := position +1; PaintBox1.Canvas.MoveTo (position, 400); PaintBox1.Canvas.LineTo (position, 400 - (zahl[k])); sleep(5); end; end; |
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: So 15.02.09 13:40
Also ich habe das ganze so gestaltet:
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:
| procedure TForm1.paint; var i, j, k : integer; punkt, punkt2, posi : integer; begin PaintBox1.Refresh; punkt := 0; punkt2 := 0; posi := 0; PaintBox1.Canvas.Pen.Color := clRed; for k := 1 to 200 do begin posi := posi +2; PaintBox1.Canvas.MoveTo (posi, 400); PaintBox1.Canvas.LineTo (posi, 400 - (zahlen[k])); sleep(1); end;
PaintBox1.Canvas.Pen.Color := clBlack; PaintBox1.Canvas.MoveTo (0,0); PaintBox1.Canvas.LineTo (0,400); PaintBox1.Canvas.LineTo (400,400); for i := 1 to 40 do begin punkt := punkt + 10; PaintBox1.Canvas.MoveTo (punkt,400); PaintBox1.Canvas.LineTo (punkt,395); end; for j := 1 to 40 do begin punkt2 := punkt2 + 10; PaintBox1.Canvas.MoveTo (0, punkt2); PaintBox1.Canvas.LineTo (5, punkt2); end; end; |
Ich kann dir das Projekt auch schicken wenn du möchtest.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 15.02.09 13:40
Hast Du Dir denn nun die Thread-Demo angeschaut?
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: So 15.02.09 13:43
Das Demoprojekt findest du bei Delphi 5 in C:\Programme\Borland\Delphi5\Demos\Threads.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Slice 
      
Beiträge: 28
|
Verfasst: So 15.02.09 13:45
Dude566 hat folgendes geschrieben : | Also ich habe das ganze so gestaltet:
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:
| procedure TForm1.paint; var i, j, k : integer; punkt, punkt2, posi : integer; begin PaintBox1.Refresh; punkt := 0; punkt2 := 0; posi := 0; PaintBox1.Canvas.Pen.Color := clRed; for k := 1 to 200 do begin posi := posi +2; PaintBox1.Canvas.MoveTo (posi, 400); PaintBox1.Canvas.LineTo (posi, 400 - (zahlen[k])); sleep(1); end;
PaintBox1.Canvas.Pen.Color := clBlack; PaintBox1.Canvas.MoveTo (0,0); PaintBox1.Canvas.LineTo (0,400); PaintBox1.Canvas.LineTo (400,400); for i := 1 to 40 do begin punkt := punkt + 10; PaintBox1.Canvas.MoveTo (punkt,400); PaintBox1.Canvas.LineTo (punkt,395); end; for j := 1 to 40 do begin punkt2 := punkt2 + 10; PaintBox1.Canvas.MoveTo (0, punkt2); PaintBox1.Canvas.LineTo (5, punkt2); end; end; |
Ich kann dir das Projekt auch schicken wenn du möchtest. |
ok schick mal pls weil sonst wird das wieder nix^^
@ Deddy: jo hab ich aber da blick ich net durch xD
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: So 15.02.09 13:48
Guck dir erst mal die Demo an, wenn du es nachher immer noch nicht verstehst schicke ich es dir.
Aber wenn ich es dir einfach so schicke gibt das ja keinen Lehreffekt.
PS: Komm in ICQ online.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Slice 
      
Beiträge: 28
|
Verfasst: So 15.02.09 13:57
also so isses im mom (im anhang is noch das ganze prog)
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: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; Button2: TButton; PaintBox1: TPaintBox; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private public procedure vertauschen(var a,b:integer); procedure quicksort(links,rechts:integer); procedure zeichnen; end;
var Form1: TForm1; zahl: array[1..1000] of integer; i: integer;
implementation
{$R *.DFM}
procedure TForm1.vertauschen; var x:integer; begin x:=zahl[a]; zahl[a]:= zahl[b]; zahl[b]:=x; end;
procedure TForm1.quicksort(links,rechts:integer); var i,j,x: integer; begin i:=links; j:=rechts; if j>i then begin x:=zahl[(links+rechts)div 2]; Repeat while zahl[i] < x do Inc(i); while zahl[j] > x do Dec(j); if i <= j then begin vertauschen(i,j); Inc(i); Dec(j); end; Until i>j; quicksort(links,j); quicksort(i,rechts); end; end;
procedure TForm1.zeichnen; var k : integer; position : integer; begin position := 0; PaintBox1.Canvas.Pen.Color := clLime; for k := 1 to 400 do begin position := position +1; PaintBox1.Canvas.MoveTo (position, 400); PaintBox1.Canvas.LineTo (position, 400 - (zahl[k])); sleep(5); end; end;
procedure TForm1.Button1Click(Sender: TObject); begin for i:=1 to 1000 do begin zahl[i]:=random(1000)+1; Listbox1.Items.add(IntToStr(zahl[i])); end; end;
procedure TForm1.Button2Click(Sender: TObject); var i: integer; begin Listbox1.Clear; quicksort(1,1000); for i:= 1 to 1000 do begin Listbox1.Items.Add(IntToStr(zahl[i])); end; zeichnen;
end;
end. |
Einloggen, um Attachments anzusehen!
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: So 15.02.09 13:59
Die Procedure Zeichnen muss in die Quicksort Prozedur, damit du auch siehst wie es sich langsam sortiert.
So wie du es jetzt hast, zeichnet es nur das fertig Sortierte.
Kein Wunder. 
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Slice 
      
Beiträge: 28
|
Verfasst: So 15.02.09 16:00
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: So 15.02.09 16:39
das muss ja auch in die schleife...
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: So 15.02.09 17:18
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
|