Hallo ! Kurze Frage: Warum bekomme ich immer eine 1 als Lösung bei dieser Routine heraus? #include <stdio.h> #include <stdlib.h> int zuf; int main() { zuf = (rand() % 20)+1; printf("Zufallszahl: %d \n",zuf); return (0); }
Das ist Zufall! Nee, Scherzchen, rand() ist Pseudorandom, Du muß den Generator mit Zufall 'seeden', z.B. so: #include <time.h> .... srand( (unsigned)time( NULL ) ); Mit srand() verpaßt Du den Zufallszahlengenerator nen Startwert. Gleiche Startwerte führen zu identischen Folgen von 'Zufallszahlen', uninitialisierte Startwerte auch. Cheers Detlef
Jou Danke für die Info1 Allerdings, wie bekomme ich jetzt meinen Rückgabewert in Bezug auf mein Beispiel? Bin leider nicht der beste Programmierer...! zuf =
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?
>Du solltest dir Literatur zulegen.
"The Wee Free Men" von Terry Pratchett kann ich empfehlen... ;-)
>Ich kann "Häger, viel Feind viel Ehr" empfehlen...
Stimmt. Das hab ich auch...
Klugsein kann ich auch. - Die Figur heißt 'Hägar' und nicht "Häger" - Pi lautet 3.141592654... und nicht >>3.141562654...<< Beide Zahlen sind aber voll total zufällig und für nen echten hardcore Ing. gilt sowieso pi=3 . Gute Nacht Detlef
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.