#include #include int main(){ int zufallszahl1; // srand bitte nur EINMAL aufrufen // ganz am Anfang !!!!!! srand((unsigned)time(NULL)); zufallszahl1 = rand(); return 0; } erzeugt abhängig von der aktuellen Uhrzeit einen neuen Satz von Zufallszahlen Damit soll verhindert werden, dass bei einem erneuten Aufruf dieses Programms genau die gleichen Zufallszahlen kommen. Teilziel: "Grob-Struktur" eines Programms verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP."> #include #include int main(){ int zufallszahl1; // srand bitte nur EINMAL aufrufen // ganz am Anfang !!!!!! srand((unsigned)time(NULL)); zufallszahl1 = rand(); return 0; } erzeugt abhängig von der aktuellen Uhrzeit einen neuen Satz von Zufallszahlen Damit soll verhindert werden, dass bei einem erneuten Aufruf dieses Programms genau die gleichen Zufallszahlen kommen. Teilziel: "Grob-Struktur" eines Programms verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP.">

Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Zufallszahlen in C erzeugen

Ähnliche Präsentationen


Präsentation zum Thema: "Zufallszahlen in C erzeugen"—  Präsentation transkript:

1 Zufallszahlen in C erzeugen
Weiter mit PP.

2 #include <stdlib.h> #include <stdio.h>
#include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <time.h> int main(){ int zufallszahl1; // srand bitte nur EINMAL aufrufen // ganz am Anfang !!!!!! srand((unsigned)time(NULL)); zufallszahl1 = rand(); return 0; } erzeugt abhängig von der aktuellen Uhrzeit einen neuen Satz von Zufallszahlen Damit soll verhindert werden, dass bei einem erneuten Aufruf dieses Programms genau die gleichen Zufallszahlen kommen. Teilziel: "Grob-Struktur" eines Programms verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP.

3 #include <stdlib.h> #include <stdio.h>
#include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <time.h> int main(){ int zufallszahl1; // srand bitte nur EINMAL aufrufen // ganz am Anfang !!!!!! srand((unsigned)time(NULL)); zufallszahl1 = rand(); return 0; } aus diesem Satz von Zufallszahlen wird mit rand() die nächste herausgeholt. rand() liefert eine ganze Zahl zurück. Teilziel: "Grob-Struktur" eines Programms verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP. Diese nimmt einen Wert zwischen 0 und RAND_MAX (= 32767) an (je einschließlich). 3

4 Problem 1: Wie bekommt man aber Zufallszahlen aus der Menge {1, 2, 3, 4, 5, 6} um z.B. einen Würfel zu simulieren? Weiter mit PP. 4

5 Zurück zur Grundschule: Man verteilt (gleichmäßig) eine bestimmte Anzahl Computer auf 6 Schüler. Wieviel Computer können dabei übrig bleiben (minimal und maximal)? Weiter mit PP. 5

6 Es bleiben minimal 0 Computer und maximal 5 übrig
Es bleiben minimal 0 Computer und maximal 5 übrig. Man bekommt also eine Zahl zwischen 0 und 5. Weiter mit PP. 6

7 Mathematisch: erg = anzahl % 6 wobei erg die Werte aus der Menge {0, 1, 2, 3, 4, 5} annehmen kann.
Weiter mit PP. 7

8 Was muss man mathematisch nur noch machen, daß erg Werte aus der Menge {1, 2, 3, 4, 5, 6} annehmen kann ? Weiter mit PP. 8

9 Man muss zu erg die Zahl 1 dazu addieren, also: erg = anzahl % 6 + 1;
Oder, wenn anzahl eine Zufallszahl sein soll: anzahl = rand() % 6 + 1; Weiter mit PP. 9

10 #include <stdlib.h> #include <stdio.h>
#include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <time.h> int main(){ int zufallszahl; // srand bitte nur EINMAL aufrufen // ganz am Anfang !!!!!! srand((unsigned)time(NULL)); zufallszahl = rand()%6+1; return 0; } Teilziel: "Grob-Struktur" eines Programms verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP. Die Variable zufallszahl nimmt einen Wert aus der Menge {1, 2, 3, 4, 5 , 6} an. 10

11 Problem 2: Wie bekommt man aber eine Zufallszahl (Fließkommazahl) zwischen 0 und 1 ? Um z.B. einen Dartspfeil zu simulieren, der innerhalb der Strecke des Zahlenstrahls zwischen 0 und 1 einschlägt. Weiter mit PP. 11

12 Die größte Zufallszahl ist RAND_MAX (= 32767) Welche Werte kann dann der folgende Term annehmen? rand() / RAND_MAX Überlegen Sie dazu, welche Werte rand() annehmen kann! Weiter mit PP. 12

