Einzelnen Beitrag anzeigen

Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#11

Re: Keine doppelten Zufallszahlen mehr

  Alt 20. Jun 2005, 21:43
Jetzt ist meine Variante im Vorteil :
Delphi-Quellcode:
procedure RandomArray(var AArray: array of Integer; const AStart, AStep, ACount: Integer);
var
  List: TList;
  i, Index: Integer;
begin
  if ACount < Length(AArray) then
    raise EInvalidArgument.Create('ACount muss größer/gleich der Länge von AArray sein');
  List := TList.Create;
  try
    i := AStart;

    repeat // erst alle Werte in die Liste packen, ...
      List.Add(Pointer(i));
      Inc(i, AStep);
    until i = AStart + AStep * ACount;

    for i := Low(AArray) to High(AArray) do // ...dann zufällig einen rauspicken
    begin
      Index := Random(List.Count);
      AArray[i] := Integer(List.Items[Index]);
      List.Delete(Index);
    end;

  finally
    List.Free;
  end;
end;
(EInvalidArguement ist in "Math" deklariert)
Falls niemand wieder einen Super-Algorithmus vorlegt, werde ich diesen Code morgen in den Library-Thread posten .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat