Morgen Forum.
AIso ich habe 2 Probleme.
1. Ich habe gestern in der Schule an meinen Programm gearbeitet. dieses programm würfelt zuerst 10000 5 stellige Zufallszahlen und soll sie danach sotieren. Dabei kann man zwischen unterschiedlichen Sortier Verfahren wählen ( Bubblesort Selectionsort Shellsort usw. ). Jedoch muss ich irgendwo ein Fehler im Quelltext eingeschlichen haben , da mein Quicksort nicht ganz funktioniert. Ich finde diesen verdammten Fehler einfach nicht.
Quellcode: http://paste.www.stagetwo.eu/paste.php?key=07md53pm&title=Delphi Fehler
Spoiler anzeigen
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Zufallszahlen1: TMenuItem;
Wrfeln1: TMenuItem;
Ende1: TMenuItem;
ListBox1: TListBox;
Sortieren1: TMenuItem;
Bubble1: TMenuItem;
ListBox2: TListBox;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Insertion1: TMenuItem;
Label3: TLabel;
Label4: TLabel;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Speichern1: TMenuItem;
Laden1: TMenuItem;
unsortiertLschen1: TMenuItem;
sortiertLschen1: TMenuItem;
Selection1: TMenuItem;
Label5: TLabel;
Label6: TLabel;
Shell1: TMenuItem;
Label7: TLabel;
Label8: TLabel;
Quick1: TMenuItem;
procedure quicksort(links , rechts: integer);
procedure Quick1Click(Sender: TObject);
procedure Shell1Click(Sender: TObject);
procedure Selection1Click(Sender: TObject);
procedure sortiertLschen1Click(Sender: TObject);
procedure unsortiertLschen1Click(Sender: TObject);
procedure Laden1Click(Sender: TObject);
procedure Speichern1Click(Sender: TObject);
procedure Insertion1Click(Sender: TObject);
procedure Bubble1Click(Sender: TObject);
procedure Wrfeln1Click(Sender: TObject);
procedure Ende1Click(Sender: TObject);
procedure zeigen;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
const
max = 1000;
var
Form1: TForm1;
reihe : Array[1..max] of integer;
lauf : integer;
tausch_bubble : integer;
start_bubble, ende_bubble : real;
tausch_ins : integer;
start_ins, ende_ins : real;
tausch_sel : integer;
start_sel, ende_sel : real;
tausch_shell : integer;
start_shell, ende_shell : real;
implementation
{$R *.dfm}
procedure TForm1.zeigen;
begin
for lauf := 1 to max do
begin
ListBox2.Items[lauf - 1] := IntToStr(reihe[lauf]);
end;
end;
procedure TForm1.Ende1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Wrfeln1Click(Sender: TObject);
begin
randomize;
for lauf := 1 to max do
begin
reihe[lauf] := random(90000) + 10000;
ListBox1.Items[lauf - 1] := IntToStr(reihe[lauf]);
end;
end;
procedure TForm1.Bubble1Click(Sender: TObject);
var
lauf1, lauf2 : integer;
hilfe : integer;
begin
tausch_bubble := 0;
start_bubble := time;
for lauf2 := 1 to max do
for lauf1 := 2 to max do
begin
if reihe[lauf1 - 1] > reihe[lauf1] then
begin
{Tausch}
inc(tausch_bubble);
hilfe := reihe[lauf1 - 1];
reihe[lauf1 - 1] := reihe[lauf1];
reihe[lauf1] := hilfe;
end;
end;
ende_bubble := time;
zeigen;
Label1.Caption := 'Tauschvorgänge : ' + IntToStr(tausch_bubble);
Label2.Caption := 'Sortierzeit : ' + FloatToStrF((ende_bubble-start_bubble)*24*3600,fffixed,10,3)+' s';
end;
procedure TForm1.Insertion1Click(Sender: TObject);
var
lauf1, lauf2 : integer;
hilfe : integer;
begin
tausch_ins := 0;
start_ins := time;
for lauf1 := 2 to max do
begin
hilfe := reihe[lauf1];
lauf2 := lauf1;
while (lauf2 > 1) and (reihe[lauf2 - 1] > hilfe) do
begin
reihe[lauf2] := reihe[lauf2 - 1];
dec(lauf2);
end;
reihe[lauf2] := hilfe;
inc(tausch_ins);
end;
ende_ins := time;
zeigen;
Label3.Caption := 'Tauschvorgänge : ' + IntToStr(tausch_ins);
Label4.Caption := 'Sortierzeit : ' + FloatToStrF((ende_ins-start_ins)*24*3600,fffixed,10,3)+' s';
end;
procedure TForm1.Speichern1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
Listbox1.Items.SaveToFile(SaveDialog1.Filename);
end;
procedure TForm1.Laden1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Listbox1.Items.LoadFromFile(OpenDialog1.Filename);
for lauf := 1 to max do
reihe[lauf] := StrToInt(Listbox1.Items[lauf - 1]);
end;
procedure TForm1.unsortiertLschen1Click(Sender: TObject);
begin
ListBox1.Clear;
end;
procedure TForm1.sortiertLschen1Click(Sender: TObject);
begin
ListBox2.Clear;
end;
procedure TForm1.Selection1Click(Sender: TObject);
var
lauf1, lauf2, imax, smax : integer;
begin
tausch_sel := 0;
start_sel := time;
for lauf1 := max downto 2 do
begin
imax := lauf1;
smax := reihe[lauf1];
for lauf2 := 1 to lauf1 - 1 do
if reihe[lauf2] > smax then
begin
imax := lauf2;
smax := reihe[lauf2];
end;
reihe[imax] := reihe[lauf1];
reihe[lauf1] := smax;
inc(tausch_sel);
end;
ende_sel := time;
zeigen;
Label5.Caption := 'Tauschvorgänge : ' + IntToStr(tausch_sel);
Label6.Caption := 'Sortierzeit : ' + FloatToStrF((ende_sel-start_sel)*24*3600,fffixed,10,3)+' s';
end;
procedure TForm1.Shell1Click(Sender: TObject);
var
abstand, lauf1, lauf2, merke : integer;
fertig : boolean;
begin
tausch_shell := 0;
start_shell := time;
abstand := max;
while (abstand > 1) do
begin
abstand := abstand div 2;
repeat
fertig := true;
for lauf2 := 1 to max - abstand do
begin
lauf1 := lauf2 + abstand;
if (reihe[lauf2] > reihe[lauf1]) then
begin
merke := reihe[lauf2];
reihe[lauf2] := reihe[lauf1];
reihe[lauf1] := merke;
fertig := false;
inc(tausch_shell);
end;
end;
until fertig;
end;
ende_shell := time;
zeigen;
Label7.Caption := 'Tauschvorgänge : ' + IntToStr(tausch_shell);
Label8.Caption := 'Sortierzeit : ' + FloatToStrF((ende_shell-start_shell)*24*3600,fffixed,10,3)+' s';
end;
procedure TForm1.quicksort(links, rechts:integer);
var
lauf1,lauf2,mitte, merke: integer;
begin
lauf1:= links;
lauf2:= rechts; {übergebene Variable werden eingelesen}
mitte:= reihe[(links + rechts) div 2];
repeat
while reihe[lauf1] < mitte do inc(lauf1);
while Mitte < reihe[lauf2] do dec(lauf2);
if lauf1 <= lauf2 then
begin
merke:= reihe[lauf1];
reihe[lauf1] := reihe[lauf2];
reihe[lauf2] := merke;
inc(lauf1);
dec(lauf2);
end;
until lauf1 > lauf2;
if links < lauf2 then quicksort(links,lauf2);
if lauf1 < rechts then quicksort(lauf1, rechts);
end;
procedure TForm1.Quick1Click(Sender: TObject);
begin
{ein iteratives Programm}
quicksort(1,a);
zeigen;
end;
end.
Alles anzeigen
2. Brauche ich ein kostenloses Programm mit dem ich Delphi porgrammieren kann. Meine testversion von Embederaco ( oder wie auch immer ) ist leider vorgestern ausgelaufen .
MfG Erleon
//EDIT:
Kann geclosed werden. hab unten bei Quicksort anstatt der Constante max a geschrieben... und ich hab herausgefunden das man seine trial von delphi rad xe studio verlängern kann
MfG Erleon