mikrocontroller.net

Forum: Gesperrte Threads zufallszahl mit rand()


Autor: znil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo leute,
wie erzeuge ich eine zufallszahl mit random, die sich beim aufruf der 
random funktion auch ändert? folgender quellcode liefert immer die 
gleiche zahl:
void zufallszahl ()
{
int i;
rand ((unsigned) time(NULL));
  for(i = 1; i <= 1; i++)
  {
    zahl = 0 + ( rand() % 255);
    printf("erzeugte Zufallszahl %i \n\r" , zahl);
    return (zahl);
  }
}
ich benötige bei jedem aufruf von zufallszahl() allerdings eine andere 
zahl zwischen 0 und 255.kann mir jemand weiterhelfen?!danke schonmal

Autor: flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

das ist nun mal die Art nach der rand() arbeitet. Diese Funktion erzeugt 
immer die gleichen Zufallszahlen. Das liegt daran, dass der Computer 
diese Zufallszahlen ja immer mit einem bestimmten Algorithmus berechnen 
muss. Da der Computer aber "dumm" ist liefert er immer die gleichen 
Zahlen, da er immer den gleichen Algorithmus benutzt. Um das zu 
vermeiden gibt es den srand() Befehl der den Generator mit einem 
bestimmte Wert initialisiert. Meist wird hier einfach die Computerzeit 
übergeben.
#include <stdlib.h>
#include <time.h>

void zufallszahl()
{
int i;
int zahl;

  srand(time(0));

  for(i = 1; i <= 1; i++)
  {
       
       zahl=+(rand()%255); 

       printf("erzeugte Zufallszahl %i \n\r" , zahl);

       //return (zahl);
  }
}

so hoffe ich konnte Dir helfen.

flo

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void zufallszahl()
{
int i;
int zahl;

  srand(time(0));


Nein.
srand() soll/darf in einem Programm nur ein einziges Mal
aufgerufen werden! Normalerweise macht man das, wenn das
Programm hochfährt in der main() (oder in einer generellen
init() Funktion, so man eine hat).

Nach diesem (einzigen) Aufruf von srand() lässt man diesen
Teil in Ruhe und ruft nur noch rand() zur Generierung der
nächsten Zahl auf. Dies ist ganz wichtig, damit rand() in
Ruhe arbeiten kann und auch die statistische Verteilung
der Zufallszahlen erreichen kann. Wenn du immer wieder
srand() aufrufst, dann erhältst du alles mögliche, aber
sicher keine Zahlen, die auch nur annähernd auch den
simpelsten statistischen Test auf Zufälligkeit schaffen
würden.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.