Modulo Operator zur erzeugung von zufallszahlen

Hi!

hab da mal ne frage…
wir sollen einen ein Lotto Generator programmieren, der ZUFALLSZAHLEN von 1 bis 49 erzeugt!

und ich weis auch schon das der befehl rand()%49 zufallszahlen bis 49 erzeugt… hier is jetzt aber die frage ob da die null auch mit drinne is(bei lotto etwas schlecht)!
wenn die null dabei is was wäre dann eine alternative???
habe von kollegen gehört rand()%49+1 geht, aber warum??? kann mir das jemand mal genau erklären???
mfg matthias

Soweit ich weiß sollte da die 0 schon mit dabei sein …
Wenn du das verstehen willst solltest du erstmal wissen was deine Operation

rand()%49

macht, nämlich folgendes:
Erzeuge Zufallszahl, teile sie durch 49 und liefere den Rest … Wenn ich jetzt ne Zufallszahl habe, die 49 oder ein Vielfaches davon ist, habe ich keinen rest, die Operation liefert also eine 0. Was in dem Fall nicht dabei ist, ist die 49, da ja keine Zahl existiert, bei der ich Rest 49 erhalte wenn ich durch selbige teile…

So sollte auch klar sein, dass

rand()%49+1

Zahlen von 1 (bei Rest 0) bis 49 (bei Rest 48) liefert.

viel Erfolg bei deinem Generator-Projekt
Andy

Hallo,

hab da mal ne frage…
wir sollen einen ein Lotto Generator programmieren, der
ZUFALLSZAHLEN von 1 bis 49 erzeugt!

und ich weis auch schon das der befehl rand()%49 zufallszahlen
bis 49 erzeugt…

0 bis 48

hier is jetzt aber die frage ob da die null
auch mit drinne is(bei lotto etwas schlecht)!
wenn die null dabei is was wäre dann eine alternative???
habe von kollegen gehört rand()%49+1 geht, aber warum??? kann
mir das jemand mal genau erklären???

Das kannst Du generalisieren, etwa so:

 ...
 int zufallsauswahl(int minimum, int maximum)
{
 int bereich = maximum - minimum + 1;
 int zahl = minimum + ( rand() % bereich );
 return zahl;
}
 ...

Wenn Du das mit zufallsauswahl(1, 49)
aufrufst, dann bekommt „Bereich“ den Wert 49,
„zahl“ erhält (s.o.) Werte von 0 bis 48, darauf
addierst Du wieder das minimum (hier => 1) und
alles ist so wie Du es brauchst.

Aber!

Bei Deinem „Lotto“ kannst Du ja nicht einfach Zufallszahlen
ermitteln sondern mußt „exakt 6 Samples S aus einer Menge M
von 49 Elementen auswählen“.

Dazu baust Du Dir ein Feld der Länge M (49) in das
Du die tatsächlichen Elemente einträgst (Zahlen 1…49).
Nun vermischst/vertauschst Du die Elemente des Feldes
sehr oft miteinander. Jetzt kannst Du die ersten S Elemente
des Feldes als Deine „Ziehung“ Auswerten.

Grüße

CMБ