13 rand() nimmt Werte zwischen 0 und RAND_MAX (= 32767) an.
Also kann rand() / RAND_MAX folgende Werte annehmen: Weiter mit PP. 13

14 0 / = 0 1 / / / / / = 1 Weiter mit PP. 14

15 rand() / RAND_MAX nimmt zwar nicht alle Werte (unendlich viele) zwischen 0 und 1 an, sondern nur Werte. Das ist aber eine so gute Näherung, daß man damit arbeiten kann. Weiter mit PP. 15

16 Problem 3: Eine zufällige Zufallszahl (Fließkommazahl) zwischen 0 und 1 können wir jetzt zwar erzeugen. Weiter mit PP. 16

17 Aber wie kann man zu einer vorgegeben Zahl z eine Zufallzahl (Fließkommazahl) zwischen 0 und z erzeugen ? Dartspfeil soll innerhalb der Strecke des Zahlenstrahls zwischen 0 und z einschlagen! Weiter mit PP. 17

18 Angenommen zv_0_1 sei eine Variable (Fließkommazahl), die zufällige Werte zwischen 0 und 1 annimmt. Welche Werte nimmt dann der folgende Ausdruck an (minimal und maximal)? zv_0_1 * z Weiter mit PP. 18

19 zv_0_1 ist minimal 0, also: zv_0_1 * z = 0 zv_0_1 ist maximal 1, also:
Welche Werte nimmt zv_0_1 * z an, wenn zv_0_1 die folgenden Werte annimt: 0, , ,75 Weiter mit PP. 19

20 zv_0_1 = 0,25, also: zv_0_1. z = 0,25 z zv_0_1 = 0,5, also: zv_0_1
zv_0_1 = 0,25, also: zv_0_1 * z = 0,25 z zv_0_1 = 0,5, also: zv_0_1 * z = 0,5 z zv_0_1 = 0,75, also: zv_0_1 * z = 0,75 z Weiter mit PP. 20

21 Welche Werte durchläuft (durchwandert) also zv_0_1 * z
wenn zv_0_1 alle Werte (Fließkommazahlen) zwischen 0 und 1 durchläuft ? Weiter mit PP. 21

22 Alle Werte (Fließkommazahlen) zwischen 0 und z
Weiter mit PP. 22

23 #include <stdlib.h> #include <stdio.h>
#include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <time.h> // Rest kommt gleich Teilziel: "Grob-Struktur" eines Programms verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP. 23

24 Warum ist der Wert von zufallszahl immer 0 oder ganz selten 1?
int main(){ double zufallszahl; double z; // srand bitte nur EINMAL aufrufen // ganz am Anfang !!!!!! srand((unsigned)time(NULL)); // Für z könnte man auch einen Wert // über Tastatur eingeben. z= ; zufallszahl = rand()/RAND_MAX * z; return 0; } Warum ist der Wert von zufallszahl immer 0 oder ganz selten 1? Teilziel: "Grob-Struktur" eines Programms verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP. Warum liefert rand() / RAND_MAX * z keine Zufallszahl? Was ist falsch ? 24

25 Wie wird der Ausdruck richtig?
int main(){ double zufallszahl; double z; // srand bitte nur EINMAL aufrufen // ganz am Anfang !!!!!! srand((unsigned)time(NULL)); // Für z könnte man auch einen Wert // über Tastatur eingeben. z= ; zufallszahl = rand()/RAND_MAX * z; return 0; } Wie wird der Ausdruck richtig? Teilziel: "Grob-Struktur" eines Programms verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP. Weil rand() und RAND_MAX den Datentyp int hat und int / int wieder int ergibt (der Nachkommateil wird abgeschnitten). Da rand() / RAND_MAX <=1, wird der Nachkommateil abgeschnitten und 0 oder 1 bleibt übrig! 25

26 Datentypumwandlung:int in double umwandeln!
int main(){ double zufallszahl; double z; // srand bitte nur EINMAL aufrufen // ganz am Anfang !!!!!! srand((unsigned)time(NULL)); // Für z könnte man auch einen Wert // über Tastatur eingeben. z= ; zufallszahl = (double)rand()/(double)RAND_MAX*z; return 0; } Datentypumwandlung:int in double umwandeln! Teilziel: "Grob-Struktur" eines Programms verstehen. Bemerkung: Evtl. ein Arbeitsblatt daraus machen. Weiter mit PP. 26


Herunterladen ppt "Zufallszahlen in C erzeugen"

Ähnliche Präsentationen


Google-Anzeigen