Beschreibung der eEx.js Bibliothek

Mit den eEx-Programmen und Aufgaben wird auch eine JavaScript-Bibliothek mitgeliefert. Diese ist jedoch keine zwingende Voraussetzung für die Programmierung von eEx-Aufgaben, erleichtert es aber. Die Datei können Sie auch für die Erstellung eigener Aufgaben und Übungen verwenden. Die Bibliothek beinhaltet Methoden für die Kommunikation mit dem eEx-Webserver aber auch nützliche Funktionen zur Verwendung in Aufgaben. Mit dem Einsatz der Bibliothek ist das Erstellen der Aufgaben einfacher. Download

Des Weiteren empfiehlt sich auch die Verwendung der eEx.css. Sie können diese Dateien wie folgt in Ihren HTML-Code einbinden:

<!doctype html>
<html><head>
...
<script type="text/javascript" src="eex-1.0.0.min.js"></script>
<link rel="stylesheet" type="text/css" href="eex-1.0.0.css" />
</head>

Die eEx.js Datei, die eEx.css Datei und eine HTML-Vorlage für neue Aufgaben finden Sie hier.

Funktionsweise

Die eEx-Bibliothek enthält das globale Objekt eex, welches diverse Konstanten und Funktionen anbietet.

Wenn die Seite geladen ist ruft wird die Funktion showExercise() aufgerufen. Diese Funktion muss im Code Ihrer Aufgabe enthalten sein. Sie können hier die Anweisungen für das Erzeugen und Initialisieren der Aufgabe unterbringen.

Wenn der Anwender auf die Schaltfläche "Lösung senden" klickt, dann ruft die eEx im JS-Code Ihrer Aufgabe die Funktion showSolution() auf. Hier können Sie den Code für das Prüfen der Ergebnisse implementieren. Gleichzeitig wird die Senden-Schaltfläche deaktiviert, was ein erneutes Senden der Ergebnisse verhindert.

Wenn in Ihrem Code die Funktion zum Prüfen der Ergebnisse abgearbeitet ist, dann sollten Sie die eex-Methode setResult() aufrufen. Dieser Methode können Sie einen nummerischen Wert zwischen 0 und 100 übergeben, der das erzielte Ergebnis darstellt.

function showExercise() {
  // Code zum Initialisieren der Aufgabe
}
function showSolution() {
  // Code zum Prüfen der Ergebnisse
  eex.setResult(res);
}

Mehr müssen Sie nicht machen. Um den Rest kümmert sich das eex-Objekt. Dieses frägt den Anwender ob das Ergebnis übermittelt werden soll. Stimmt der Anwender dem zu, werden die Daten (Aufgaben-ID, Ergebnis und abgelaufene Zeit) zum eEx-Webserver gesendet. Er bekommt anschließend die Bestätigung, dass die Daten gespeichert wurden.

Die eEx-API

Zentrales Element in der eEx-Bibliothek ist das eex-Objekt. Dieses Objekt bietet diverse Eigenschaften und Methoden, die sie in Ihrem Aufgaben-Code verwenden können.

compare(n,s,digits)

Vergleicht eine Zahl mit einem String und berücksichtigt dabei eine bestimmte Anzahl Nachkommastellen. Diese Funktion wird vor allem dort benötigt, wo Ergebnisse Nachkommastellen enthalten können. Beispiel:

eex.compare(0,"0"); //liefert true
eex.compare(0,"0.0"); //liefert true
eex.compare(0,".0"); //liefert true
eex.compare(0,"0.1"); //liefert true
eex.compare(1,"1"); //liefert true
eex.compare(-1,"-1"); //liefert true
eex.compare(0.1,"0"); //liefert true
eex.compare(0.1,"0.2"); //liefert true
eex.compare(1000,"1000,1"); //liefert true
eex.compare(1000,"1000.1"); //liefert true
eex.compare(1000,"1.000,0"); //liefert true
eex.compare(1000,"1,000.00"); //liefert true
eex.compare(0,"0",1); //liefert true
eex.compare(0,"0.0",1); //liefert true
eex.compare(0,"0.01",1); //liefert true
eex.compare(0.1,"0,10",1); //liefert true
eex.compare(0.1,"0,11",1); //liefert true
eex.compare(0.01,"0",1); //liefert true
eex.compare(10/3,"3.3",1); //liefert true
eex.compare(10/3,"3,33",2); //liefert true
eex.compare(10/3,"3,333",2); //liefert true
eex.compare(10/3,"3,339",2); //liefert true
eex.compare(10/3,"3,333333333",9); //liefert true
eex.compare(0,"-0"); //liefert true
eex.compare(1,"0")); //liefert false
eex.compare(1,"-1")); //liefert false
eex.compare(-1,"1")); //liefert false
eex.compare(0,"0.1",1)); //liefert false
eex.compare(0.1,"0",1)); //liefert false
eex.compare(10/3,"3,3",2)); //liefert false
eex.compare(10/3,"3,33333333",9)); //liefert false
eex.compare(0,"a")); //liefert false
eex.compare(0,"-")); //liefert false
eex.compare(0,"")); //liefert false

compareStr(str1,str2)

Vergleicht zwei Strings, wobei diese auch als Unicode-Zahlen bestehen können. Um Ergebnisse im Quellcode zu verschleiern können Sie Ihre Zeichenketten als Unicode-Zeichennummern kodieren. Beim Prüfen der Ergebnisse müssen Sie jedoch beide Strings ins gleiche Format bringen. Beispiel:

var str1 = "&#86;&#101;&#114;&#98;";
var str2 = "Verb";
eex.compareStr(str1,str2)); //liefert true

