Entwickler-Ecke
Sonstiges (Delphi) - Zahlengenerator(16 Zahlen je 0-9)
cornen - Mo 07.06.10 16:59
Titel: Zahlengenerator(16 Zahlen je 0-9)
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 - Mo 07.06.10 17:13
Wie sah dein Versuch denn aus?
Arbengie - Mo 07.06.10 17:16
Tipp:
unit math;
RandomRange(0,9);
FinnO - Mo 07.06.10 17:20
Quelltext
1: 2:
| Für i 1 bis 16 Zahl := Zahl + Random(10) * 10 hoch i |
Tryer - Mo 07.06.10 17:38
Fast.. die höchstwertige Stelle sollte nicht Null sein ;)
FinnO - 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 - Mo 07.06.10 17:52
Auslegungssache, brauchst nicht beleidigt sein :beer:
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 - Di 08.06.10 09:36
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| uses Math;
function Generate(Min,Max,Count: Integer): Int64; var lCnt: Int64; begin Randomize; Result := 0; lCnt := 1; while Power(10,Count - 1) >= lCnt do begin Result := Result + lCnt * Math.Max(1,(Random(Max - Min + 1) + Min)); lCnt := lCnt * 10; end; end; |
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin Button1.Caption := IntToStr(Generate(0,9,16)); end; |
Gruß
Edit: Bei Count 18 ist aber Feierabend ^^. und Werte für Min und Max < 0 bzw > 9 sind nicht abgefangen.
Tryer - 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 - 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 - 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 - 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 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!