Autor Beitrag
cornen
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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 user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Mo 07.06.2010 um 20:29
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Mo 07.06.10 17:13 
Wie sah dein Versuch denn aus?
Arbengie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 66



BeitragVerfasst: Mo 07.06.10 17:16 
Tipp:

unit math;

RandomRange(0,9);
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mo 07.06.10 17:20 
ausblenden Quelltext
1:
2:
Für i 1 bis 16
  Zahl := Zahl + Random(10) * 10 hoch i
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Mo 07.06.10 17:38 
Fast.. die höchstwertige Stelle sollte nicht Null sein ;)
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26

Windows 7 Professional 32Bit
Delphi 2009 Enterprise
BeitragVerfasst: Di 08.06.10 09:36 
ausblenden 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;


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Di 08.06.10 20:07 
Einfache Variante für 16stellige Zahl:
ausblenden 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)
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: 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