Benotungsfunktionen

Beim Bearbeiten von Fragen bietet Wiris Quizzes eine Vielfalt an Optionen, um die Antwort des Schülers mit der richtigen Antwort zu vergleichen. Dazu gehören Dezimalstellen, Einheiten, Vereinfachung usw. (alles in der Registerkarte Validierung). Manchmal halten wir es aber für notwendig, unsere eigene Regel aufzustellen, um festzulegen, ob eine Antwort richtig ist. Dazu können die Benotungsfunktionen genutzt werden. Eine Benotungsfunktion ist eine benutzerdefinierte Formel, mit der die Antwort eines Schülers als richtig oder falsch eingestuft wird. Sie ermöglicht eine genauere Festlegung, als es mit den Optionen, die in der Registerkarte Validierung enthalten sind, möglich wäre.

Eine Benotungsfunktion ist eine Funktion einer oder mehrerer Variablen (siehe Benotungsfunktionen und Zusammengesetzte Antworten), die in der Registerkarte Variablen definiert ist und eine Zahl zwischen 0 und 1 ausgibt. Die von der Funktion für die jeweilige Eingabe ausgegebene Zahl entspricht der Punktzahl aus 1,00, die für die Antwort gegeben wird. Im ersten Beispiel waren die ausgegeben Werte entweder wahr oder falsch, was 0 (keine Punkte) oder 1 (volle Punktzahl) entspricht. Ein Beispiel mit mehr Werten zwischen 0 und 1 findest du unter Benutzerspezifische Benotung.

Jedes Mal, wenn wir eine Benotungsfunktion benutzen möchten, müssen wir sie als Option unter der Registerkarte Validierung auswählen und den Namen der Funktion in das freie Feld eingeben. Weiter unten findest du noch weitere Beispiele.

Angenommen wir möchten die Aufgabe "Nenne eine Primzahl" stellen. Dazu müssen wir eine Benotungsfunktion benutzen.

Erstellen wir zunächst die Benotungsfunktion. Das geschieht unter der Registerkarte Variablen. In diesem Beispiel heißt die Benotungsfunktion g f.

Für die definierte Funktion , g f left parenthesis x right parenthesis, wird wahr angezeigt, wenn x eine Primzahl ist, und andernfalls falsch. Wähle Benotungsfunktion in der Registerkarte Validierung aus, um diese Validierungsmethode zu nehmen. Trage dann den Namen der Benotungsfunktion, in diesem Fall gf, in das leere Feld ein.

In der Registerkarte Richtige Antwort kann ein beliebiger Wert eingegeben werden. Da wir die Benotungsfunktion als Validierungsmethode ausgewählt haben, ist einzig das Ergebnis der Benotungsfunktion ausschlaggebend, um die Korrektheit der Antworten zu bestimmen. In diesem Fall könnten wir zum Beispiel eine Primzahl eingeben.

Wir zeigen nun ein einfaches Beispiel einer Validierungsfunktion mit mehreren Ergebnissen. Für bessere Antworten sollen mehr Punkte vergeben werden.

Wir möchten die folgende Frage zu Grundrechenarten stellen:

für jede richtige Eigenschaft der Antwort, die der Schüler gibt, werden entsprechende Teilpunkte angerechnet. Wir nehmen an, dass diese Frage von Kindern beantwortet wird, und gehen davon aus, dass es am schwersten für sie sein wird, eine Zahl zu finden, deren Rest 2 ist, wenn sie durch 7 geteilt wird. Dafür geben wir 0,4 Punkte, und jeweils 0,3 Punkte für die anderen Eigenschaften. Außerdem möchten wir für die restlichen Eigenschaften nur halbe Punktzahlen vergeben, wenn die Antwort bezüglich der ersten Eigenschaft falsch ist (das ist der Zweck von decrease_mark).

Beachte dabei, dass bei der Erstellung einer längeren Benotungsfunktion mehrere Bedingungen und Berechnungen von den Aussagen begin..end umschlossen werden müssen und return zur Definition des Funktionsergebnisses verwendet werden muss.

Jetzt ist die Frage fertig. Vergewissere dich, dass du die Option Benotungsfunktion in der Registerkarte Validierung markiert hast, wie bereits beschrieben. Alle richtigen Werte müssen in der Registerkarte Richtige Antwort angegeben werden. Wir können sehen, dass beide dieser Antworten richtig sind:

Wir haben eine ziemlich einfache Frage als Beispiel benutzt, sehen aber bereits, dass mit Benotungsfunktionen sehr benutzerspezifische und komplexe Validierungen möglich sind.

LIVE-DEMO

