Einzelnen Beitrag anzeigen

Benutzerbild von overmoon
overmoon

Registriert seit: 8. Aug 2003
Ort: Passau
51 Beiträge
 
Delphi 6 Personal
 
#10

Re: bei Random niemals diegleiche Zahl

  Alt 21. Aug 2003, 21:00
Auch, wenn das Thema ja schon fast erledigt ist, habe ich auch noch einen Vorschlag.

Die Prozedur "InitZufallsZahlen" füllt ein variables array mit den Zahlen eines bestimmten Bereichs. Über die Funktion "GetZufallsZahl" kann man sich dann Zufallszahlen nehmen bis das Array leer ist (Denn, wenn man sich eine holt, wird sie aus dem Array entfernt.). So ist sichergestellt, dass keine Zufallszahl doppelt vorkommt.

Delphi-Quellcode:
//==============================================================================

var ZufallsZahlen : array of Integer;

//==============================================================================

procedure InitZufallsZahlen(ErsteZahl, LetzteZahl: Integer);
var index : Integer;
begin
     if LetzteZahl < ErsteZahl then Exit;
     Randomize;
     SetLength(ZufallsZahlen,LetzteZahl-ErsteZahl+1);
     for index := 0 to Length(ZufallsZahlen)-1 do
     ZufallsZahlen[index] := ErsteZahl + index;
end;

//==============================================================================

function GetZufallsZahl(var ZufallsZahl: Integer):Boolean;
var position : Integer;
    index : Integer;
begin
     if Length(ZufallsZahlen) > 0 then
     begin
          position := random(Length(ZufallsZahlen));
          ZufallsZahl := ZufallsZahlen[position];
          for index := position to Length(ZufallsZahlen)-2 do
          ZufallsZahlen[index] := ZufallsZahlen[index+1];
          SetLength(ZufallsZahlen,Length(ZufallsZahlen)-1);
          result := True;
     end
     else
     begin
          ZufallsZahl := 0;
          result := False;
     end;
end;

//==============================================================================
Natürlich kann man auch meinen Vorschlag auf beliebige Typen ausweiten. man müsste nur folgendes ändern:
1.) Statt "array of integer" "Array of MEIN_TYP" schreiben
2.) Eine eigene InitZufallszahlen schreiben
3.) Bei der Funktion GetZufallsZahl den var-Paramter ändern.

overmoon
"Habe Mut, dich deines eigenen Verstandes zu bedienen." (Immanuel Kant)
  Mit Zitat antworten Zitat