![]() |
zahlen sortieren
Guckt mal, ich hab dieses Programm geschrieben, es kommt aber immer eine Fehlermeldung, wenn ich den Sortierenbutton anklicke. Woran liegt das???
Delphi-Quellcode:
Wäre toll, wenn mir jemand weiter helfen könnte.
type
tzz = array [1..100] of integer; TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; ListBox1: TListBox; ListBox2: TListBox; procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; zz: tzz; implementation {$R *.dfm} procedure zufall(var zz:tzz); var i:integer; begin for i:= 1 to 100 do begin zz[i]:= random(150)+1; Form1.ListBox1.Items.Add(IntToStr(zz[i])); end; end; procedure sortieren (zz:tzz); var i,j,hilf:integer; begin for i:= 100 downto 1 do for j:= 1 to i do begin if zz[j]<zz[j-1] then begin hilf:= zz[j-1]; zz[j-1]:= zz[j]; zz[j]:= hilf; Form1.ListBox2.Items.Add(IntToStr(zz[j])); end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin randomize; end; procedure TForm1.Button3Click(Sender: TObject); begin zufall(zz); end; procedure TForm1.Button1Click(Sender: TObject); begin sortieren(zz); end; procedure TForm1.Button2Click(Sender: TObject); begin close; end; end. Danke |
Re: zahlen sortieren
Welche Fehlermeldung, zur Laufzeit oder wenn Du Compilierst?
Wo hast Du die Variable "hilf" deklariert/definiert? Grüße Klaus |
Re: zahlen sortieren
Du hast deine Prozedur auch nicht Deklariert!
Delphi-Quellcode:
Das musst du in den Interface Teil schreiben!
procedure Zufall(var zz:tzz);
Edit: Ach ja und Sortieren auch :wink: |
Re: zahlen sortieren
Delphi-Quellcode:
Beim ersten Schleifendurchlauf ist j=1 und demnach j-1=0. Und es gibt kein zz[0]!
zz[j]<zz[j-1] then
Btw: Ein bisschen Struktur tut deinem code auch ganz gut Und demnächst könntest du den Sortierbutton auch so nennen, und nicht Button1! Edit: @Tormentor: Nö, man muss nicht "deklarieren". Auch wenn die Struktur so, sagen wir, sehr anfängerlich aussieht, müssen tut man nicht :tongue: |
Re: zahlen sortieren
Hallo, ich hab den Fehler (unglaublich aber wahr!) dann selber gefunden...trotzdem danke, für die tipps!!
Delphi-Quellcode:
jetzt werden die zahlen sortiert....müsste ich denn anstatt zz[j]<[zz[j-1] eher schreiben zz[j]>zz[j+1], damit j nicht 0 werden kann...aber dann werden die Zahlen absteigend sortiert...also 20 10 5 1 und nicht 1 5 10 20....Ach so und das mit dem anfängerlich trifft voll und ganz zu *g*
procedure sortieren (zz:tzz);
var i,j,hilf:integer; begin for i:= 20 downto 1 do for j:= 1 to i do begin if zz[j]<zz[j-1] then begin hilf:= zz[j-1]; zz[j-1]:= zz[j]; zz[j]:= hilf; end; end; for i:= 1 to 20 do Form1.ListBox2.Items.Add(IntToStr(zz[i])); end; |
Re: zahlen sortieren
Du könntest mit j = 2 in der Schleife anfangen,
dann wäre j-1 = 1; Grüße Klaus |
Re: zahlen sortieren
Du bist Dir schon bewusst dass der Bubblesort nicht gerade prozessorschonend ist :mrgreen:
Anstatt das Sortieren selbst zu schreiben, kannst du auch eine TList nutzen, anstatt eines arrays. Listen können beliebig viele Objekte aufnehmen. Und List implementiert bereits eine Sortier Methode, die als einzigen Parameter eine Funktion braucht, die einen Integer zurückliefert beim Vergleich von 2 Werten. (sozusagen das Pendant zu IComparable Interface in .NET). Hier einfach mal ein Beispiel, damits klarer wird. Zwar etwas aufgebauscht, aber damit wird dann schnell verständlich, dass das mit beliebigen Objekten in der List funktioniert, und nicht nur mit Integer:
Delphi-Quellcode:
Die Liste sortieren geht dann ganz leicht mit
type
TMyClass = class public Value : integer ; end ; TForm1 = class (TForm) // ... public List : TList ; end ; implementation procedure Compare (Item1, Item2 : TPointer) ; var V1, V2 : integer ; begin V1 := Item1(TMyClass).Value ; V2 := Item2(TMyClass).Value ; if V1 < V2 then Result := 1 else if V1 > V2 then Result := -1 else Result := 0 ; end ; end.
Delphi-Quellcode:
Bei diesem Sortierverfahren ist der QuickSort Algorythmus implementiert, der wesentlich effektiver arbeitet als BubbleSort.
List.Sort (Compare) ;
Ich find die Methode über TList sehr elegant. |
Re: zahlen sortieren
Okis vielen Dank nochmal und schönen Tag noch!!!
:wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz