JavaScriptsMathematik

Grundrechenaufgaben

Würfelt vier Kopfrechenaufgaben aus — mal, geteilt, plus und minus — und sagt euch, welche Antworten stimmen.

Jonahan hat uns dieses Javascript geschickt: einen kleinen Rechentrainer, der bei jedem Aufruf vier neue Aufgaben aus den vier Grundrechenarten auswürfelt. Es gibt je eine Aufgabe zum Malnehmen, zum Teilen, zum Addieren und zum Subtrahieren. Die beiden Zahlen jeder Aufgabe zieht das Script zufällig aus dem Bereich von 1 bis 129 — die Aufgaben sind also jedes Mal andere und werden nie langweilig.

Die Bedienung: Über jedem Eingabefeld steht die Aufgabe, die dazugehört. Tragt eure Lösungen ein und klickt auf „Prüfen“. Darunter erscheint dann eine Übersicht mit allen vier Aufgaben, eurer Antwort und dem richtigen Ergebnis — bei falschen Antworten seht ihr also direkt, was herausgekommen wäre. Mit „Neue Aufgaben“ startet eine frische Runde, ganz ohne die Seite neu zu laden.

Ein Hinweis zur Divisionsaufgabe: Weil beide Zahlen frei ausgewürfelt werden, geht das Teilen nur selten glatt auf — meist kommt eine Zahl mit vielen Nachkommastellen heraus. Das Script rechnet deshalb zwar exakt, prüft eure Eingabe aber mit einer kleinen Toleranz: Wer auf zwei Nachkommastellen genau rundet, bekommt die Antwort als richtig angerechnet. Ein Komma als Dezimaltrenner ist dabei genauso erlaubt wie ein Punkt.

Gerechnet wird alles im Kopf oder auf einem Zettel — das Script ist als Übung für die kleinen Grundschulklassen bis zur Mittelstufe gedacht, taugt aber auch als Aufwärmübung für alle, die ihr Kopfrechnen auffrischen wollen. Wer lieber einzelne Rechnungen ausführen als üben möchte, ist beim Taschenrechner oder beim Rechner zweier Zahlen besser aufgehoben. Und wer die Zufallszahlen dahinter spannender findet als die Rechenaufgaben, findet bei den Zufallszahlen das passende Script.

Mathematik Baujahr 2008 läuft in deinem Browser

Beim Teilen genügt eine auf zwei Nachkommastellen gerundete Antwort.

Eingesandt von Jonahan

So funktioniert das Script

Das Script hat drei Aufgaben: Es würfelt Zahlen aus, zeigt daraus vier Rechenaufgaben an und vergleicht später eure Antworten mit den richtigen Ergebnissen. Im Original stand für jede der vier Rechenarten ein eigener, fast gleichlautender Block Code — hier ist daraus eine Liste geworden, die viermal dasselbe Verfahren durchläuft. Das ist kürzer, leichter zu überblicken und vor allem leichter zu erweitern.

const aufgaben = [
  { zeichen: "*", rechnen: function (a, b) { return a * b; } },
  { zeichen: "/", rechnen: function (a, b) { return a / b; } },
  { zeichen: "+", rechnen: function (a, b) { return a + b; } },
  { zeichen: "-", rechnen: function (a, b) { return a - b; } }
];

Diese Liste beschreibt die vier Rechenarten. Jeder Eintrag ist ein Objekt — eine kleine Sammlung benannter Angaben — mit zwei Feldern: zeichen ist das Symbol, das in der Aufgabe angezeigt wird, und rechnen ist eine Funktion, die zwei Zahlen entgegennimmt und das Ergebnis liefert. Dass eine Funktion einfach so in einer Liste stehen darf, ist eine der praktischen Eigenschaften von JavaScript: Funktionen sind hier Werte wie Zahlen oder Texte auch.

function zufallszahl() {
  return Math.round(Math.random() * (130 - 2)) + 1;
}

Math.random() liefert eine Zufallszahl zwischen 0 und (knapp unter) 1, etwa 0,7431. Multipliziert mit 128 ergibt das einen Wert zwischen 0 und 128, Math.round() rundet ihn auf eine ganze Zahl, und das + 1 verschiebt den Bereich auf 1 bis 129. Das ist genau die Rechnung aus dem Originalscript — wollt ihr leichtere Aufgaben, ändert einfach die 130 auf zum Beispiel 20.

werte[i] = [zufallszahl(), zufallszahl()];
document.getElementById("gr-aufgabe" + (i + 1)).textContent =
  werte[i][0] + " " + aufgaben[i].zeichen + " " + werte[i][1];

Für jede der vier Aufgaben werden zwei Zufallszahlen gezogen und im Array werte gemerkt — das Script muss sie beim Prüfen ja noch kennen. Danach wird die Aufgabe als Text in die Beschriftung über dem passenden Eingabefeld geschrieben. Der Kniff dabei ist "gr-aufgabe" + (i + 1): Aus dem Schleifenzähler 0, 1, 2, 3 werden so die id-Namen gr-aufgabe1 bis gr-aufgabe4. So kommt eine Schleife mit vier Feldern aus, ohne dass man jedes einzeln aufschreiben muss.

const stimmt = eingabe !== "" && !isNaN(antwort) &&
  Math.abs(antwort - ergebnis) < 0.005;

Hier wird bewertet. Drei Bedingungen müssen zutreffen: Das Feld darf nicht leer sein, die Eingabe muss eine Zahl sein (isNaN heißt „is Not a Number“ und wird hier mit dem Ausrufezeichen verneint), und der Abstand zwischen Antwort und Ergebnis muss winzig sein. Math.abs() liefert dabei den Betrag, also den Abstand ohne Vorzeichen — egal, ob ihr zu hoch oder zu tief liegt. Die Toleranz von 0,005 stört bei Plus, Minus und Mal nicht, weil dort ohnehin nur ganze Zahlen herauskommen; beim Teilen macht sie die Aufgabe überhaupt erst lösbar.

ergebnis.toLocaleString("de-DE", { maximumFractionDigits: 2 })

toLocaleString("de-DE") formatiert eine Zahl nach deutschen Gepflogenheiten: Komma als Dezimaltrenner, Punkt als Tausendertrenner. Mit maximumFractionDigits: 2 werden höchstens zwei Nachkommastellen angezeigt, sodass aus dem sperrigen Divisionsergebnis 3,7647058823529411 die gut lesbare Anzeige 3,76 wird.

Zum Anpassen: Der auffälligste Unterschied zum Original ist, dass es keine alert()-Fenster mehr gibt und die Seite nach dem Prüfen nicht mehr neu geladen wird. Früher erledigte location.href = location.href das Nachladen und damit auch die neuen Aufgaben — heute macht das die Funktion neueAufgaben() direkt, was schneller ist und eure Eingaben nicht mitten im Üben verwirft. Wollt ihr eine fünfte Rechenart ergänzen, genügen ein weiterer Eintrag in der Liste aufgaben und ein zusätzliches Feld im HTML mit den id-Namen gr-aufgabe5 und gr-eingabe5.

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