Rand - Funktion ?

#477983
Lesenswert?
• ▲
▼
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
#478112
Lesenswert?
• ▲
▼
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?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.