Das ms-Objekt

Die Stammsprache der eex-Bibliothek ist Deutsch. Sie können die Bibliothek aber auch für fremdsprachige Aufgaben und Übungen verwenden. Die konstanten und variablen Texte und Beschriftungen werden wie folgt über das ms-Objekt angepasst:

<script type="text/javascript">
  eex.ms.cDecimal=".";
  eex.ms.noValRes = "no valid result!";
  eex.ms.btnSubmit="Send dolution";
  eex.ms.btnRefresh:"Reload page";
  eex.ms.btnContent="Content";
  eex.ms.questSaveRes="You have solved %result%% of the tasks correctly.";
  eex.ms.questSaveQuest="\nThis result should be saved?";
  //ab hier nur für das eExMC-Autorenprogramm
  eex.ms.mcMoveFirst="First question";
  eex.ms.mcMovePrevious="Previous Question";
  eex.ms.mcMoveNext="Next Question";
  eex.ms.mcMoveLast="Last Question";
  eex.ms.mcQuestIncorrect="At least one answer is wrong!";
  eex.ms.mcQuestCorrect="This answer is correct!";  
</script>

getRandomArray(arr)

Liefert ein Zufalls-Element aus einem Array. Beispiel:

var element = eex.getRandomArray(['Luft','Wasser','Boden']);

getRandomNumber(min,max)

Liefert eine Zufallszahl im Bereich zwischen min und max, wobei die beiden Werte min und max ebenfalls vorkommen können.

getSubmited()

Liefert true wenn die Lösung der Aufgabe gesendet wurde. Damit können Sie verhindern dass nach dem Absenden der Ergebnisse weitere Aktionen des Anwenders erfolgen können. Die Methode liefert wieder false wenn die Aufgabe neu geladen wurde.

Beispiel: Sie haben eine Handler-Funktion an die span-Elemente einer Klasse gebunden. Beim Klick auf eines dieser span-Elemente tut sich irgendwas in der Aufgabe. Dass soll aber nach dem Absenden der Lösung nicht mehr möglich sein.

function showExercise() {
  ...
  $('span.wort').click(function(){ 
     if(eex.getSubmited()) return false;
     ...
  }
} 

leastCommonMultiple()

Liefert das kleinste gemeinsame Vielfache der übergebenen Zahlen. Intern werden zur Berechnung nur die Primzahlen bis 97 verwendet. Beispiel:

alert(eex.leastCommonMultiple(2,3,12,18)) 
//zeigt einen Dialog mit: 36

primeFactorization(n)

Liefert ein sortiertes Array mit den Primfaktoren einer Zahl. Dabei werden nur die Primzahlen bis 97 berücksichtigt. Beispiel:

alert(eex.primeFactorization(351765650)) 
//zeigt einen Dialog mit: 2,5,5,29,41,61,97

primeFactorizationPow(n)

Liefert ein Array mit den Exponenten der Primfaktoren einer Zahl. Dabei werden nur die Primzahlen bis 97 berücksichtigt. Beispiel:

alert(eex.primeFactorization(351765650)); 
//zeigt einen Dialog mit: 1,0,2,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1

primeNumber100

Liefert ein Array mit den Primzahlen von 2 bis 97.

reduceFraction(num,denum)

Kürzt einen Bruch. Die Funktion erwartet die Argumente Zähler und Nenner des Bruches und liefert ein Array, das aus Zähler und Nenner des gekürzten Bruches besteht. Intern werden zur Berechnung nur die Primzahlen bis 97 verwendet. Beispiel:

alert(eex.reduceFraction(12,18)) 
//zeigt einen Dialog mit: 2,3

toFixedStr(n,digits)

Liefert einen String aus einer Zahl und erzwingt eine bestimmte Anzahl Nachkommastellen. Beispiel:

alert(eex.toFixedStr(7123.203848,2)) //zeigt einen Dialog mit: 7123.20
alert(eex.toFixedStr(-7123.203848,2)) //zeigt einen Dialog mit: -7123.20
alert(eex.toFixedStr(7123,2)) //zeigt einen Dialog mit: 7123.00

Anders als die JS-Funktion toFixed() rundet toFixecStr() nicht automatisch, sondern schneidet zu überzähligen Stellen ab.

alert((7123.209848,2).toFixed(2)) //zeigt einen Dialog mit: 7123.21
alert(eex.toFixedStr(7123.209848,2)) //zeigt einen Dialog mit: 7123.20

Dieses Verhalten ist besonders bei mathematischen Übungen wichtig, wenn in der Aufgabe verlangt wird, dass eine bestimmte Anzahl an Stellen hinter dem Komma berechnet werden sollen.

Der Parameter digits akzeptiert auch negative Werte. Diese bewirken, dass unnötige Nullen hinter dem Komma verworfen werden. Der Parameter digits gibt als Negativzahl an, wie viele Nachkommastellen maximal angezeigt werden.

alert(eex.toFixedStr(7123.209848,-2)) //zeigt einen Dialog mit: 7123.2

Objekt-Erweiterungen

Array.shuffle()

Mischt die Elemente eines Arrays zu einer neuen zufälligen Reihenfolge.

Array.swap()

Tauscht zwei Elemente eines Arrays untereinander aus. Als Argumente erwartet die Funktion die Indexe der Array-Elemente.

String.charCode()

Wandelt eine Zeichenkette in Unicode-Zeichennummern um.

var str1 = "Verb";
var str2 = str1.chrCode(); //str2 enthält nun "&#86;&#101;&#114;&#98;"