6.3 Anwendungsbeispiele  
Mithilfe der in diesem Kapitel vorgestellten Funktionen können Sie nun so viele Zufallszahlen erzeugen, wie Sie möchten. Sollte Ihnen zufällig kein Verwendungszweck für diese Zahlen einfallen, finden Sie im Folgenden zwei Anwendungsbeispiele.
6.3.1 Lottozahlen  
Im deutschen Lottoblock werden zweimal pro Woche sechs (Zufalls-)Zahlen aus 49 sowie eine Zusatzzahl gezogen; in anderen Ländern ist das Vorgehen ähnlich, wenngleich sich die Zahlen leicht ändern. Ignorieren wir die Zusatzzahl, dann bleibt nur noch das Problem, sechs verschiedene Zahlen zu ziehen. Das geht aber recht einfach: Die Zahlen werden in einem Array gespeichert. Nach jedem Ziehen einer Zahl wird nachgesehen, ob die Zahl bereits im Array vorhanden ist. Falls nein, wird sie ins Array eingefügt:
var lotto; // die Lottozahlen
// ...
var zahl = zufall_intervall(1, 49);
for (var i=0; i < lotto.length; i++) {
if (lotto[i] == zahl) {
continue;
}
}
lotto[lotto.length] = zahl;
Wie Sie sehen, fehlt hier noch ein wenig: Die Verwendung von continue deutet an, dass eine Schleife zum Einsatz kommt. Und in der Tat: In einer while-Schleife werden so lange Zahlen gezogen, bis das Array »voll« ist, also in unserem Beispiel sechs Elemente enthält:
while (lotto.length < 6) {
// ...
}
Das birgt natürlich ein wenig Gefahrenpotenzial in sich: Wenn Sie die Werte ungünstig wählen (etwa: sechs verschiedene Zufallszahlen zwischen eins und fünf), erhalten Sie eine Endlosschleife. Achten Sie also darauf, welche Grenzen Sie angeben!
Hier folgt das komplette Listing:
<html>
<head>
<title>Lottozahlen</title>
<script type="text/javascript">
function zufall_intervall(a, b) {
var z = Math.random();
z *= (b – a + 1);
z += a;
return (Math.floor(z));
}
</script>
</head>
<body>
<h1>Lottozahlen</h1>
<script type="text/javascript"><!--
var lotto = [];
while (lotto.length < 6) {
var zahl = zufall_intervall(1, 49);
for (var i=0; i < lotto.length; i++) {
if (lotto[i] == zahl) {
continue;
}
}
lotto[lotto.length] = zahl;
}
document.write(lotto.toString());
//--></script>
</body>
</html>
Zum Vergleich noch das Listing für den Einsatz des HP-Algorithmus zur Generierung der Zufallszahlen:
<html>
<head>
<title>Lottozahlen</title>
<script type="text/javascript">
var zufall_hp_zahl = 0;
function zufall_hp() {
if (zufall_hp_zahl == 0) {
var t = new Date().getTime().toString();
var t2 = "";
for (var i=2; i<=t.length; i++) {
t2 += t.charAt(t.length-i);
}
eval("zufall_hp_zahl = 0." + t2 + ";");
}
zufall_hp_zahl += Math.PI;
zufall_hp_zahl = Math.pow(zufall_hp_zahl, 8);
zufall_hp_zahl -= Math.floor(zufall_hp_zahl);
return zufall_hp_zahl;
}
function zufall_intervall_hp(a, b) {
var z = zufall_hp();
z *= (b – a + 1);
z += a;
return (Math.floor(z));
}
</script>
</head>
<body>
<h1>Lottozahlen</h1>
<script type="text/javascript"><!--
var lotto = new Array();
while (lotto.length < 6) {
var zahl = zufall_intervall_hp(1, 49);
for (var i=0; i < lotto.length; i++) {
if (lotto[i] == zahl) {
continue;
}
}
lotto[lotto.length] = zahl;
}
document.write(lotto.toString());
//--></script>
</body>
</html>
 Hier klicken, um das Bild zu Vergrößern
Abbildung 6.2 Die zufällig ermittelten Lottozahlen
6.3.2 Zufallsbanner  
Eine häufige Anwendung besteht darin, einen von mehreren Textbausteinen einzublenden. Stellen Sie sich vor, Sie haben einen Satz von zehn Werbebannern, die alle gleichmäßig oft aufgerufen werden sollen. Dies ist ein Paradebeispiel für die Anwendung von Zufallszahlen.
An diesem Beispiel soll eine mögliche Zusammenarbeit zwischen Skriptprogrammierern, den Skripten in diesem Buch und einem HTML-Programmierer demonstriert werden.
Von der Konzeption her wäre es möglich, eine Funktion zu erstellen, die als Parameter ein Array mit Links und ein (gleich sortiertes Array) mit den zugehörigen Linktexten erwartet. Bei grafischen Bannern muss anstelle der Linktexte ein Array mit den Namen der Bannergrafiken erstellt werden. Dies ist jedoch etwas schwierig und umständlich.
Stattdessen soll hier ein anderer Weg gewählt werden. Der Code zur Auswahl der einzelnen URLs und der zugehörigen Linktexte wird direkt in die HTML-Seite integriert. Von den Skripten aus diesem Kapitel wird lediglich eine Funktion zur Zufallszahlengenerierung eingesetzt. Damit dieses Beispiel bei Ihnen funktioniert, müssen Sie zunächst die im Code verwendeten Banner erstellen.
Als Zufallsfunktion bieten sich hier zufall_intervall(a, b) oder zufall_intervall_hp(a, b) an:
<html>
<head>
<title>Zufallsbanner</title>
<script type="text/javascript"><!--
function zufall_intervall(a, b) {
var z = Math.random();
z *= (b – a + 1);
z += a;
return (Math.floor(z));
}
// Variablen mit URLs und Linktexten
var urls = new Array();
var texte = new Array();
var grafiken = new Array();
urls[urls.length] = "http://www.microsoft.de/";
texte[texte.length] = "Microsoft Deutschland";
grafiken[grafiken.length] = "microsoft.png";
urls[urls.length] = "http://www.mozilla.com/";
texte[texte.length] = "Mozilla Foundation";
grafiken[grafiken.length] = "mozilla.png";
urls[urls.length] = "http://www.opera.com/";
texte[texte.length] = "Opera Browser";
grafiken[grafiken.length] = "opera.png";
var zufall = zufall_intervall(0, urls.length – 1);
var url = urls[zufall];
var text = texte[zufall];
var grafik = grafiken[zufall];
//--></script>
</head>
<body>
<h1>Zufallsbanner</h1>
<script type="text/javascript"><!--
document.write("<a href=\"" + url + "\"\>");
document.write("<img src=\"" + grafik +"\" border=\"0\" / /\>");
// alternativ für Textlinks: document.write(text);
document.write("</a\>");
//--></script>
</body>
</html>
Im oben dargestellten Listing finden Sie parallel dazu noch den Code für Textlinks. Anstelle der Ausgabe der Grafik
document.write("<img src=\"" + grafik +"\" border=\"0\" /\>");
muss der entsprechende Text für den Link ausgegeben werden:
document.write(text);
1 Ausgegraben aus: Schülerduden – Die Mathematik II, 3., neu bearbeitete und erweiterte Auflage, Dudenverlag 1991
|