Du solltest dir Literatur zulegen.
Wie funktioniert rand().
Zunächst mal: Hinter rand() steckt eine Formel!
Normalerweise sind das Formeln in der Gestalt:
neuer_Wert = irgendeine_Funktion( alter_Wert )
alter_Wert = neuer_Wert
Jedesmal wenn rand() afgerufen wird, wird also eine
Variable mit einer Formel verwurschtet und das
Ergebnis wieder in die Variable zurückgeschrieben.
Dieses Ergebnis dient dann beim nächsten Aufruf
von rand() wieder als Ausgangswert um mit der
Funktion verwurschtet zu werden welcher wiederrum
der Ausgangswert für den nächsten Aufruf von rand()
darstellt, use. usw.
Das heist aber auch: Wenn man immer mit dem selben
Startwert beginnt, dann liefert rand() auch immer
dieselbe Folge an Zufallszahlen.
Um hier echten Zufall hineinzubekommen, brauchst du
also noch irgendetwas möglichst zufälliges um den
Startwert (den ersten alter_Wert) festzulegen. Nur
dann liefert rand() auch andere Folgen von Zufallszahlen.
* Den Startwert setzt man mittels srand()
Den Startwert darf man aber nur einmal in einem
Programmlauf mit srand() setzen!
* Wo du den ersten Wert herkriegst, hängt von deinen
Möglichkeiten ab.
Wenn dein Programm irgendwelche Tastendrücke auswertet,
kann man die Zeit zwischen 2 Tastendrücken dafür hernehmen.
Oder man nimmt die aktuelle Systemzeit (in Millisekunden)
her.
Hier gibt es keine allgemeinen Regeln, du nimmst was du hast.
1 | #include <stdio.h>
|
2 | #include <stdlib.h>
|
3 | #include <time.h>
|
4 |
|
5 | int main()
|
6 | {
|
7 | int zuf;
|
8 |
|
9 | srand( (unsigned)time( NULL ) );
|
10 |
|
11 | zuf = (rand() % 20)+1;
|
12 | printf("Zufallszahl: %d \n",zuf);
|
13 |
|
14 | return EXIT_SUCCESS;
|
15 | }
|
Beachte aber:
Obige Zahlen werden nicht sehr zufällig sein.
Das liegt daran, dass man von einer einzigen Zahl nicht
sagen kann, ob sie zufällig ist oder nicht. Ist 5 zufällig,
oder 9?
Zufall ist eine statistische Eigenschaft. Und wie alle
statistischen Eigenschaften kann man Aussagen erst dann
treffen, wenn man eine größere Menge betrachtet.
Ist die Folge
1 4 1 5 9 2 6 5 4
zufällig? Mag sein. Die Folge geht noch weiter und soweit
ich mich erinnern kann absolviert diese Folge eine Menge
von statistischen Tests auf Zufälligkeit ohne Probleme.
Wie würde deine Antwort ausfallen, wenn ich diese Folge
anders aufschreibe:
3.141562654...
also: PI Akzeptierst du sie jetzt noch als Zufall?