Delphi-Quellcode:
type
TZahlen =
array of Integer;
procedure Lotto(
var Sortiert,Gezogene: TZahlen; Ziehungen: Integer = 6; Elemente: Integer = 49);
var
I,J,K,N: Integer;
begin
Sortiert :=
nil;
// stellt sicher das Sortiert <> Gezogene ist
Gezogene :=
nil;
if Ziehungen > Elemente
then
raise Exception.Create('
Man kann nicht mehr Kugeln ziehen als in der Urne sind');
SetLength(Sortiert, Ziehungen);
SetLength(Gezogene, Ziehungen);
for I := 0
to Ziehungen -1
do
begin
K := 0;
N := Random(Elemente - I) + 1;
for J := 0
to I -1
do
if N >= Sortiert[J]
then
begin
Inc(N);
Inc(K);
end else Break;
for J := I
downto K +1
do
Sortiert[J] := Sortiert[J -1];
Sortiert[K] := N;
Gezogene[I] := N;
end;
end;
Aufruf für deinen Fall dann Lotto(..,..., 6, 6);
Du kanst dir das so umbauen das der Parameter "Sortiert" als lokale Variable benuztzt wird, da du ja nur die gezogene Reihenfolge benötigst.
Gruß Hagen
PS:
Zitat:
Deshalb ist das Mischen eleganter: klick
Ansichtssache, mischen halt ich für eine "Brute Force" Methode.