![]() |
Zufallszahlen von 1-26 generieren
Hi,
ich möchte die Zahlen von 1-26 (jede einmal) in zufälliger reihenfolge in ein array speichern und habe dafür eine repeat until schleife geschrieben:
Delphi-Quellcode:
allerdings schafft es die schleife nicht bis über 17-21 zufallszahlen. woran kann das liegen? oder dauert es nur unheimlich lange, bis die restlichen, noch nicht eingefügten zufallszahlen berechnet wurden?
repeat
rnd:=random(25)+1;//zufallszahlerzeugen if (pos(IntToStr(rnd),s)=0) // fügt zufallszahl dem array hinzu, falls diese zufallszahl bis jetzt noch nicht verwendet wurde then begin a[counter]:=rnd; writeln(counter,': ',rnd); s:=s+IntToStr(rnd)+' '; // zufallszahl in einem string abspeichern, damit sie nicht nochmal ins array geschrieben wird counter:=counter+1; // wenn neue zufallszahl dem array hinzugefügt wurde, wird der zähler erhöht end; until (counter=26); |
Re: Zufallszahlen von 1-26 generieren
Hallo
Schreibe die Zahlen 1-26 in ein Array und "mische" es. |
Re: Zufallszahlen von 1-26 generieren
Danke für die Antwort, aber wie geht das? da muss ich doch auch sicher mit zufall arbeiten
|
Re: Zufallszahlen von 1-26 generieren
Ich würde eine Stringlist nehmen und die Zahlen dort reinschreiben.
Wenn du mit (pos(IntToStr(rnd),s)=0) eine 1 suchst, wirst du die in "1", aber auch in "11" finden. Wenn du das mit einer Stringlist machst, dann sollte das eindeutiger sein if sl.indexof(rnd)=-1 dann einfügen ansonsten weitersuchen |
Re: Zufallszahlen von 1-26 generieren
ich hab noch nie mit stringlists gearbeitet... wie wärs denn, wenn ich nach rnd+' ' suche?
|
Re: Zufallszahlen von 1-26 generieren
Zitat:
![]() |
Re: Zufallszahlen von 1-26 generieren
Oder du mischt es so:
![]() Aber das sollte eigentlich nicht so schwer sein, könnte man sich auch fast selbst überlegen ;) |
Re: Zufallszahlen von 1-26 generieren
Delphi-Quellcode:
..funktioniert recht fix
var
a : array[1..26] of char; .... // initialisieren for i:=1 to 26 do a[i]:= ' '; counter :=0; repeat // rnd := random(25)+1; // Aus der Hilfe: Random returns a random number within the range 0 <= X < Range. // bei Dir wird 26 nie erreicht. rnd:=random(26)+1; if a[rnd] <> 'x' then begin a[rnd]:='x'; inc(counter,1); end; until (counter=26); // Ausgabe for i:=1 to 26 do write(format('%3d %s',[i,a[i]])); writeLn; Grüße Klaus |
Re: Zufallszahlen von 1-26 generieren
[OT]
Hallo auch wenn das nicht gerade zu deinem Lösungsansatz gehört, ist noch ein kleiner Fehler drin (Habs ebend nur schnell überflogen, hoffe kein anderer hat dazu schon was gepostet). Zitat:
MfG BAMatze [/OT] Edit: Mist Klaus war ebend schneller und hat den Fehler im Quellcode schon verbessert |
Re: Zufallszahlen von 1-26 generieren
Eine StringList ist zwar als Container nicht optimal... etwas oversized, aber wenn man schon munter am Code posten ist
Delphi-Quellcode:
procedure ShakeStringList(aStringList : TStringList);
var i, Count : Integer; begin Count := aStringList.Count; for i := 0 to Count -1 do aStringList.Move(Random(Count), Random(Count)); end; procedure TForm1.Button1Click(Sender: TObject); var StringList : TStringList; i : Integer; begin Randomize; StringList := TStringList.Create; try for i := 1 to 26 do StringList.Add(IntToStr(i)); ShakeStringList(StringList); // Hier wird das Ergebnis in einer ListBox angezeigt ListBox1.Items.Assign(StringList); finally StringList.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 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-2025 by Thomas Breitkreuz