Home » Tipps & Tricks » Object Pascal » Arrays » Zufallsarray erzeugen
Zufallsarray erzeugen
Wer hatte nicht schon einmal die Idee, einen Lottozahlengenerator zu schreiben, hing aber an der Überlegung fest, wie er Zufallszahlen erzeugen kann, die nur einmal vorkommen.Ein Möglichkeit wäre sicherlich einen zufälligen Wert zu bilden und nachzusehen, ob er schon im Array vorkommt. Dies kann aber besonders bei riesigen Arrays sehr viel Zeit kosten (kann sogar zum Aufhänger führen). Deshalb hier eine Prozedur, die um einiges schneller ist.
procedure Random_Number_Generator(var Random_Numbers_Array : array of Integer); const max_Value = 49; var Dummy_Array : array [1..max_Value] of Integer; SwapValue : Integer; Location : Integer; Dummy_Index : Integer; i : Integer; begin for i := 1 to max_Value do Dummy_Array[i] := i; Location := max_Value; while (Location > 0) do begin Dummy_Index := Random(Location) + 1; SwapValue := Dummy_Array[Location]; Dummy_Array[Location] := Dummy_Array[Dummy_Index]; Dummy_Array[Dummy_Index] := SwapValue; Dec(Location); end; for i := 0 to High(Random_Numbers_Array) do Random_Numbers_Array[i] := Dummy_Array[i + 1]; end;
Mit max_Value legt man die obere Grenze der Zahlenreihe fest (Lottozahlen gehen ja nur bis 49).Hier ein Aufruf, den man gleichzeitig als Lottozahlengenerator nehmen kann.
procedure TForm1.Button1Click(Sender: TObject); var Random_Number_Array : array [1..6] of integer; Numerical_Series : string; i : integer; begin Random_Number_Generator(Random_Number_Array); for i := 1 to 6 do Numerical_Series := Numerical_Series + IntToStr(Random_Number_Array[i]) + ' '; ListBox1.Items.Add(Numerical_Series); end;