JavaScriptsMathematik

Zufallszahlen berechnen

Erzeugt beliebig viele Zufallszahlen in selbst gewählten Grenzen — wahlweise auch deren Quadratwurzeln, Sinus, Cosinus oder Tangens.

Dieses Script hat uns unser User Valentin Hammer eingeschickt. Es erzeugt Zufallszahlen in einer von euch selbst festgelegten Grenze und Anzahl — und kann auf Wunsch gleich weiterrechnen: Statt der reinen Ganzzahlen bekommt ihr auch deren Quadratwurzeln oder die Werte der Kreisfunktionen Sinus, Cosinus und Tangens ausgegeben.

Die Bedienung ist einfach: Tragt in die drei Felder den Mindestwert, den Maximalwert und die gewünschte Anzahl ein und klickt dann auf einen der Knöpfe. „Zahlen berechnen" liefert ganze Zufallszahlen zwischen den beiden Grenzen (einschließlich der Grenzen selbst), die übrigen Knöpfe ziehen aus jeder gezogenen Zufallszahl erst noch die Wurzel bzw. berechnen die jeweilige Winkelfunktion. Jedes Ergebnispaket wird unten an das Ausgabefeld angehängt und mit einer Trennlinie abgeschlossen — so könnt ihr mehrere Durchläufe direkt vergleichen. „Alles löschen" leert die Ausgabe wieder.

Gut zu wissen: Computer erzeugen keine „echten" Zufallszahlen, sondern sogenannte Pseudozufallszahlen. JavaScript stellt dafür die Funktion Math.random() bereit, die eine Zahl zwischen 0 (einschließlich) und 1 (ausschließlich) liefert. Wie man daraus ganze Zahlen in einem Wunschbereich macht, zeigt das Script — und die Erklärung weiter unten geht Schritt für Schritt darauf ein.

Wer nur eine einzelne Zufallszahl braucht, findet im Archiv auch das kompaktere Script Zufallszahl; für den Klassiker unter den Zufallsanwendungen gibt es außerdem den Würfel. Und wer sich für die Winkelfunktionen interessiert, kann mit den trigonometrischen Berechnungen weitermachen.

Mathematik Baujahr 2007 läuft in deinem Browser
Eingesandt von Valentin Hammer

So funktioniert das Script

Das Script besteht aus drei Bausteinen: der Funktion Zufallszahl(), die eine einzelne ganze Zufallszahl im Wunschbereich erzeugt, der Funktion berechnen(), die die Eingabefelder ausliest und die gewünschte Menge an Zahlen ins Ausgabefeld schreibt, und der Verdrahtung der sechs Knöpfe am Ende. Alles steckt in einer sofort ausgeführten Funktion, damit die Variablennamen nicht mit anderen Scripts auf der Seite kollidieren.

function Zufallszahl(mindest, hoechst) {
  const term = (hoechst - mindest) + 1;
  const zufall = Math.random();
  for (let wert = 0; wert <= term - 1; wert++) {
    if (zufall >= wert / term && zufall < (wert + 1) / term) {
      return wert + mindest;
    }
  }
}

Das ist der Kern des Scripts, so wie ihn der Autor gebaut hat: term ist die Anzahl der möglichen Ergebnisse (bei 0 bis 10 also 11). Math.random() liefert eine Kommazahl zwischen 0 und knapp unter 1 — die Schleife prüft dann, in welches der term gleich großen Teilintervalle diese Kommazahl fällt, und gibt die zugehörige ganze Zahl zurück. Fällt zufall etwa bei 11 Teilintervallen in das dritte, kommt 2 + mindest heraus. Jede ganze Zahl im Bereich ist dadurch gleich wahrscheinlich. Übrigens: Dieselbe Rechnung geht auch in einer Zeile — Math.floor(Math.random() * term) + mindest —, die Schleifenvariante zeigt aber schön, was dahintersteckt.

const mindest = parseInt(document.getElementById("zz-mindest").value, 10);

if (isNaN(mindest) || isNaN(hoechst) || isNaN(anzahl) || anzahl < 1 || hoechst < mindest) {
  ausgabe.value += "Bitte gültige Grenzen … eintragen.\n\n";
  return;
}

parseInt(…, 10) macht aus dem Text im Eingabefeld eine ganze Zahl (die 10 bedeutet: Dezimalsystem). Bevor gerechnet wird, prüft das Script mit isNaN() („is Not a Number"), ob in allen Feldern wirklich Zahlen stehen, und ob die Grenzen zueinander passen. Falls nicht, landet ein freundlicher Hinweis in der Ausgabe und return bricht die Funktion ab.

function berechnen(beschriftung, umrechnen) {
  …
  for (let zahl = 1; zahl <= anzahl; zahl++) {
    ausgabe.value += umrechnen(Zufallszahl(mindest, hoechst)) + "\n";
  }
  ausgabe.value += "\n--------------------\n\n";
}

Hier steckt ein schönes JavaScript-Konzept: berechnen() bekommt als zweiten Parameter eine Funktion übergeben — umrechnen. Im Original gab es für Zahlen, Wurzeln, Sinus, Cosinus und Tangens fünf fast identische Funktionen; in der modernisierten Fassung übernimmt eine einzige Funktion die gemeinsame Arbeit (Felder lesen, Schleife, Trennlinie), und nur der Rechenschritt pro Zahl wird ausgetauscht. Für die reinen Zahlen ist umrechnen eine Funktion, die ihren Wert unverändert zurückgibt; für die Wurzeln ist es direkt Math.sqrt.

document.getElementById("zz-wurzeln").addEventListener("click", function () {
  berechnen("Quadratwurzeln", Math.sqrt);
});

Zum Schluss wird jeder Knopf mit addEventListener("click", …) verbunden. Beachtet, dass hier Math.sqrt ohne Klammern übergeben wird: Es wird nicht sofort gerechnet, sondern die Funktion selbst weitergereicht, damit berechnen() sie später für jede gezogene Zufallszahl aufrufen kann. Das Script steht unter dem Formular, damit alle Felder und Knöpfe schon existieren, wenn es läuft.

Zum Anpassen: Weitere Rechenarten sind schnell ergänzt — eine Zeile nach dem Muster oben mit z. B. Math.log (natürlicher Logarithmus) oder Math.cbrt (Kubikwurzel) und ein passender Knopf im HTML genügen. Auch die Trennlinie "--------------------" und die Beschriftungen der Ausgabe könnt ihr frei ändern.

Script für die eigene Homepage

Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.

Mehr aus der Kategorie Mathematik