| Autor |
Beitrag |
bax-projekt
Hält's aus hier
Beiträge: 8
XP Home, Mandriva 2006
|
Verfasst: Mo 23.01.06 14:28
Hallo,
da ich schon viele Themen über Zufallsgenerator gelesen und erstellte ein kleines progi.
Jedes Zahl (1-255) kommt nur einmal vor
Vielleicht braucht jemand sowas für sein progi.
MfG
bax-projekt Moderiert von Christian S.: Topic aus Dateizugriff verschoben am Mo 23.01.2006 um 14:33Moderiert von Christian S.: Topic aus Freeware Projekte verschoben am Mo 23.01.2006 um 20:14
Zuletzt bearbeitet von bax-projekt am Mo 23.01.06 14:31, insgesamt 1-mal bearbeitet
|
|
MichaZ
Hält's aus hier
Beiträge: 3
Win XP
Delphi 7 Enterprise
|
Verfasst: Mo 23.01.06 14:30
Ich weiß, es gibt keine dummen Fragen, sondern nur dumme Antworten, aber... > Worin liegt der Sinn? ^^
Ich komm da nicht ganz mit...
|
|
LLCoolDave
      
Beiträge: 212
Win XP
Delphi 2005
|
Verfasst: Mo 23.01.06 14:33
Mal davon abgesehen dass nicht einmal alle Zahlen vorkommen bzw einige (sicher sogar viele) doppelt sind, hab hier zufällig 2 6en direkt unter einander ... 
|
|
bax-projekt 
Hält's aus hier
Beiträge: 8
XP Home, Mandriva 2006
|
Verfasst: Mo 23.01.06 14:34
MichaZ hat folgendes geschrieben: | Ich weiß, es gibt keine dummen Fragen, sondern nur dumme Antworten, aber... > Worin liegt der Sinn? ^^
Ich komm da nicht ganz mit... |
Vielleicht für dich macht es kein Sinn, aber es gibt Leute die sowas nicht können. Wollte nur gefallen tun. Sorry.
|
|
bax-projekt 
Hält's aus hier
Beiträge: 8
XP Home, Mandriva 2006
|
Verfasst: Mo 23.01.06 14:40
OK, mein Fehler und ich dachte schon
Leute, kann mir jemand helfen, wie kann ich ein zufallsgenerator machen (1-255) wo gedes Zahl nur einmal vorkommt?
Bin dankbar!
|
|
F34r0fTh3D4rk
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 23.01.06 14:55
kein ding:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| var zahlen: array[0..255] of boolean; i, j, zahl: integer; begin for i := 0 to 255 do zahlen[i] := false; for j := 0 to 255 do begin repeat zahl := random(256); until (zahlen[zahl] = false); zahlen[zahl] := true;
writeln(inttostr(zahl)); end; |
sollte funktionieren, ich denke eine weitere abfrage ist nicht nötig, da die anzahl der ausgebenen zahlen der maximal zahl entspricht;
wenn du von 1..255 haben willst, musst du das noch ein wenig abändern, aber ich denke du hast die eigeninitiative dazu 
|
|
Spaceguide
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: Mo 23.01.06 15:35
Ich glaub das geht eleganter, wenn man die Zahlen in einer Liste einträgt und die gezogenen jeweils löscht. Dein "repeat until" ist bestenfalls O(n).
|
|
bax-projekt 
Hält's aus hier
Beiträge: 8
XP Home, Mandriva 2006
|
Verfasst: Mo 23.01.06 16:08
Danke F34r0fTh3D4rk!
von 1-255 war nicht so schwer
Nochmal danke
|
|
F34r0fTh3D4rk
      
Beiträge: 5285
Erhaltene Danke: 29
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 23.01.06 16:36
musst dann eben random(255) + 1 machen
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 23.01.06 20:14
Moin!
Warum immer so kompliziert, einfach "rückwärts" sortieren...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var Zahl: array[0..255] of Integer; i,j,hilf: Integer; begin for i := 0 to 255 do Zahl[i] := i; for i := 0 to 255 do begin j := Random(256); hilf := Zahl[i]; Zahl[i] := Zahl[j]; Zahl[j] := hilf; end; for i := 0 to 255 do Memo1.Lines.Add(IntToStr(Zahl[i])); |
cu
Narses
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 23.01.06 20:24
Narses: Du machst einen klitzekleinen Fehler, der -rein rechnerisch- das Array nicht ganz so gut durchmischt. I.A. nimmt man den fast identischen Code von Miller-Yates zum Durchmischen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| For I := 0 to Count-1 do begin J := I+random(Count-I); T := A[J]; A[J] := A[I]; A[I] := T; end; |
Das Prinzip ist aber das Gleiche.
_________________ Na denn, dann. Bis dann, denn.
|
|