Autor |
Beitrag |
cornen
Hält's aus hier
Beiträge: 8
|
Verfasst: Mo 07.06.10 16:59
Hey^^
Ich schaffe es irgentwie nicht einen Zahlengenerator zu baun :/
Bei meinem letzten versuch war die Zahl nicht 16 Stellig sondern über 50-.-
Könnte mir jemand pls die source geben wäre ganz ganz nett =D Moderiert von Narses: Topic aus VCL (Visual Component Library) verschoben am Mo 07.06.2010 um 20:29
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Mo 07.06.10 17:13
Wie sah dein Versuch denn aus?
|
|
Arbengie
      
Beiträge: 66
|
Verfasst: Mo 07.06.10 17:16
Tipp:
unit math;
RandomRange(0,9);
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Mo 07.06.10 17:20
Quelltext 1: 2:
| Für i 1 bis 16 Zahl := Zahl + Random(10) * 10 hoch i |
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Mo 07.06.10 17:38
Fast.. die höchstwertige Stelle sollte nicht Null sein 
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Mo 07.06.10 17:46
war ja nur ne anregung *beleidigt sei* Stand aber auch nirgends in den Forderungen, dass er es anders wollte. 16 Zahlen 0 - 9... das habe ich schon sehr weit interpretiert.
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Mo 07.06.10 17:52
Auslegungssache, brauchst nicht beleidigt sein
Für mich ist halt 0000000000000001 keine 16stellige Zahl, und es ist ja auch von meiner Seite nur als Anregung für den TE gedacht.
Grüsse, Dirk
|
|
ThunderDragon
      
Beiträge: 26
Windows 7 Professional 32Bit
Delphi 2009 Enterprise
|
Verfasst: Di 08.06.10 09:36
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Di 08.06.10 20:07
Einfache Variante für 16stellige Zahl: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| function Rnd16DigitNumber: Int64; var i: Integer; begin Result := Random(9) + 1; for i := 1 to 15 do Result := Result * 10 + Random(10); end; |
oder (auch ohne Bereichskontrolle)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function Generate(MinDigit, MaxDigit, DigitCount: Integer): Int64; var i: Integer; begin if MinDigit = 0 then Result := Random(MaxDigit) + 1 else Result := Random(MaxDigit - MinDigit + 1) + MinDigit; for i := 1 to Pred(DigitCount) do Result := Result * 10 + Random(MaxDigit - MinDigit + 1) + MinDigit; end; |
Grüsse, Dirk
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Di 08.06.10 21:04
*hust* Denkt nochmal drüber nach, ob sich das nicht auch mit einem einzigen Random-Aufruf lösen lässt (ich spreche von Zahlen mit den Ziffern 0-9, alles andere war nicht gefragt)  .
_________________ >λ=
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Di 08.06.10 21:14
Im FrageText war von 16stellig die Rede.. daher der zusätzliche Aufruf am Anfang. Klar kann man den weglassen wenn Zahlen mit "bis zu 16 Stellen" gesucht werden.
Ein einfacher Random-Aufruf reicht leider nicht, da der einen Integer (max. 10stellig) zurückgibt.
Grüsse, Dirk
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Di 08.06.10 21:33
Ah, mit Int64 hast du natürlich recht. Aber auch dann genügen 2 statt 16 Aufrufe (oder weiterhin einer mithilfe von Random()) - egal, wie man "16-stellig" nun definiert.
_________________ >λ=
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Di 08.06.10 22:22
Ich hab nicht viel Ahnung von Wahrscheinlichkeitsrechnung, aber wäre bei zwei Aufrufen nicht die Zufälligkeit reduziert? Wenn Random(100000000) mit gleicher Wahrscheinlichkeit "1" und "99999999" liefert heisst das für mich das die höherwertigen Stellen mit steigender Wahrscheinlichkeit Null (nicht gesetzt) sind wenn ich das immer als "8 Ziffern" auswerte. Somit wäre "0" die Ziffer mit der höchsten Wahrscheinlichkeit.
Durch das Setzen der einzelnen Ziffern wäre ist die Verteilung demnach zufälliger und somit vorzuziehen.
Grüsse, Dirk
|
|