Zufallsgenerator

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
tauberheli
Beiträge: 16
Registriert: Di Apr 27, 2010 3:47 pm

Zufallsgenerator

Beitrag von tauberheli » So Apr 17, 2011 9:28 am

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Zufallsgenerator

Beitrag von Xin » So Apr 17, 2011 9:34 am

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() );
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

tauberheli
Beiträge: 16
Registriert: Di Apr 27, 2010 3:47 pm

Re: Zufallsgenerator

Beitrag von tauberheli » So Apr 17, 2011 10:53 am

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;
}

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Zufallsgenerator

Beitrag von cloidnerux » So Apr 17, 2011 10:58 am

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
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Zufallsgenerator

Beitrag von Xin » So Apr 17, 2011 11:28 am

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. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

tobi2212
Beiträge: 10
Registriert: Mo Apr 18, 2011 1:26 pm

Re: Zufallsgenerator

Beitrag von tobi2212 » Mo Apr 18, 2011 2:13 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Zufallsgenerator

Beitrag von Xin » Mo Apr 18, 2011 2:20 pm

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)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

tobi2212
Beiträge: 10
Registriert: Mo Apr 18, 2011 1:26 pm

Re: Zufallsgenerator

Beitrag von tobi2212 » Mo Apr 18, 2011 2:32 pm

Recht haste mein fehler ^^

mfg
tobi

Antworten