Auch bei Fragen mit zusammengesetzten Antworten können wir Benotungsfunktionen erstellen. Wir müssen einfach für jedes leere Antwortfeld ein eigenes Argument benutzen. Wenn also drei Lücken ausgefüllt werden müssen, sollte die Validierungsfunktion in etwa so aussehen: gf(x,y,z). Das erste Argument entspricht der ersten Lücke, das zweite Argument der zweiten usw. Sehen wir uns nun ein einfaches Beispiel an.

Die Frage ist eine standardmäßige Übung zur einführenden Infinitesimalrechnung:

Dazu könnten wir die folgende Benotungsfunktion verwenden:

Im Gegensatz zu gewöhnlichen zusammengesetzten Antworten liegt hier der Vorteil darin, dass wir uns keine Gedanken über die Reihenfolge machen müssen, in der die Schüler antworten. Es sind außerdem praktisch unendlich viele Antworten möglich (hier waren alle Antworten der Art 8 k plus 1 mit k als Ganzzahl gültig). Es ist aber leicht zu erkennen, dass wesentlich komplexeres Verhalten programmiert werden kann.

LIVE-DEMO

Nehmen wir nun an, dass wir mit einer zusammengesetzten Antwort arbeiten wie in Zusammengesetzte Antworten. Es kann vorkommen, dass ein Schüler ein Feld nicht ausfüllt und nur eine Frage beantwortet. Wenn du die Frage benoten möchtest, die vom Schüler eingereicht wurde, musst du den Algorithmus ändern und mit dem Befehl nicht_null? überprüfen, dass das Feld nicht leer ist. Beispielsweise, gemäß dem Beispiel oben

Denke daran, dass in der Registerkarte Richtige Antwort die Note nach Bedarf verteilt werden muss.

Wenn du Fragen mit Vektoren erstellen willst, solltest du dir unbedingt diesen Abschnitt durchlesen. Der wichtige Punkt dabei ist, dass die Vektoren als Matrizen in die Benotungsfunktion aufgenommen werden. Wir müssen sie also im Funktionsrumpf mit einem Index versehen, um normale Vektorenberechnungen mit ihnen vorzunehmen. Das sollte alles im folgenden einfachen Beispiel klar werden.

Dies bedeuten im Wesentlichen, dass ein Argument [...] der Benotungsfunktion als [ [...]] (eine Liste mit dem Originalvektor als einzigem Element) verstanden wird. Dadurch können wir keine Vektorenberechnungen damit vornehmen. Beispielsweise wird der Vektor

umgewandelt zu

Wie greifen wir auf den ursprünglichen Vektor zu? Er ist das erste (und einzige) Element einer Liste. Also können wir wie bei jeder Liste mit dem Subindex 1 auf das erste Element folgendermaßen zugreifen:

Wenn also v der vom Schüler angegebene ursprüngliche Vektor war und in die Benotungsfunktion aufgenommen wird, müssen wir einfach v subscript 1 schreiben, wenn wir v als Vektor verwenden möchten. Sehen wir uns das an einem einfachen Beispiel an:

Der Rang der Matrix ist 2. Es gibt also unendlich viele Lösungen. Deshalb müssen wir eine Benotungsfunktion verwenden, wenn wir eine beliebige Lösung zulassen möchten. Die Funktion selbst ist recht einfach; beachte aber dabei, dass wir wie oben beschrieben den Subindex verwendet haben:

Ein weiterer Fall, der hier noch behandelt werden sollte, ist, dass wir den Schülern erlauben möchten, eine Antwort mit Zeilen- oder Spaltenvektoren zu geben (bisher sind wir nur von Zeilenvektoren ausgegangen). Anhand eines Beispiels zeigen wir nun, wie wir in diesem Fall vorgehen. Wir nehmen dieselbe Frage wie zuvor und nehmen an, dass der Schüler die Frage folgendermaßen beantwortet:

Das ist ein Spaltenvektor, und dieser wird anders behandelt. Wir müssen ihn aber einfach nur transponieren und landen so wieder beim vorherigen Fall. Höchstwahrscheinlich sollen beide Antwortarten zulässig sein. Also können wir an die ursprüngliche Benotungsfunktion Folgendes hinzufügen:

Wir haben eine if-Anweisung hinzugefügt, die einfach ermittelt, ob die Eingabe ein Spaltenvektor ist (indem sie prüft, ob die Spaltenanzahl gleich 1 ist). In diesem Fall transponiert sie die Eingabe. Andernfalls wird an v nichts verändert. Als Ergebnis hat v in allen Fällen die Form [ [...] ] und anschließend können wir die Subindizes genau wie bereits beschrieben verwenden.

LIVE-DEMO