| Autor |
Beitrag |
TRUCKERm
Hält's aus hier
Beiträge: 9
|
Verfasst: Mi 26.01.11 22:38
Joah...diese schleife scheint endlos zu laufen...wieso?
Ich will das für FZ[1 bis 3] verschiedene zuffalswerte generiert werden.
totc ist 3
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure Tform1.InitRQ; var svc,svx,zahl:integer; var bv:boolean; begin
bv:=false;
for svc:=1 to totc do begin randomize; repeat begin bv:=false; Zahl:=Random(totc)+1; bv:=true; for svx:=1 to totc do begin if FZ[svx] = Zahl then bv:=false; end; end; until bv=true; FZ[svc]:=zahl; end; end; |
[delphi]
Falls jemand eine Idee hätte wäre es super wenn er sie mit mir teilen würde.
Moderiert von Gausi: Quote- durch Delphi-Tags ersetzt
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Mi 26.01.11 22:57
Naja, ganz offensichtlich ist 'Zahl' im Array 'FZ' enthalten...
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mi 26.01.11 23:01
randomize;
nur einmal im Programm aufrufen.
Mir erschließt sich der Sinn des ganzen nicht, aber wenn Du FZ mit 0 ern initialisiert läuft alles wie es soll.
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
TRUCKERm 
Hält's aus hier
Beiträge: 9
|
Verfasst: Mi 26.01.11 23:05
bummi hat folgendes geschrieben : | randomize;
nur einmal im Programm aufrufen.
Mir erschließt sich der Sinn des ganzen nicht, aber wenn Du FZ mit 0 ern initialisiert läuft alles wie es soll. |
Du musst bedenken, das ich warscheinlich den code so schwachsinnig wie es nur geht geschrieben habe.
Vielleicht kannst du das da für mich abändern oder kurz was neues schreiben?
Jedenfalls nochmal der Sinn:
FZ soll für die werte 1 bis totc (in diesem fall 3) eine zufällige Nummer zwischen 1 und totc erhalten die sich aber nicht wiederholen darf.
Datenpaare wie folgende sind möglich:
FZ[1]=2
FZ[2]=1
FZ[3]=3
usw.
Normalerweise soll das mit totc=36 Laufen, ich teste es gerade nur so mit totc=3.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 26.01.11 23:07
Fülle das Array mit den Zahlen 1..totc ubd mische es dann, fertig...
www.delphi-library.d...t+shuffle_71713.html
Für diesen Beitrag haben gedankt: TRUCKERm
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mi 26.01.11 23:08
Du suchst also eine zufällige Verteilung der Zahlen 1 bis 36? Also einmal das Array gründlich durchmischen? Dann schau dir mal dieses Topic an.
Argh. Da war Sebastian wieder schneller. 
_________________ We are, we were and will not be.
Zuletzt bearbeitet von Gausi am Mi 26.01.11 23:09, insgesamt 1-mal bearbeitet
Für diesen Beitrag haben gedankt: TRUCKERm
|
|
TRUCKERm 
Hält's aus hier
Beiträge: 9
|
Verfasst: Mi 26.01.11 23:08
platzwart hat folgendes geschrieben : | | Naja, ganz offensichtlich ist 'Zahl' im Array 'FZ' enthalten... |
Mir fällt grad auf....das du Recht hast.
Ne idee wie ich das schreibe, sodass er nach allen Werten in FZ sucht außer nach der jetzigen?
Wäre das eine Option? (ich würds ja testen...aber ich glaube hier sind eh überall fehler drin...
Delphi-Quelltext 1: 2: 3: 4: 5:
| for svx:=1 to svc-1 do begin if FZ[svx] = Zahl then bv:=false; end; |
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Mi 26.01.11 23:11
Randomize nur ein einziges Mal aufrufen! Z.B. im OnCreate der Form...
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
TRUCKERm 
Hält's aus hier
Beiträge: 9
|
Verfasst: Mi 26.01.11 23:16
Zuletzt bearbeitet von TRUCKERm am Mi 26.01.11 23:23, insgesamt 1-mal bearbeitet
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Do 27.01.11 01:03
nimm's doch so wie beschieben
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| type TA=Array of Integer;
procedure ShuffleFisherYates(var aArray: TA); var i,j: Integer; tmp: integer; begin for i := Low(aArray) to High(aArray) do begin j := i +Random(Length(aArray) -i +Low(aArray)); tmp := aArray[j]; aArray[j] := aArray[i]; aArray[i] := tmp; end; end;
procedure TForm1.Button1Click(Sender: TObject);
var a:TA; i:Integer; begin SetLength(A,100000); for I := LOW(A) to High(A) do A[i] := i; ShuffleFisherYates(a); end; |
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|