Autorensysteme - eExMx
Tutorial 2 - Eine Mathematikaufgabe programmieren
In diesem Tutorial wollen wir eine einfache Mathematikaufgabe im Bereich Division im Zahlenraum bis 1000 für die vierte Klasse Grundschule programmieren. In der Aufgabe soll es darum gehen, dass Kinder einen Tiergarten besuchen und dafür Kosten für die Busfahrt und die Eintrittskarte anfallen. Die Einzelkosten sollen aus den Gesamtkosten errechnet werden.
Die Kopfdaten für die neue Aufgabe sind wie in Tutorial 1 erfasst, nun geht es darum, die eigentliche Aufgabe zu programmieren. Schalten Sie in der eExMc-Toolleiste um auf Aufgabe.
Das Programm-Fenster besteht aus zwei Bereichen. Im oberen Bereich Aufgabenvariante formulieren Sie die Aufgabe und erfassen, falls Sie das möchten, ein Bild dazu.
Aufgabe formulieren
Formulieren Sie Ihre Aufgabe und die dazu gehörenden Fragen klar und unmissverständlich. Ein möglicher Aufgabentext wäre wie folgt einzugeben:
Die Kinder der Klassen 4a und 4b besuchen den Tiergarten. Der Eintritt mit Busfahrt kostet zusammen 848 EUR. a) Wie viel EUR muss jedes Kind bezahlen wenn 53 Kinder mitfahren? b) Wenn die Busfahrt insgesamt 424 EUR kostet, wie viel kostet dann eine Eintrittskarte? c) Wie viel EUR kostet eine Fahrkarte?
Tipp: für Sachaufgaben empfiehlt sich das Einschalten des automatischen Zeilenumbruchs. Klicken Sie mit der rechten Maustaste in das Eingabefenster. Im erscheinenden Kontextmenü können Sie den Zeilenumbruch ein- oder ausschalten.
Prinzipiell ist diese Aufgabe bereits lauffähig, wenn auch lange noch nicht fertig. Sie können aber das Aussehen der Aufgabe bereits testen. Klicken Sie auf den Schalter Vorschau in der Toolleiste. Ein neues Fenster mit dem Aufgabentext und der Schaltfläche Lösung senden sollte auf Ihrem Bildschirm erscheinen. Sie können diesen Stand der Aufgabe auch hier testen.
Die Vorschau-Schaltfläche verfügt auch über ein Dropdown-Menü in dem Sie die Browser-Engine auswählen können. Zur Auswahl stehen hier der Internet Explorer und das WebKit (wird hauptsächlich vom Browser Safari verwendet).
Eingabefelder definieren
Falls Sie beim Testen der Aufgabe bereits den Schalter Lösung senden geklickt haben, dürfte Ihnen klar sein, dass die Aufgabe noch nicht fertig sein kann. Es gibt nämlich noch keine Möglichkeit die Ergebnisse der Rechnungen in die Aufgabe einzugeben, folglich meldet die Aufgabe: Du hast 0% der Aufgaben richtig gelöst.
Das werden wir nun ändern. Wir ergänzen die erste Aufgabenfrage mit einer Möglichkeit zur Ergebniseingabe. Die anderen Fragen lassen wir momentan noch so wie sie sind.
a) Wie viel EUR muss jedes Kind bezahlen wenn 53 Kinder mitfahren? Ergebnis: Jedes Kind bezahlt {?Einzelkosten} EUR.
In die neue Zeile haben wir einen Platzhalter {?Einzelkosten} eingefügt. Bei laufender Anwendung erzeugt eExMx daraus ein Eingabefeld, in das der Anwender das Ergebnis der Berechnung eingeben kann.
Aufgabenlogik programmieren
Wundern sie sich nicht, wenn im Vorschaufenster nun ein Fehler oder gar nichts angezeigt wird. Da wir inzwischen logische Elemente in unseren Quelltext eingegeben haben, müssen wir dem Programm auch mitteilen, wie es mit diesen Elementen umgehen soll.
Dafür schreiben wir folgenden Programmcode in das Textfeld Aufgabenparameter und Ergebnisberechnung.
$Einzelkosten = 848 / 53
Und schon ist die Aufgabe wieder funktionsfähig. Diesen Stand der Aufgabe können Sie hier testen. Was ist passiert? Wir haben in der Programmlogik festgelegt, wie sich die Einzelkosten pro Kind berechnen, indem die Gesamtkosten durch die Anzahl der Kinder geteilt wird: Einzelkosten = 848 : 53
Bitte beachten Sie, dass statt dem in der Mathematik üblichen Doppelpunkt in der eExMx-Sprache der Schrägstrich für die Division verwendet wird. Weitere arithmetische Operatoren wären: Addition (+), Subtraktion (-) und Multiplikation (*). Die richtige Schreibweise können Sie der Liste Funktionen neben dem Codefenster entnehmen.
Falls Sie auch dieses Mal auf den Schalter Lösung senden geklickt haben, ist Ihnen wieder die 0% Meldung auf dem Bildschirm erschienen, es sei denn – Sie haben vorher in das Ergebnisfeld die Zahl 16 eingetragen. Dann belohnt Sie die Aufgabe mit 100% Erfolg und einem großen grünen R für RICHTIG hinter dem Eingabefeld. Wenn Sie das Feld leer gelassen haben oder gar ein falsches Ergebnis eingetragen haben, dann sehen Sie hinter dem Eingabefeld das rote Soll-Ergebnis. Damit haben wir nun eine, in der Tat funktionierende Aufgabe. Die Eingabefelder und die Programmlogik für die Fragen b und c wären noch zu ergänzen. Hier ein Beispiel für die Fragen und Benutzereingaben:
b) Wenn die Busfahrt insgesamt 424 EUR kostet, wie viel kostet dann eine Eintrittskarte? Ergebnis: Eine Eintrittskarte kostet {?Karte} EUR. c) Wie viel EUR kostet eine Fahrkarte? Ergebnis: Eine Fahrkarte kostet {?Bus} EUR.
und dazu die passende Programmlogik:
$Einzelkosten = 848 / 53 $Karte = (848 - 424) / 53 $Bus = 424 / 53
Die Live-Aufgabe können Sie hier online testen. Mit diesem Programmstand haben wir auch neue Erkenntnisse zur Funktionalität von eExMx gewonnen. Zum einem haben wir die Verwendung von Klammern für die Priorisierung von Operatoren gesehen, zum anderem fällt auf, dass die Software ganz alleine die Bewertung der Ergebnisse vornimmt. Wenn nicht alle Ergebnisse korrekt eingegeben werden, dann zeigt eExMx die richtigen und falschen Lösungen an und berechnet den prozentualen Anteil der richtigen Antwort. eExMx gewichtet dabei keine Antworten. Wenn eine Aufgabe aus mehreren Fragen besteht, dann wird das Ergebnis anteilig zu den richtigen Antworten berechnet.
Dynamisierung der Aufgabe
Über den Link Seite neu laden können wir die Aufgabe immer wieder neu starten. Dabei werden die Eingabefelder geleert, eventuelle Lösungen wieder ausgeblendet und die deaktivierte Schaltfläche Lösung senden wieder aktiviert. Nun können wir die berechneten Ergebnisse erneut eingeben und die Lösung wieder absenden.
Das ist wenig spannend, weil die Aufgabenparameter ja immer gleich bleiben, folglich bleiben auch die Ergebnisse die gleichen. Ihr Anwender müsste nur einmal die leeren Felder absenden, sich die berichtigten Lösungen notieren, die Aufgabe neu laden und anschließend die richtigen Ergebnisse übertragen. Der Lerneffekt begrenzt sich so auf das richtige Abschreiben der Ergebnisse. Das bietet uns auch jedes Aufgabenheft mit Lösungen-Abschnitt aus dem Fachhandel. Mit eExMx geht das viel besser!
Beim Entwurf der Aufgabe haben wir zunächst konstante Werte für die Gesamtkosten des Ausfluges, für die Anzahl der Kinder und für die Busfahrt angenommen. Nun werden wir unser Programm so erweitern, dass sich diese Zahlen bei jedem Laden der Aufgabe ändern. Wir überarbeiten den Aufgabentext wie folgt (hier nur die Änderung für die erste Aufgabenfrage):
Die Kinder der Klasse 4a und 4b besuchen den Tiergarten. Der Eintritt mit Busfahrt kostet zusammen {$Gesamtkosten} EUR. a) Wie viel EUR muss jedes Kind bezahlen wenn {$Kinderanzahl} Kinder mitfahren? Ergebnis: Jedes Kind bezahlt {?Einzelkosten} EUR.
Ist Ihnen aufgefallen, dass wir für die Aufgabenparameter statt dem Fragezeichen ein $-Zeichen verwendet haben? Das soll auch so sein, weil wir hier einen Platzhalter für einen variablen Wert definieren. Mit dem Fragezeichen hingegen wird ein Platzhalter für ein Eingabefeld erzeugt. In der Ergebnisberechnung wird nur noch das $-Zeichen verwendet, weil wir hier für die Berechnung den Wert des Eingabefeldes und nicht das Eingabefeld selbst verwenden.
Kommen wir zur Programmlogik. Auch hier müssen wir festlegen welchen Wert das Programm für die beiden neuen Aufgabenparameter vorsehen soll. Da wir eine Dynamisierung der Aufgabe erreichen wollen, sollten sich diese Werte bei jedem Aufruf der Aufgabe ändern. Dafür verwenden wir einen internen Zufallsgenerator. Dieser erzeugt zufällige Zahlen, die wir als Grundlage für unsere Aufgaben-Parameter verwenden werden. Dabei ist zu beachten, dass die Zufallswerte nicht beliebig sein dürfen. Die Zahlen sollten schon realistische Werte spiegeln, so dass die Aufgabe nicht unglaubwürdig erscheint.
Deshalb werden wir ein paar Vorüberlegungen anstellen. Das
Kultusministerium der Länder sieht Klassenstärken von 16 bis 28 Kinder in
der Grundschule vor. Also sollte die Anzahl der Kinder für zwei Klassen
irgendwo zwischen 32 und 58 liegen. Wenn wir diese Grenzen nicht ausreizen
wollen, könnten wir uns auf einen Bereich zwischen 35 und 55 beschränken.
Was darf eine Bus-Karte kosten? Nehmen wir mal Preise von 4 bis 8 EUR an, es
ist ja nicht bekannt wie weit der Tierpark entfernt ist und welche weiteren
Leistungen in der Fahrt inklusive sind. Für die Einzelkarte im Tierpark
nehmen wir einen Preis von 5 bis 9 EUR an. Folglich werden die
Gesamtkosten des Ausfluges zwischen 315 und 935 EUR liegen. Diese Zahlen
sind gut, weil sie realistisch sind und unseren vorgegebenen Zahlenraum (bis
1000) nicht überschreiten.
Tipp: Wenn Sie mit Zufallszahlen arbeiten, prüfen Sie immer die Randwerte!
Es könnte sonst passieren, dass der Zufallsgenerator Werte erzeugt, welche
im Zusammenspiel Berechnungen
jenseits der Möglichkeiten Ihrer Zielgruppe erfordern.
Mit den oben ermittelten Zahlen können wir nun den Quellcode unserer Aufgabe erweitern:
$Kinderanzahl = Zufall(35,55) $Gesamtkosten = Zufall(315,935) $Einzelkosten = $Gesamtkosten / $Kinderanzahl $Karte = ($Gesamtkosten - 424) / $Kinderanzahl $Bus = 424 / $Kinderanzahl
Zufall(min,max) ist eine Funktion von eExMx hinter der sich der Zufallsgenerator für Zahlen verbirgt. Wie Sie sehen, ist die Anwendung sehr einfach: Man schreibt zwischen das Klammernpaar durch ein Komma getrennt den Wertebereich aus dem der Generator eine zufällige Zahl erzeugen soll, wobei die beiden angegebenen Zahlen auch vorkommen können.
Den Wert für die Kosten für den Bus belassen wir vorerst auf dem konstanten Wert 424. Mit dem neuen Code können wir nun unsere Aufgabe wieder testen. Bei jedem Klick auf Seite neu laden sollten sich nun die Vorgabewerte für die Aufgabe ändern. Der erste Schritt zur Dynamisierung ist umgesetzt.
Anmerkung: Im Vorschaufenster von eExMx ist der Link Seite neu laden nicht sichtbar. Dieser ist erst in der exportierten Aufgabe zu sehen. In eExMx müssen Sie erneut auf die Schaltfläche Vorschau klicken, um die Aufgabe neu zu laden. Das Vorschaufenster muss dabei nicht geschlossen werden.
Haben Sie zwischendurch auch mal auf Lösung senden geklickt? Ich kann mir Ihren gegenwärtigen finsteren Blick sehr gut vorstellen. Wenn Sie sich den Quellcode noch mal ansehen, dürften diese schrägen Ergebnisse wohl kaum überraschen. Die Ursache der krummen Zahlen liegt in der Division der Zufallszahlen. Die wahre Kunst des Programmierens besteht darin, Lösungen zu finden die solche Probleme umgehen. Analysieren und testen Sie folgenden geänderten Code. Finden Sie heraus, warum dieser Code besser ist als sein Vorgänger.
$Kinderanzahl = Zufall(35,55) $Karte = Zufall(5,9) $Bus = Zufall(4,8) $GesamtBus = $Kinderanzahl * $Bus $Einzelkosten = $Karte + $Bus $Gesamtkosten = $Kinderanzahl * $Einzelkosten
Dynamisierung durch weitere Aufgabenvarianten
Mit unserem Zufallsgenerator haben wir erreicht, dass sich die Aufgabenparameter mit jedem Neuladen der Aufgabe ändern. Allerdings bleibt der Aufgabentext immer gleich. Mit eExMx können sie die ganze Aufgabe variieren, indem sie weitere Aufgabenvarianten hinzufügen. Klicken Sie auf die Plus-Schaltfläche in der Toolbar. Zu Ihrer bestehenden Aufgabe wird eine weitere Aufgabenvariante hinzugefügt. Sie erkennen das daran, dass die Codefenster leer sind und in der Überschrift vom Aufgabenfenster steht Aufgabenvariante 2 von 2.
Hier können Sie eine vollkommen neue Aufgabe programmieren. Das Aufgabenziel und die Komplexität der Aufgabe sollten aber gleich bleiben. So könnten Sie zum Beispiel statt dem Gesamtpreis für die Busfahrt nun den Gesamtpreis für den Tiergarten vorgeben und gleichzeitig die Reihenfolge der Fragen ändern. Statt der Busfahrt könnten die Kinder eine Schifffahrt mit anschießenden Museumsbesuch machen.
Beim Klick auf die Vorschauschaltfläche wird immer die gerade aktuelle Aufgabenvariante im Vorschaufenster angezeigt. Bei der exportierten Aufgabe entscheidet hingegen der Zufall bei jedem Neuladen der Aufgabe, welche Aufgabenvariante dem Anwender angezeigt wird. So kommt keine Langeweile beim Üben auf und das „Kaputte-Rolltreppen-Phänomen“ wird vermieden.
Download
Die hier programmierte Aufgabe können Sie im eexmx-Format auch downloaden. Diese Datei können Sie mit der eExMx-Software öffnen und weiter bearbeiten.