Seite 1 von 1

Zufallsgenerator

Verfasst: So Apr 17, 2011 9:28 am
von tauberheli
Hallo!

Ich möchte mit srand()/rand() mehrere Zufallszahlen generieren. Das Problem: Auch bei einer Schleife kommt immer die selbe Zahl raus. Was kann man da machen?

Danke und LG,
Heli

Re: Zufallsgenerator

Verfasst: So Apr 17, 2011 9:34 am
von Xin
tauberheli hat geschrieben:Ich möchte mit srand()/rand() mehrere Zufallszahlen generieren. Das Problem: Auch bei einer Schleife kommt immer die selbe Zahl raus. Was kann man da machen?
Es gibt keinen Zufallsgenerator, rand() ist eine Funktion die wirr Zahlen erzeugt, aber eben nicht zufällig.

Mittels rand initialisierst Du diese Funktion, das bedeuetet, dass Du gewissermaßen die erste Zahl vorgibst. So kannst Du ein Programm mit Zufallsgenerator debuggen, weil Du einen Verlauf von Zufallszahlen reproduzieren kannst.

Um wirklich zufällige Zahlen zu haben, brauchst Du einen vergleichsweise zufälligen Initialisierungswert. Eine Möglichkeit ist die aktuelle Uhrzeit zu nehmen:

Code: Alles auswählen

  srand( time() );

Re: Zufallsgenerator

Verfasst: So Apr 17, 2011 10:53 am
von tauberheli
Zu unterschiedlichen Zeitpunkten bekomme ich natürlich unterschiedliche Zahlen. (Soweit weiß ich Bescheid)

Ich habe aber das Problem, dass ich mehrere zufällige Zahlen in einem Programm generieren will. (Siehe unten)
Geht das? Oder nicht?

LG



Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main ()
{
  int a,b;
    
  srand ( time(NULL) );
  a=rand();
  srand ( time(NULL) );
  b=rand();
  
  
  printf ("Random number: %d\n", a);
  printf ("Random number: %d\n", b);


  return 0;
}

Re: Zufallsgenerator

Verfasst: So Apr 17, 2011 10:58 am
von cloidnerux
Ich habe aber das Problem, dass ich mehrere zufällige Zahlen in einem Programm generieren will. (Siehe unten)
Geht das? Oder nicht?
natürlich geht das, aber du kannst dir den 2 Aufruf von srand sparen, da bei jedem aufruf von rand() die Basiszahl(das was du mit srand intialisiertst) verändert wird, und du so mit jedem aufruf von rand() eine neue zahl erhälst.
Aber das funktioniert so nicht:

Code: Alles auswählen

  a=rand();
http://www.proggen.org/doku.php?id=c:lib:stdlib:rand
rand() gibt nämlich nur einen Float zwischen 0 und 1 zurück.

Edit by Xin: URL korrigiert

Re: Zufallsgenerator

Verfasst: So Apr 17, 2011 11:28 am
von Xin
cloidnerux hat geschrieben:
Ich habe aber das Problem, dass ich mehrere zufällige Zahlen in einem Programm generieren will. (Siehe unten)
Geht das? Oder nicht?
natürlich geht das, aber du kannst dir den 2 Aufruf von srand sparen
Nicht kannst - musst!

Ein Computerprogramm braucht keine Sekunde um zur zweiten Zeile zu kommen. Wenn nicht zufällig die Sekunde in dem Moment umschlägt, wirst Du den Zufallsgenerator wieder zurücksetzen und bekommst zweimal die gleiche Zahl heraus.

srand initialisiert den Zufallsgenerator. Initialisierung macht man ganz am Anfang - einmalig. ^^

Re: Zufallsgenerator

Verfasst: Mo Apr 18, 2011 2:13 pm
von tobi2212
Hey

Ja dein problem ist das das ganze in ein paar millisekunden von staten geht und dadurch die selbe zahl herauskommt.

Einfache lösung ne if abfrage einbauen wenn die zahlen immer noch die selben sind einfach neu generieren.

mfg
tobi

Re: Zufallsgenerator

Verfasst: Mo Apr 18, 2011 2:20 pm
von Xin
tobi2212 hat geschrieben:Einfache lösung ne if abfrage einbauen wenn die zahlen immer noch die selben sind einfach neu generieren.
Einfachere Lösung: nur einmal initialisieren und dann rand() so oft aufrufen, wie man es braucht? ^^


Dann mal willkommen im Forum :-) => Uservorstellung (kein Zwang)

Re: Zufallsgenerator

Verfasst: Mo Apr 18, 2011 2:32 pm
von tobi2212
Recht haste mein fehler ^^

mfg
tobi