Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zufallsfunktion selbst schreiben... kann jemand helfen? (https://www.delphipraxis.net/29203-zufallsfunktion-selbst-schreiben-kann-jemand-helfen.html)

mojo777 5. Sep 2004 14:52


Zufallsfunktion selbst schreiben... kann jemand helfen?
 
Hallo,

wie funktionieren eigenltich ramdomfunktionen? also ich weiss, dass es in jeder(vernunftigen) Programmiersprache eine Randomfunktion gibt, aber was für eine Idee ist es, die dahinter steckt?

Gruß
Mojo

:coder2:

SleepyMaster 5. Sep 2004 15:18

Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
 
Bin zwar kein Profi dadrin. Hoffe aber ich erklär das richtig:

Es gibt sowas wie eine globale Variable, die am Anfang 0 ist und bei jedem aufruf der Random-funktion um eins erhöht wird. Aus dieser Zahl wird mit einem Algorithmus, der immer möglichst verschiedene Zahlen ausgibt, das random errechnet.
Sieht man auch sehr gut, wenn man diesen Code ausführt:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Listbox1.Items.Add(inttostr(random(1024)));
end;
Es wird immer rauskommen:

Zitat:

Zitat von Listbox1
0
32
881
207
279
...

Es sei denn, man ruft vorher randomize auf.
Durch randomize wird der globalen Zählerariable ein Wert zugewießen, der anhand von Gettickcount errechnet wird

stefan2005 5. Sep 2004 15:20

Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
 
hi,
also so weit ich weiss hängt das irgendwie mit der Systemzeit ab !
Diese wird ausgelesen und anhand der immer verschiedenen Zeit (vielleicht in Millisekunden oder sogar Takte) eine Zufallszahl generiert !

Aber genau hab ich mich auch noch nicht damit beschäftigt !

cu,
stefan2005

//Edit: Zu spät :wink:

himitsu 5. Sep 2004 16:08

Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
 
So wie es Sleepy erklärt hat kommt es schon hin, allerdings kommt nicht immer diese Zahlenfolge raus - da:

Das mit der Systemzeit stimmt auch nur bedingt, undzwar wird beim Aufruf von Randomize die Systemzeitgenommen und als Startwert an den Zufallsgenerator übergeben
Zitat:

Zitat von Die OH
Randomize initialisiert den integrierten Zufallszahlengenerator mit einem zufälligen Wert (der aus der Systemzeit abgeleitet wird). Der Zufallszahlengenerator sollte initialisiert werden, indem die Prozedur Randomize aufgerufen oder der Variablen RandSeed ein Wert zugewiesen wird.

Mit RandSeed kann man auch einen eigenen Startwert festlegen.

Und Random, RandomRange... errechnen dann den Wert

Also es wird immer wieder die gleiche Zahlenfolge zurückgegeben, aber nicht das ihr das jetzt so einfach hinnehmt, denn
Zitat:

Zitat von Die OH
Hinweis: Die Implementierung der Funktion Random kann sich bei einer anderen Compiler-Version ändern. Sie sollten Random daher nicht für Verschlüsselungen oder andere Einsatzbereiche verwenden, in denen reproduzierbare Pseudozufallszahlen benötigt werden.



Der große Lottogenerator arbeitet deßhalb auch nicht auf diesem Prinzip, da ja so die nächsten Lottozahlen rein theoretisch irgendwann mal vorhergesagt werden könnten - dort wird gewissermasen das nicht vorhersehbare Eigenschwingverhalten von Transistoren gemessen...

Nonsense 5. Sep 2004 18:04

Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
 
Zitat:

Zitat von himitsu
dort wird gewissermasen das nicht vorhersehbare Eigenschwingverhalten von Transistoren gemessen...

Also known as quantenphysikalischer Zufall. :wink:

glkgereon 5. Sep 2004 18:28

Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
 
*kram c-buch raus und übersetz in pascal*

Zitat:

Zufallsfunktion selbst schreiben... kann jemand helfen?
ja ich hab ma sonne art zufallsfunktion rausgesucht:

Delphi-Quellcode:
const
  m=10000000;
  m1=10000;

var
  a:longint;

function mult(p, q:longint):longint;
var p1, p0, q1, q0:longint;
begin
p1:=p/m1;
p0:=p mod m1;
q1:=q/m1;
q0:=q mod m1;
result:= (((p0*q1+p1*q0) mod m1)*m1+p0*q0 mod m;
end;

procedure seedrand(seed:longint);
begin
a:=seed;
end;

function getrandom:longint;
const
  b=pi*10000000;
begin
result:=(mult(a,b) +1 ) mod m;
inc(a);//die zeile is von mir, da man sonst seed immer wieder aufrufen müsste.....
end;
ich hoffe ich hab das richtig übersetzt, da es in besagtem buch als c++-klasse dargestellt war...

Meflin 5. Sep 2004 18:43

Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
 
ps: echte zufallszahlen kannst du z.b. dadurch erhalten, dass du eine zeitlang die mausbewegungen abfängst und aus den koordinaten deine zahl berechnest. ziemlich unmöglich das zu reproduzieren!

glkgereon 5. Sep 2004 18:46

Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
 
trotzdem: es gibt KEINE echten zufallszahlen (jedenfalls nicht in der informatik)

du kannst (theoretisch) ALLES reproduzieren und mit entsprechenden logs genau nachvollziehen, wie es zu dieser zahl gekommen ist..

aber es ist klar das die heutigen methoden gut genug bzw völlig ausreichend sind für die meissten anwendungen....

Meflin 5. Sep 2004 18:49

Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
 
oh doch es gibt auch in der informatik echte zufallszahlen. stell dir vor du fährst mit dem auto über eine buckelpiste, misst die federungsbelastung, nimmst das blöcken einer schafherde auf und berechnest aus diesen werten eine zufallszahl - die ist nicht reproduzierbar!

glkgereon 5. Sep 2004 18:51

Re: Zufallsfunktion selbst schreiben... kann jemand helfen?
 
Zitat:

stell dir vor du fährst mit dem auto über eine buckelpiste, misst die federungsbelastung, nimmst das blöcken einer schafherde auf und berechnest aus diesen werten eine zufallszahl - die ist nicht reproduzierbar!
Zitat:

oh doch es gibt auch in der informatik echte zufallszahlen
was verstehst du unter informatik`? :gruebel: :gruebel: :gruebel:

ich mein also in der informatik erstellte, ohne "reale"/"weltliche" oder was auch immer "inputs"

(wer verstanden hat was ich meine: repekt!)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:26 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz