#include Präsentation herunterladen Die Präsentation wird geladen. Bitte warten
1
Zufallszahlen in C erzeugen
2
#include <stdlib.h> #include <stdio.h>
3
#include <stdlib.h> #include <stdio.h>
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
7
Mathematisch: erg = anzahl % 6 wobei erg die Werte aus der Menge {0, 1, 2, 3, 4, 5} annehmen kann.
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;
10
#include <stdlib.h> #include <stdio.h>
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.
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:
20
zv_0_1 = 0,25, also: zv_0_1. z = 0,25 z zv_0_1 = 0,5, also: zv_0_1
21
Welche Werte durchläuft (durchwandert) also zv_0_1 * z
22
Alle Werte (Fließkommazahlen) zwischen 0 und z
23
#include <stdlib.h> #include <stdio.h>
24
Warum ist der Wert von zufallszahl immer 0 oder ganz selten 1?
25
Wie wird der Ausdruck richtig?
26
Datentypumwandlung:int in double umwandeln!
Ähnliche Präsentationen © 2025 SlidePlayer.org Inc. Anmelden
Ähnliche Präsentationen
Präsentation zum Thema: "Zufallszahlen in C erzeugen"— Präsentation transkript:
Weiter mit PP.
#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.
#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
Es bleiben minimal 0 Computer und maximal 5 übrig. Man bekommt also eine Zahl zwischen 0 und 5. Weiter mit PP. 6
Weiter mit PP. 7
Oder, wenn anzahl eine Zufallszahl sein soll: anzahl = rand() % 6 + 1; Weiter mit PP. 9
#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
Also kann rand() / RAND_MAX folgende Werte annehmen: Weiter mit PP. 13
Welche Werte nimmt zv_0_1 * z an, wenn zv_0_1 die folgenden Werte annimt: 0, , ,75 Weiter mit PP. 19
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
wenn zv_0_1 alle Werte (Fließkommazahlen) zwischen 0 und 1 durchläuft ? Weiter mit PP. 21
Weiter mit PP. 22
#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
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
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
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
Ähnliche Präsentationen
All rights reserved.