Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 <<   zurück
JavaScript und AJAX von Christian Wenz
Das umfassende Handbuch
Buch: JavaScript und AJAX

JavaScript und AJAX
839 S., mit DVD, 39,90 Euro
Galileo Computing
ISBN 3-89842-859-1
gp Kapitel 6 Zufall
  gp 6.1 Zufallszahlen erstellen
    gp 6.1.1 JavaScript-Zufallszahlen
    gp 6.1.2 HP-Verfahren
    gp 6.1.3 Datumswert
  gp 6.2 Hilfsfunktionen
    gp 6.2.1 Zufallszahl aus einem Bereich
  gp 6.3 Anwendungsbeispiele
    gp 6.3.1 Lottozahlen
    gp 6.3.2 Zufallsbanner


Galileo Computing

6.3 Anwendungsbeispiele  downtop

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.


Galileo Computing

6.3.1 Lottozahlen  downtop

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>

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 6.2     Die zufällig ermittelten Lottozahlen


Galileo Computing

6.3.2 Zufallsbanner  toptop

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

 <<   zurück
  
  Zum Katalog
Zum Katalog: JavaScript und AJAX
JavaScript und AJAX
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: JavaScript und AJAX - Das Video-Training






 JavaScript und AJAX -
 Das Video-Training


Zum Katalog: Webseiten programmieren und gestalten






 Webseiten
 programmieren
 und gestalten


Zum Katalog: XHTML, HTML und CSS






 XHTML, HTML und CSS


Zum Katalog: CSS-Praxis






 CSS-Praxis


Zum Katalog: AJAX






 AJAX


Zum Katalog: PHP 5 und MySQL 5






 PHP 5 und MySQL 5


Zum Katalog: TYPO3 4.0






 TYPO3 4.0


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de