Zufallszahlen

Hallo!
Ich versuche, mit der rand() Funktion in einer Schleife eine zufällige Folge von 0 und 1 (kann auch 6 und 9 sein, Hauptsache zwei ganze Zahlen) zu erzeugen.
Das brauche ich für die Funktion

int kauf()
{
int i,max=0,k=0,m=0,r;
for(i=0;imax)
max=k;
m=0;
}
if(r==1)
{
++m;
if(m>max)
max=m;
k=0;
}
}
if(k>m)
return k;
else
return m;
}

welche den zufälligen Kauf von zwei Produkten einmal täglich über Jahr simulieren soll. Leider liefert mir der rand() Aufruf nur nullen, so dass mein max (also die maximale Anzahl von gleichen Ergebnissen in Folge) immer 365 ist.
Wie krieg ich es hin, dass mein r zufällig genau 1 oder 0 ist?
Vielen Dank im Voraus,
Grüße

Hallo.

Wie krieg ich es hin, dass mein r zufällig genau 1 oder 0 ist?

r=rand()%2;
Habs nicht getestet, müsste aber so passen.
Liebe Grüße.
Alex

Hi!
Dannke! Klappt.
Allerdings habe ich auch noch die Möglichkeit (int)(rand()/(RAND_MAX+1.0)*2); gefunden. Wenn ich das Programm für 100000 Jahre laufen lasse, bekomme ich mit deiner Methode einen Mittelwert für max von 1,99…, mit der obigen allerdings 2,4…
Was ist nun richtiger?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo

Dannke! Klappt.

Das Problem ist hierbei, daß die letzten Bits
nicht besoders zufällig verteilt sein werden.
IMHO besser, eine Partition (Mitte des Bereichs)
zu verwenden.

Allerdings habe ich auch noch die Möglichkeit
(int)(rand()/(RAND_MAX+1.0)*2); gefunden. Wenn ich das
Programm für 100000 Jahre laufen lasse, bekomme ich mit deiner
Methode einen Mittelwert für max von 1,99…, mit der obigen
allerdings 2,4… Was ist nun richtiger?

Was hast Du denn überhaupt vor?

Ich würde es so machen:

 int kauf()
{
 int i, max=0, k=0, m=0;
 int RAND\_MAX\_HALBE = (RAND\_MAX+1)/2;
 
 for(i=0; i max) max = m;
 k = 0;
 }
 else {
 if(++k \> max) max = k;
 m = 0;
 }
 }

 return k \> m ? k : m;
}

Grüße

CMБ