PMG/Kurs 11/Zufallszahlen
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Pascal</language>
== Zufallszahlen und Würfelspiele ==
In den nächsten (letzten) Übungen mit dem PWiki werden wir noch ein paar "Spiele" mit Zufallszahlen erstellen.
Anschließend werden wir mit einer Anwendersoftware (Fischer-Technik) Modelle bauen und steuern!
Doch zunächst:
=== Erzeugen von Zufallszahlen ===
<code id="4cec1965a9796">
function zufall(a:integer):integer;
begin
result:=random(a);
end;
</code>
<eval id="4cec1965a9ae3">
begin
writeln(inttostr(zufall(100)));
end.
</eval>
=== Würfeln ===
Nun sollen nur Ergebnisse zufällig erzeugt werden, wie sie an einem idealen Würfel eintreten können.<br>
Ergänze die Boxen analog dem obigen Beispiel und teste das Ergebnis.<br>
<code id="4cec1965a98b5">
function wurf(a:integer):integer;
begin
end;
</code>
<eval id="4cec1965a9bf2">
begin
// dein Text
end.
</eval>
Simuliere nun ein Würfelspiel mit einem idealen Würfel.
Für eine Anzahl <math>n</math> von Würfen soll die Anzahl aller geworfenen Augenzahlen ausgegeben werden.<br>
''Hinweis:'' Es soll also für jede mögliche Augenzahl eine Variable vereinbart werden, eine beliebige Anzahl von (simulierten)
Versuchen durchgeführt werden und die ''Anzahl'' der gewürfelten Einsen, Zweien, ..., Sechsen ausgegeben werden.
Stelle den notwendigen Algorithmus in einem Struktogramm dar.<br>
Benutze dazu das Tool ''structorizer''.
* Erstelle mit dem Programm das Struktogramm
* Speichere das Struktogramm als Bild (Format .jpg)
* füge dein Bild im PWiki ein
<br>
{| border="1"
|-
| [[Bild:Struktugramm.jpg|Miniatur|250px]] || ||[[Bild:Nmalwürfeln.jpg|Miniatur|250px]]
|-
| Lucie || Martin || Jennifer
|-
| [[Bild:Wurf.jpg|Miniatur|250px]] || [[Bild:Würfel.jpg|Miniatur|250px]] || [[Bild:Wuerfelspiel.jpg|Miniatur|250px]]
|-
| Till || Florian || Sebastian
|-
| [[Bild:Wuerfeln.jpg|Miniatur|100px]]|| [[Bild:Wuerfel.jpg|Miniatur|100px]] || [[Bild:Structoricer.jpg|Miniatur|250px]]
|-
| Ivan || Ronny || Marko
|-
| [[Bild:Zufall-Würfeln.jpg|Miniatur|100px]]|| [[Bild:Würfeln_matschi.jpg|Miniatur|250px]] || [[Bild:Würfel2.jpg|Miniatur|100px]]
|-
| Claudia || Maximilian || Lucas
|}
<code id="4cec1965a99c4">
</code>
<eval id="4cec1965a9d02">
</eval>
'''Wir stellen fest, dass eine ''function'' nur einen Wert (ein Resultat) zurückliefern kann.'''<br>
'''Daher brauchen wir eine weitere Möglichkeit, die mehrere Ergebnisse liefert.'''<br>
Dies geschieht unter Verwendung einer <font color="darkgreen">''procedure''</font>, wobei die Rückgabewerte (Ergebnisvariablen) mit ''var'' angefügt werden (vergleiche Box).
<code id="4d243865b3fab">
procedure wuerfeln(n:integer;var a,b,c,d,e,f:integer);
</code>
<eval id="4d243865b40ec">
</eval>
Formuliere anhand der Simulation eine Aussage über die Wahrscheinlichkeit der einzelnen Ergebnisse beim Würfeln.
<font color="darkgreen">'''''zum Weiterarbeiten:'''''</font> Zeige durch eine analoge Simulation, dass die Zufallsgröße "[[Augensumme beim Würfeln mit zwei idealen Würfeln]]" nicht gleichverteilt ist.
<br><br>
== Zufallszahlen ==
=== Erzeugen von Zufallszahlen ===
''zunächst als function, die aufgerufen wird:''
<code id="4be10a7306816">
function zufall(a:integer):integer;
begin
result:=random(a);
end;
</code>
<eval id="4be10a1ebb218">
begin
writeln(inttostr(zufall(100)));
end.
</eval>
''andere, kürzere Variante:''
<eval id="4be1207f5f5c1">
begin
writeln(inttostr(random(100)));
end.
</eval>
'''''Ist diese Variante für Programme praktikabel?'''''
=== Würfeln ===
Simulieren Sie ein Würfelspiel mit einem idealen Würfel.
Für eine Anzahl <math>n</math> von Würfen soll die Anzahl der geworfenen Augenzahlen ausgegeben werden.
<code id="4bf2b9d35501b">
</code>
<eval id="4bf2b9d356f46">
</eval>
Formulieren Sie anhand der Simulation eine Aussage über große Zahlen und die Wahrscheinlichkeit. ("Gesetz der großen Zahlen")
<font color="darkgreen">'''''zum Weiterarbeiten:'''''</font> Zeigen Sie durch eine analoge Simulation, dass die Zufallsgröße "[[Augensumme beim Würfeln mit zwei idealen Würfeln]]" nicht gleichverteilt ist.
<br><br><br>
procedure wuerfelsumme(n:integer;var z,d,v,f,s,si,a,ne,ze,e,zw:integer);
var i,zz1,zz2,sum:integer;
begin
z:=0;d:=0;v:=0;f:=0;s:=0;si:=0;a:=0;ne:=0;ze:=0;e:=0;zw:=0;
for i:=1 to n do
begin
zz1:=random(6)+1;
zz2:=random(6)+1;
sum:=zz1+zz2;
if sum=2 then z:=z+1;
if sum=3 then d:=d+1;
if sum=4 then v:=v+1;
if sum=5 then f:=f+1;
if sum=6 then s:=s+1;
if sum=7 then si:=si+1;
if sum=8 then a:=a+1;
if sum=9 then ne:=ne+1;
if sum=10 then ze:=ze+1;
if sum=11 then e:=e+1;
if sum=12 then zw:=zw+1;
end;
end;