Variablen (Jack2): Unterschied zwischen den Versionen

Aus JACK Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 2: Zeile 2:
{{Vorlage:Warnung|Warnung=Hinweis: Variablen können sowohl mathematische Variablen' (Bsp.: "x,y,z") als auch JackVariablen (Bsp.: <nowiki>"[var|input|meta=]"</nowiki>) sein.}}
{{Vorlage:Warnung|Warnung=Hinweis: Variablen können sowohl mathematische Variablen' (Bsp.: "x,y,z") als auch JackVariablen (Bsp.: <nowiki>"[var|input|meta=]"</nowiki>) sein.}}


Eine wichtige Funktion von [[FormBased|formularbasierten]] Aufgaben ist die Parametrisierung der Aufgaben durch Variablen. Dadurch können beliebig viele Instanzen 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.
Eine wichtige Funktion von [[FormBased (Jack2)|formularbasierten]] Aufgaben ist die Parametrisierung der Aufgaben durch Variablen. Dadurch können beliebig viele Instanzen 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 ===
=== Beispiel ===

Version vom 7. Juni 2023, 13:12 Uhr

Beschreibung

Hinweis: Variablen können sowohl mathematische Variablen' (Bsp.: "x,y,z") als auch JackVariablen (Bsp.: "[var|input|meta=]") sein.

Eine wichtige Funktion von formularbasierten Aufgaben ist die Parametrisierung der Aufgaben durch Variablen. Dadurch können beliebig viele Instanzen 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

Bestimmedenggt.PNG

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>x_1 = 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 mathematischen Variablen in der ExerciseChain

Die Definition von mathematischen Variablen geschieht in JACK in der ExerciseChain über das Tag <variables>. Jede mathematische Variable definiert man durch ein Tag <option> und gibt ihr einen Namen über das Attribut name. Referenziert werden können die mathematischen Variablen anschließend über ihren Namen mittels der JackVariable [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 mathematische Variable "b", welche das Quadrat der mathematischen 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 und R. 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" />

String-Variablen

In JACK können auch String-Variablen angelegt werden. Das ist hilfreich, wenn Aufgaben-, Feedback- bzw. Hinweistexte variabel gehalten werden sollen. Insbesondere kann man eine Menge mit String-Variablen erstellen, aus der dann mit entsprechenden Evaluator-Funktionen (bspw. GetFromSet) passende Strings ausgewählt werden.

Allgemein erstellt man eine String-Variable folgendermaßen:

  <option name="aufgabentext" value="'Berechne die Summe aus 2 und 5'" />

Man beachte, dass innerhalb des value-Attributs neben den herkömmlichen doppelten Anführungszeichen zusätzlich einfache Anführungszeichen stehen. Diese sind hier zwingend notwendig, damit JACK den Wert als String versteht.

Zum Erstellen einer Menge mit Strings verzichtet man hingegen auf die Anführungszeichen. In diesem Fall verfährt man genauso wie bei einer herkömmlichen Menge:

<option name="definitheit" type="set">
  <element>A ist positiv definit</element>
  <element>A ist positiv semidefinit</element>
  <element>A ist negativ definit</element>
  <element>A ist negativ semidefinit</element>
  <element>A ist indefinit</element>
</option>

Matrixvariablen

In gleicher Art und Weise wie Mengenvariablen erzeugt werden können, funktioniert dies auch für Matrizen. Dem Attribut type gibt man dafür den Wert matrix. Anschließend verwendet man ein CAS, um eine Matrix zu generieren. Ein CAS, welches eine Reihe von Funktionen zur Matrixerzeugung anbietet ist Sage. In dem Artikel EvaluateInSage findet man eine Reihe von Beispielen, wie eine Matrixvariable mit Sage generiert werden kann.

McIndex-Variablen

→ Hauptartikel: McIndex-Variablen

McIndex-Variablen finden in Multiple-Choice Aufgaben mit einem Pool an Aussagen Verwendung. Sie fungieren dabei als Hilfsvariablen für die zufällige Auswahl aus einer oder mehreren Set-Variablen.

Konstanten

Außerdem bietet JACK die Möglichkeit Konstanten zu benutzen ohne sie vorher explizit in der exerciseChain deklarieren zu müssen. Momentan stehen die eulersche Zahl e und die Kreiszahl π als Konstanten zur Verfügung. Man kann in allen Situationen, in denen man eine Variable verwenden könnte, auch [var=E] für e oder [var=PI] für π schreiben. Möchte man diese Variablen direkt im Aufgabentext verwenden, so müssen diese in eine TeX Umgebung gestellt werden.

Daraus folgt allerdings, dass man beim Erstellen einer Aufgabe selbst keine Variablen mit den Namen E oder PI erstellen darf.