Gymnasium Löbau/Vertiefungsklasse 2013/Komplexe Übung (I): Würfelexperimente mit einem Würfel
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Javascript</language>
== Mehrfachverzweigungen ==
Gegeben sind die nachfolgenden Funktionen zur Simulation des Würfelns mit einem idealen Würfel.
<code id="5c0408d83bce9">
var z1 = 0, z2 = 0, z3 = 0, z4 = 0, z5 = 0, z6 = 0;
function wuerfel1(anzahl) {
for (var i = 1; i <= anzahl; i++) {
var zufall = Math.floor(Math.random() * 6 + 1);
switch (zufall) {
case 1: z1++; break;
case 2: z2++; break;
case 3: z3++; break;
case 4: z4++; break;
case 5: z5++; break;
default: z6++;
}
}
}
function wuerfelAusgabe1() {
console.log("Augenzahl 1: " + z1);
console.log("Augenzahl 2: " + z2);
console.log("Augenzahl 3: " + z3);
console.log("Augenzahl 4: " + z4);
console.log("Augenzahl 5: " + z5);
console.log("Augenzahl 6: " + z6);
}
</code>
<run id="5c0408d83bd61">
wuerfel1(1000);
wuerfelAusgabe1();
</run>
Die <tt>switch-case-default</tt>-Syntax gestattet die Konstruktion von ''Mehrfachverzweigungen''. Die Anzahl der Fallunterscheidungen ist dabei beliebig. Der Anweisungsblock nach <tt>default</tt> wird in allen Fällen ausgeführt, die nicht zuvor untersucht worden sind.
<blockquote>[[Bild:Mehrfachverzweigung1.gif]]</blockquote>
Trotzdem erkennen wir schnell Grenzen dieser Implementation:
* Der Gebrauch einer großen globaler Variablen kann zu unerwünschten Nebeneffekten führen.
* Gleichartige Anweisungen treten gehäuft auf.
* Eine Generalisierung der Lösungsidee (z.B. zur Simulation des Werfens mehrerer Würfel) ist nicht problemlos möglich.
* Die Wertübergabe an weitere Funktionen (z.B. zur grafischen Darstellung) ist ebenfalls eingeschränkt.
Wir wollen deshalb die Zählergebnisse mit der Datenstruktur Feld verwalten.
== Zählung mit einer Feldvariablen ==
Die Zählung einer zufällig geworfenen Augenzahl soll mit einer Feldvaraiblen erfolgen. Dabei entspricht er Feldindex der um $1$ verminderten Zufallszahl. Vervollständige die nachfolgenden Funktion unter Nutzung des bereitgestellten Struktogramms.
<table cellspacing="0" cellpadding="0">
<tr>
<td align="left" valign="top" width="250">[[Bild:wuerfel2.gif]]</td>
<td align="left" valign="top" width="950">
<code id="5c04eff5ce559">
function wuerfel1(anzahl) {
var zaehlFeld = new Array(0, 0, 0, 0, 0, 0);
// -- weitere Anweisungen --
return zaehlFeld;
}
function wuerfelAusgabe1(zaehlFeld) {
for (var i = 0; i < zaehlFeld.length; i++)
console.log("Augenzahl " + (i + 1) + ": " + zaehlFeld[i]);
}
</code>
</td>
</tr>
</table>
<run id="5c04eff5ce5fb">
var newZaehlFeld = wuerfel1(1000);
wuerfelAusgabe1(newZaehlFeld);
</run>