Variablen (Jack2)
Beschreibung
Eine wichtige Funktion von formularbasierten Aufgaben ist die Parametrisierung der Aufgaben durch Variablen. Dadurch können beliebig viele Insatnzen derselben Aufgabe, bspw. mit verschiedenen Zahlenwerten generiert werden. Eine Variable definiert nach dem Verständnis von JACK einen oder mehrere (z.B. eine Menge) solcher variabler Werte. Sie kann zufällig oder nach einer vorgegebenen Berechnungsvorschrift bestimmt werden und trägt einen für die Aufgabe eindeutigen Namen, welcher dazu dient, sie zu referenzieren.
Beispiel
Die obige Beispielaufgabe dient dazu, die Idee der Parametrisierung von Aufgaben zu erläutern. Der Lernende soll in einer typischen Mathematikaufgabe den größten gemeinsamen Teiler von den beiden Zahlen <math>n = 120</math> und <math>x_2 = 125</math> berechnen. Natürlich könnte diese Aufgabe auch mit zwei beliebigen anderen, zufällig gewählten natürlichen Zahlen gestellt werden und der größte gemeinsame Teiler stets berechnet werden. Es wäre daher denkbar, die beiden Zahlen <math>x_1</math> und <math>x_2</math> zufällig aus einer vorgegebenen Menge ziehen zu lassen und man erhielte für jede Möglichkeit eine andere Instanz derselben Aufgabe. Da man in diesem Fall vermutlich zumeist 1 als größten gemeinsamen Teiler erhalten würde, bietet einem JACK jedoch auch die Möglichkeit, anders vorzugehen. So kann der eine Ausgangszahl als zufällige natürliche Zahl aus einem vorgegebenen Intervall gezogen werden und die Zahlen <math>x_1</math> und <math>x_2</math> anschließend mithilfe geeigneter ebenfalls zufällig gezogenen Faktoren ermittelt werden. Es können also bereits belegte Variablenwerte verwendet werden, um andere zu berechnen. Man beachte jedoch, dass der größte gemeinsame Teiler dadurch auch von den beiden zufällig gezogenen Faktoren abhängt, denn diese können ja auch gemeinsame Primfaktoren besitzen. Man benötigt also eine Funktion, welche einem den ggT von <math>x_1</math> und <math>x_2</math> berechnen kann.
Definition von Variablen in der ExerciseChain
Die Definition von Variablen geschieht in JACK in der ExerciseChain über das Tag variables. Jede Variable definiert man durch ein Tag option und gibt ihr einen Namen über das Attribut name. Referenziert werden können die Variablen anschließend über ihren Namen mittels des Platzhalters [var=name]
. Die kann an allen Stellen innerhalb einer Aufgabe geschehen, also z.B. in der ExerciseChain, in der Aufgabenstellung, in Hinweisen oder auch im Feedback. Die Berechnungsvorschrift kann mithilfe verschiedener Funktionen geschehen, die hier vorgestellt werden sollen:
Ganzzahlige Zufallszahl aus einem vorgegebenen Intervall
Dies geschieht durch die Angabe einer unteren und einer oberen Grenze des Intervalls mittels der Attribute min und max. Der folgende Eintrag wählt beispielsweise eine ganzzahlige Zufallszahl im Intervall [1,5] aus, also eine der Zahlen 1,2,3,4 und 5:
<option name="a" min="1" max="5" />
Ziehen von Elementen aus einer Menge
Das Attribut set kann verwendet werden, um eine Menge zu definieren, aus der zufällig ein Element gezogen wird. Die folgende Variablendeklaration kann verwendet werden, um zufällig eine der ersten fünf Primzahlen zu ziehen:
<option name="a" set="{2,3,5,7,11}" />
Die Mengenelemente können jedoch auch beliebige Zeichenketten sein und müssen nicht numerisch sein. Es ist also auch folgende Variablendeklaration möglich:
<option name="a" set="{x,y,z}" />
Nutzung einer Evaluator-Funktion
Das Attribut value dient dazu, eine Funktion des Evaluators zu verwenden. Der Evaluator kennt einfache arithmetische Operationen und beherrscht eine Reihe von selbst-implementierten Funktionen. Außerdem können Computer Algebra Systeme über eigens dafür implementierte Funktionen angesprochen werden. Die folgende Variablendeklaration definiert eine Variable "b", welche das Quadrat der Variable "a" ist. Die Funktion Pow ist eine Evaluatorfunktion, welche zwei Argumente a,n entgegennimmt und daraus die Potenz <math>a^n</math> berechnet.
<option name="b" value="pow([var=a],2)" />
Nutzung einer CAS-Funktion
Durch das Attribut cas können Computer Algebra Systeme auch direkt angesprochen werden. Erlaubte Werte des Attributs sind "sage", "R" und "symja". Es kann dann das Attribut value verwendet werden, um eine Funktion des gewählten CAS zu benutzen. Die folgende Variablendeklaration berechnet die Fakultät der Variable "a" mit Hilfe von R und speichert diese in der Variable "b":
<option name="b" value="factorial([var=a])" cas="R" />
Mengenvariablen
Bei den bisher besprochenen Variablentypen handelt es sich stets um Einzelelemente, also bspw. Zahlen oder Zeichenketten. JACK erlaubt jedoch auch komplexere Variablentypen, wie z.B. Mengen oder Matrizen. Dafür besitzt das option-Tag ein Attribut type, mit welchem der Variablentyp deklariert werden kann. Lässt man das Attribut weg, so handelt es sich um eine Einzelvariable, wie wir bereits oben gesehen haben. Mengenvariablen können auf verschiedene Weisen deklariert werden. Zum einen über die direkte Angabe der einzelnen Elemente, zum anderen können Mengen auch aus Computer Algebra Systemen gezogen werden. Eine Mengenvariable kann, wenn sie einmal mit einem Wert belegt ist, dazu verwendet werden, um weitere Funktionen auf ihr auszuführen. So kann man z.B. ein bestimmtes Element aus einer Menge ziehen oder auch den Mittelwert aller Elemente berechnen. Die einfachste Art, eine Mengenvariable zu deklarieren, ist die folgende:
<option name="M" type="set"> <element>2</element> <element>3</element> <element>5</element> </option>
Dadurch hat die Mengenvariable "M" die Elemente 2,3 und 5. Man könnte nun eine Funktion verwenden, die auf Mengen operiert, um auf diese Elemente zuzugreifen (z.B. GetFromSet). Zudem ist es auch möglich CAS-Funktionen zu verwenden, um eine Mengenvariable zu belegen. Der folgende Aufruf zieht fünf Elemente mit Hilfe der Normalverteilung mit Erwartungswert 0 und Standardabweichung 1 und verwendet dafür R:
<option name ="y" type =" set" value =" rnorm (5 ,0 ,1)" cas ="R" />
Matrixvariablen
In gleicher Art und Weise wie Mengenvariablen erzeugt werden können, funktioniert dies auch für Matrizen.