Wenn du Range-Checking angehabt hättest in deinem Projekt oder dir deinen Code
nochmal genau angesehen hättest, dass wärst du vielleicht über deine Misch-Funktion
gestolpert
Delphi-Quellcode:
procedure TForm1.btmischenClick(Sender: TObject);
var w,x,j:integer;
begin
Randomize;
for w:=0 to max-1 do begin
j:=Random(max)+1;
X:=nummern[w-1];
nummern[w-1]:=nummern[j-1];
nummern[j-1]:=x;
end;
schreibediebox;
end;
Durch w := 0 to machst du eine korrekte Schleife für dynamische Arrays.
Allerdings greifst du dann mit nummern[w-1] in ersten Durchlauf auf nummern[-1] zu,
was dein Array zerstört und z.B. auf 9 Elemente kürzen kann, da du die interne
Größen-Angabe überschreibst im Speicher.
Wenn du die Funktion so umschreibst funktioniert alles (hab zumindest QuickSort getestet):
Delphi-Quellcode:
procedure TForm1.btmischenClick(Sender: TObject);
var w,x,j:integer;
begin
for w:=0 to max-1 do begin
j := Random(max);
X := nummern[w];
nummern[w] := nummern[j];
nummern[j] := x;
end;
schreibediebox;
end;
Du musst bei dynamischen Arrays höllisch auf den Index achten ^^
(Zumal dein Code mit den vielen Ein-Buchstaben-Variablen glatt als C++-Code durchgehen würde
)
Achso: Die vielen globalen Variablem machen deine Code sehr unübersichtlich und fehleranfällig.
Versuche mal mehr mit Parametern und eigenen Typen zu hantieren.