![]() |
Re: Zufallszahl ziehen ohne wiederholung
Gute Antwort :-D
Dann gib doch mal ein Beispiel wie mein Code statt einer TStringList mit TList aussähe. Habe noch nie damit gearbeitet. Du hast mich schon fast überzeugt |
Re: Zufallszahl ziehen ohne wiederholung
Delphi-Quellcode:
Wenns mich net täuscht so, nur getippt, nicht propiert :mrgreen:
rocedure Sproideldoing;
var Pottich: TList; i, z: integer; begin Pottich := TList.Create; try for i := 1 to 40 do Pottich.Add(TObject(i)); for i := 1 to 15 do begin z := random(Pottich.Count); ShowMessage(IntToStr(Integer(Pottich[z]))); Pottich.Delete(z); end; finally Pottich.Free; end; end; |
Re: Zufallszahl ziehen ohne wiederholung
aus deinem code mal fix geändert (wie gesagt, viel anders ists nicht):
Delphi-Quellcode:
dein code war übrigends nicht ganz lauffähig... das IntToStr bei der showmessage war zuviel :)
procedure TForm1.Button1Click(Sender: TObject);
var Pottich: TList; i, z: integer; begin Pottich := Tlist.Create; try for i := 1 to 40 do Pottich.Add(TObject(i)); for i := 1 to 15 do begin z := random(Pottich.Count); ShowMessage(IntToStr(Integer(Pottich[z]))); Pottich.Delete(z); end; finally Pottich.Free; end; end; Mist...da war jemand schneller...und das um die Zeit Gute Nacht |
Re: Zufallszahl ziehen ohne wiederholung
Zitat:
Gruß -- |
Re: Zufallszahl ziehen ohne wiederholung
Das selbe Spielchen würde mit einer TStringList auch funktionieren, wenn man
![]() |
Re: Zufallszahl ziehen ohne wiederholung
Ein Variante von mir, schafft auf meinem Rechner 3 Millionen Ziehungen von 6 aus 49 pro Sekunde.
Delphi-Quellcode:
Wenn die Ergebnisse sortiert sein dürften, sähe das noch etwas einfacher aus.
const
CRLF = #13#10; function Lottozahlen(Min, Max: Integer; Count: Word): TIntegerDynArray; {---} procedure Swap(var Value1, Value2: Integer); inline; var Temp: Integer; begin Temp := Value1; Value1 := Value2; Value2 := Temp; end; {---} var diff, i1, i2, r1, r2: Integer; SortArray: TIntegerDynArray; begin diff := Max - Min + 1; if diff < Count then raise Exception.Create(Format('Ungültige Parameter' + CRLF + 'Lottozahlen(%d, %d, %d)', [Min, Max, Count])); SetLength(Result, Count); SetLength(SortArray, Count); for i1 := 0 to Count - 1 do begin r1 := Random(diff) + Min; r2 := r1; for i2 := 0 to i1 - 1 do begin if (r1 = r2) and (SortArray[i2] <= r2) then begin Inc(r1); Inc(r2); end else Swap(r2, SortArray[i2]); end; Result[i1] := r1; SortArray[i1] := r2; Dec(diff); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz