<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.uni-due.de/jack/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=LGlaser</id>
	<title>JACK Wiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.uni-due.de/jack/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=LGlaser"/>
	<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Spezial:Beitr%C3%A4ge/LGlaser"/>
	<updated>2026-06-30T14:42:13Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Java_(JACK3)&amp;diff=12816</id>
		<title>Java (JACK3)</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Java_(JACK3)&amp;diff=12816"/>
		<updated>2026-05-28T12:55:07Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: /* Feedback */ Checker aktualisiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Aufgabeninhalt===&lt;br /&gt;
In dem Bereich Aufgabeninhalt wird der Aufgabentext erstellt und spezifische Eingaben für den jeweiligen Aufgabenteil gemacht.&lt;br /&gt;
[[File:Aufgabentext.jpg|center|thumb|800px|Editor für den Aufgabentext]]&lt;br /&gt;
* &#039;&#039;&#039;Titel:&#039;&#039;&#039; Hier kann optional der Name des Aufgabenteils eingetragen werden.&lt;br /&gt;
* &#039;&#039;&#039;Aufgabentext:&#039;&#039;&#039; Im Aufgabentext steht die Aufgabenstellung. Der Editor für den Aufgabetext lässt sich öffnen in dem man reinklickt. In dem Fließtext kann Latex-Code verwendet werden, indem man diesen mit $-Zeichen einspannt. Der Editor bietet einige Formatierungen an wie z.B. fett, kursiv und unterstrichen. Einfache Tabellen können auch mithilfe des Editors erstellt werden. Wenn man den Button &#039;&#039;source code&#039;&#039; [[File:Icon-source_code.jpg|35px]] verwendet kann man HTML-Code nutzen. Über den Button &#039;&#039;&#039;Ressource Einfügen&#039;&#039;&#039; lässt sich ein hochgeladenes Bild oder ein Link in den Aufgabentext einfügen.&lt;br /&gt;
* &#039;&#039;&#039;Einstellungen für den Dateiupload:&#039;&#039;&#039; Hier werden die Einstellungen gemacht über die Dateien, die die Lernenden als Lösung bei dieser Aufgabe hochladen. &lt;br /&gt;
** &#039;&#039;&#039;Erforderliche Dateinamen:&#039;&#039;&#039; Zuerst wird festgelegt, wie die Dateien heißen sollen. Alle Dateinamen, die unter Erforderliche Dateinamen aufgeführt werden müssen auch von dem Lernenden hochgeladen werden. Ist das Feld leer haben die Lernenden die freie Wahl bei der Benennung ihrer Klassen.&lt;br /&gt;
** &#039;&#039;&#039;Erlaubte Dateinamen:&#039;&#039;&#039; Hier werden die Dateinamen aufgelistet, die alle erlaubt sind. Dadruch können auch Varianten erlaubt werden.&lt;br /&gt;
** &#039;&#039;&#039;Mindestzahl hochgeladener Dateien:&#039;&#039;&#039; Hier wird angegeben wie viele Dateien mindestens die Lernenden hochladen sollen.&lt;br /&gt;
** &#039;&#039;&#039;Höchstzahl hochgeladener Dateien:&#039;&#039;&#039; Hier wird angegeben wie viele Dateien höchsten die Lernenden hochladen dürfen. Wenn die Anzahl festgelegt ist, wie viele Dateien hochgeladen werden sollen, dann muss bei beiden dieselbe Zahl angegeben werden.&lt;br /&gt;
[[File:Java_Einstellungen.JPG|center|thumb|800px|Einstellungen bei einer Java Aufgabe]]&lt;br /&gt;
&lt;br /&gt;
===Feedback===&lt;br /&gt;
* &#039;&#039;&#039;Gewichtung des Aufgabenteils:&#039;&#039;&#039; Gewichtung der Punktzahl eines Aufgabenteils innerhalb der Aufgabe.&lt;br /&gt;
* &#039;&#039;&#039;Reaktion bei fehlenden oder falschen Dateianhängen:&#039;&#039;&#039; Wie soll Jack reagieren, wenn ein Lernender falsche Dateien angehängt hat oder Dateien fehlen. Es gibt die Möglichkeit die &#039;&#039;&#039;Stufe wiederholen lassen&#039;&#039;&#039; oder die &#039;&#039;&#039;Einreichung mit 0 Punkten bewerten&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Verhalten bei internen Fehlern während der Überprüfung:&#039;&#039;&#039; Während der Überprüfung studentischer Lösungen können schon mal interne Fehler auftreten. Hier muss angegeben werden ob die &#039;&#039;&#039;Bearbeitung markiert und abgebrochen&#039;&#039;&#039; wird oder ob eine &#039;&#039;&#039;Nachricht ausgeben und Bearbeitung fortgesetzt&#039;&#039;&#039; wird.&lt;br /&gt;
* &#039;&#039;&#039;Bewertungsverfahren:&#039;&#039;&#039; Über die jeweiligen Button können &#039;&#039;&#039;[[GReQLJavaChecker|statische Checker]]&#039;&#039;&#039; und &#039;&#039;&#039;[[TracingChecker|dynamische Checker]]&#039;&#039;&#039; hinzugefügt werden.&lt;br /&gt;
** &#039;&#039;&#039;Gewichtung dieses Checks:&#039;&#039;&#039; Die verschiedenen dynamischen und statischen Checker einer Aufgabe können unterschiedlich stark gewichtet werden. Dadurch lässt sich die unterschiedlichen Aufgaben der Checker berücksichtigen.&lt;br /&gt;
** &#039;&#039;&#039;Diesen Check löschen:&#039;&#039;&#039; Über den Button lässt sich dieser Checker von der Aufgabe entfernen.&lt;br /&gt;
** &#039;&#039;&#039;Berücksichtigte Dateien in diesem Check:&#039;&#039;&#039; Hier werden die Dateien eingetragen, die dieser Checker checken soll. &lt;br /&gt;
** &#039;&#039;&#039;Weitere Quellcode-Dateien aus der Aufgabe:&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;Checker:&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;&#039;GReQL-Regelsatz zur statischen Überprüfung:&#039;&#039;&#039; Hier wird der Regelsatz eingetragen. Weitere Informationen über den GReQL Java Checker und welche Regeln zur Verfügung stehen finden sich [[GReQLJavaChecker|hier]].&lt;br /&gt;
*** &#039;&#039;&#039;dynamische Tests:&#039;&#039;&#039; Hier wird der Testtreiber für die dynamischen Tests eingefügt. Weitere Informationen über den Tracing Java Checker sind [[TracingChecker|hier]] zu finden.&lt;br /&gt;
*** &#039;&#039;&#039;Metrikberechnung:&#039;&#039;&#039; Hier werden einige Softwaremetriken auf den eingereichten Lösung berechnet (z.B. Lines of Code, Zyklomatische Komplexität). Die Ergebnisse werden in Meta Variablen gespeichert und können als Extra-Feedback ausgegeben werden.&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot;&amp;gt;&lt;br /&gt;
Java_GReQL_Checker.JPG|statischer Checker (GReQL)&lt;br /&gt;
Java_Tracing_Checker.JPG|dynamischer Checker&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Überspringen:&#039;&#039;&#039; Der Lehrende kann jeden Java Aufgabenteil zum Überspringen anbieten. Dazu muss zunächst der Haken gesetzt werden. Danach gibt es noch die Möglichkeit einen Text den Lernenden anzuzeigen, wenn dieser diesen Aufgabenteil übersprungen hat. Das Textfeld öffnet sich entweder wenn man reinklickt oder über den [[File:Icon-Pencil.jpg|22px]]-Button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{JACK3:Hinweise}}&lt;br /&gt;
&lt;br /&gt;
===Verknüpfungen===&lt;br /&gt;
* &#039;&#039;&#039;Nächster Aufgabenteil (Standard):&#039;&#039;&#039; In dem Drop-Down Feld wird der nächste Zustand ausgewählt, in die die Aufgabe sein soll, wenn der Lernende eine Lösung eingereicht hat. Dieses wird immer dann durchgeführt, wenn keine andere Aktion zutrifft. Es gibt die folgenden Möglichkeiten: &lt;br /&gt;
** &#039;&#039;&#039;Nächster oder Ende:&#039;&#039;&#039; Dies ist die default Einstellung. Nach der studentischen Einreichung dieses Aufgabenteils wird der nächste Aufgabenteil in der Reihe angezeigt. Wenn dies der letzte Aufgabenteil dieser Aufgabe ist, ist die Aufgabe beendet. &lt;br /&gt;
** &#039;&#039;&#039;Ende der Aufgabe:&#039;&#039;&#039; Die Aufgabe ist mit der Aktion des Lernenden beendet.&lt;br /&gt;
** &#039;&#039;&#039;Aufgabenteil wiederholen:&#039;&#039;&#039; Der Aufgabenteil wird wiederholt. Der Lernende kann ein weiteres Ergebnis einreichen. Diese Aktion kann man z.B. bei Übungsaufgaben benutzen, wenn der Lernende eine Aufgabe solange wiederholen soll, bis das richtige Ergebnis eingereicht wurde.&lt;br /&gt;
** &#039;&#039;&#039;#x (x ist dabei ein beliebiger Aufgabenteil dieser Aufgabe):&#039;&#039;&#039; Der entsprechende Aufgabenteil wird als nächstes angezeigt. Wenn man die Aufgabenteilnummer des aktuellen Aufgabenteils wählt wird dieser Aufgabenteil neu aufgerufen.&lt;br /&gt;
** &#039;&#039;&#039;Nicht auf Feedback warten und sofort zum nächsten Aufgabenteil weiterschalten:&#039;&#039;&#039; Da bei dieser Aufgabe es teilweise länger dauern kann bis die Checker ein Feedback zurück geben, besteht die Möglichkeit den Haken hier zu setzen. Dann wird nicht auf das Checker Ergebnis gewartet, bevor der nächste Aufgabenteil angezeigt wird.&lt;br /&gt;
[[File:Verknuepfung_Java.JPG|center|thumb|800px|Verknüpfung mit anderen Stufen]]&lt;br /&gt;
* &#039;&#039;&#039;Weitere nächste Aufgabenteile (optional):&#039;&#039;&#039; Hier kann die nächste Aktion dynamisch eingestellt werden, d.h. sie kann abhängig von der Variablen Konstelation sein oder von der Eingabe des Lernenden.&lt;br /&gt;
* &#039;&#039;&#039;Nächster Aufgabenteil beim Überspringen (optional):&#039;&#039;&#039; Hier wird eingestellt welcher nächste Aufgabenteil angezeigt werden soll, wennn der Lernende die Stufe übersprungen hat. Diese Einstellungsmöglichkeit steht nur zur Verfügung, wenn der Haken im Tab Feedback fürs Überspringen gesetzt wurde.&lt;br /&gt;
&lt;br /&gt;
{{JACK3:Variablenupdates}}&lt;br /&gt;
&lt;br /&gt;
{{JACK3:Dateien für Studierende}}&lt;br /&gt;
&lt;br /&gt;
=== Variablen ===&lt;br /&gt;
Wenn in einem statischen Check ein Regelsatz verwendet wurde, der Regeln vom Typ &amp;quot;report&amp;quot; enthält, stehen die Ergebnisse als Variablen der Form &amp;lt;code&amp;gt;[check=&amp;lt;Name_der_Report-Variablen&amp;gt;]&amp;lt;/code&amp;gt; zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Wenn für das Feedback die Metrikberechnung aktiviert wird, stehen außerdem die folgenden Variablen zur Verfügung:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[check=complexity]&amp;lt;/code&amp;gt;|| Zyklomatische Komplexität des untersuchten, studentischen Codes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[check=depth]&amp;lt;/code&amp;gt;|| Maximale Tiefe des AST des untersuchten, studentischen Codes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[check=fields]&amp;lt;/code&amp;gt;|| Anzahl der im untersuchten, studentischen Code deklarierten Felder&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[check=methods]&amp;lt;/code&amp;gt;|| Anzahl der im untersuchten, studentischen Code deklarierten Methoden&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[check=loops]&amp;lt;/code&amp;gt;|| Anzahl der im untersuchten, studentischen Code vorkommenden Schleifen-Konstrukte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[check=statements]&amp;lt;/code&amp;gt;|| Anzahl der im untersuchten, studentischen Code vorkommenden Statements&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[check=expressions]&amp;lt;/code&amp;gt;|| Anzahl der im untersuchten, studentischen Code vorkommenden Ausdrücke&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[check=refs]&amp;lt;/code&amp;gt;|| Anzahl der im untersuchten, studentischen Code vorkommenden Referenzen (Feld- und Variablenzugriffe, Methoden- und Konstruktoraufrufe)&lt;br /&gt;
|}&lt;br /&gt;
Für weitere Informationen über Variablen siehe [[Variablen (JACK3)|Variablen]].&lt;br /&gt;
[[category:Benutzerhandbuch]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Benutzerhandbuch_(JACK3)&amp;diff=12808</id>
		<title>Benutzerhandbuch (JACK3)</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Benutzerhandbuch_(JACK3)&amp;diff=12808"/>
		<updated>2026-05-21T13:27:26Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Korrekturworkflow eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dies ist das Benutzerhandbuch der neuesten Version JACK3. Hier finden Sie alle wichtigen Information von &amp;quot;Wie erstelle ich eine Aufgabe?&amp;quot; über &amp;quot;Wie lasse ich meine Studierende die Aufgaben bearbeiten?&amp;quot; bis &amp;quot;Wie lässt sich in die studentische Abgaben einsehen?&amp;quot;.&lt;br /&gt;
Bitte beachten Sie, dass dies noch in Arbeit ist und noch nicht vollständig ist. Es kommen noch weitere Abschnitte hinzu und andere werden noch ausgebaut.&lt;br /&gt;
&lt;br /&gt;
==[[Schnelleinstieg (JACK3)|Schnelleinstieg]]==&lt;br /&gt;
[[Schnelleinstieg (JACK3)|Hier]] ist eine Anleitung für den Schnelleinstieg in JACK3. Mit dieser Anleitung lässt sich schnell eine Aufgabe erstellen und diese Studierenden zur Verfügung stellen. Dabei werden nur die wichtigsten Einstellungen betrachtet. Für weitere Details stehen die folgenden Seiten zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Zum schnellen Finden einzelner Seiten kann auch die [[:Category:Benutzerhandbuch|A-Z]] Liste genutzt werden.&lt;br /&gt;
&lt;br /&gt;
==Allgemeine Informationen und Hinweise zum Start==&lt;br /&gt;
Beschreibung der globalen Einstellungen, die ein Nutzer in JACK3 tätigen kann. &lt;br /&gt;
Nachdem Aufrufen von JACK3 erscheint zunächst die [[Login (JACK3)|Login]] Seite, auf der man sich in das e-Assessment System JACK3 einloggen können. JACK3 Terminologie kann im [[Glossar (JACK3)|Glossar]] nachgeschlagen werden.&lt;br /&gt;
* [[Hauptseite (JACK3)|Hauptseite]] - Erklärung der [[Hauptseite (JACK3)|Hauptseite]], die nach dem Einloggen in das E-Assessment System JACK erscheint.&lt;br /&gt;
* [[Mein Account (JACK3)|Mein Account]] - Einstellungsmöglichkeiten des eigenen Benutzerskontos.&lt;br /&gt;
* [[Verfügbare Kurse (JACK3)|Verfügbare Kurse]] - Unter [[Verfügbare Kurse (JACK3)|Verfügbare Kurse]] können Lehrende Kursangebote erstellen, die dann von den Studierenden bearbeitet werden. Studierende sehen hier alle [[Kursangebot (Studierendensicht)|Kursangebote]], die sie bearbeiten können.&lt;br /&gt;
* [[Meine Teilnahmen (JACK3)|Meine Teilnahmen]] - Hier erscheinen die aktuell laufenden Kurse.&lt;br /&gt;
* [[Mein Arbeitsbereich (JACK3)|Mein Arbeitsbereich]] - Kurse und Aufgaben werden in diesem Bereich erstellt.&lt;br /&gt;
* [[Spracheinstellung (JACK3)|Spracheinstellung]] - Die Spracheinstellung wirkt sich nur global auf die Seiten aus und nicht auf die Aufgaben selber.&lt;br /&gt;
* [[Glossar (JACK3)|Grundlegende Konzepte / Glossar]] - Erklärung der Grundlegenden Konzepte in JACK3, die zum Teil für die Benutzung sehr wichtig sind.&lt;br /&gt;
* [[Variablen (JACK3)|Variablen]] - Variablentypen von JACK3 (insb. Aufgaben-Variablen) und die Verwendung&lt;br /&gt;
&lt;br /&gt;
==Aufgaben erstellen / testen==&lt;br /&gt;
In diesem Abschnitt wird alles beschrieben, was sich mit einer einzelnen Aufgabe beschäftigt. Es beginnt mit globalen Einstellungen für eine Aufgabe, die Erstellung der verschiedenen Aufgabentypen, bis zum Testen der erstellten Aufgabe.&lt;br /&gt;
* [[Aufgaben Konfiguration (JACK3)|Aufgaben Konfigurationen / Einstellungen]]&lt;br /&gt;
** [[Aufgaben Einstellungen (JACK3)|Einstellungen]] - globalen Einstellungen der Aufgabe&lt;br /&gt;
** [[Variablenkonfiguration (JACK3)|Variablenkonfiguration]]&lt;br /&gt;
** [[JSXGraph (JACK3)|Dynamische, grafische Inhalte]]&lt;br /&gt;
** [[Aufgabenteile (JACK3)|Aufgabenteile]] - alle möglichen Aufgabenformate in JACK3 werden hier beschrieben&lt;br /&gt;
*** [[Atomorbitale (JACK3)|Atomorbitale]] - Erstellen von Atomorbitalschemas&lt;br /&gt;
*** [[Dateiupload (JACK3)|Dateiupload]] - Hochladen von Datei(en)&lt;br /&gt;
*** [[Drag &amp;amp; Drop (Sichtbare Zonen) (JACK3)|Drag &amp;amp; Drop (Sichtbare Zonen)]] - Drag &amp;amp; Drop auf Bildern mit sichtbaren Zonen&lt;br /&gt;
*** [[Drag &amp;amp; Drop (Text) (JACK3)|Drag &amp;amp; Drop (Text)]] - Drag &amp;amp; Drop auf Text&lt;br /&gt;
*** [[Drag &amp;amp; Drop (Unsichtbare Zonen) (JACK3)|Drag &amp;amp; Drop (Unsichtbare Zonen)]] - Drag &amp;amp; Drop auf Bildern mit unsichtbaren Zonen&lt;br /&gt;
*** [[Fill-In (JACK3)|Fill-In / Drop-Down/ Molekül]] - Lückentext, Eingabefelder, Drop-Down und Molekül Felder&lt;br /&gt;
*** [[Freitext (JACK3)|Freitext]] - Textfeld für die Eingabe von Texten, ohne Checker&lt;br /&gt;
*** [[Gatterschaltung (JACK3)|Gatterschaltung]]&lt;br /&gt;
*** [[Java (JACK3)|Java]] - Programmieraufgaben in Java&lt;br /&gt;
*** [[Molekül (JACK3)|Molekül]]&lt;br /&gt;
*** [[Multiple-Choice (JACK3)|Multiple-Choice]] - Multiple-Choice und Single-Choice möglich&lt;br /&gt;
*** [[MC-Table (JACK3)|Multiple-Choice Tabelle]]&lt;br /&gt;
*** [[Nomenklaturen (JACK3)|Nomenklaturen]] - Abfrage von Fachterminologie mit manueller oder automatischer Überprüfung&lt;br /&gt;
*** [[Python (JACK3)|Python]] - Programmieraufgaben in Python&lt;br /&gt;
*** [[R (JACK3)|R]]&lt;br /&gt;
*** [[UML (JACK3)|UML]]&lt;br /&gt;
** [[Grafische Darstellung (JACK3)|Grafische Darstellung der Aufgabenteile]] - Ansicht wie die verschiedenen Aufgabenteile miteinander verbunden sind.&lt;br /&gt;
** [[Dateien (JACK3)|Dateien]]&lt;br /&gt;
** [[Aufgaben Statistik (JACK3)|Statistik]]&lt;br /&gt;
* [[Aufgaben testen (JACK3)|Aufgabe testen]] - Beschreibung wie eine Aufgabe getestet werden kann, bevor sie Studierenden gezeigt wird.&lt;br /&gt;
&lt;br /&gt;
==Kurse / Kursangebote erstellen==&lt;br /&gt;
In diesem Abschnitt werden Kurse und Kursangebote beschrieben. Wichtig hier ist auch das Zusammespiel der beiden.&lt;br /&gt;
* [[Kurs Einstellungen (JACK3)|Kurs Einstellungen]] - Im Kurs werden die Aufgaben zusammengestellt.&lt;br /&gt;
* [[Kursangebot Einstellungen (JACK3)|Kursangebot Einstellungen]] - Im Kursangebot werden die Sichtbarkeiten eingestellt.&lt;br /&gt;
&#039;&#039;&#039;Mögliche Szenarien&#039;&#039;&#039;: Kursangebote können für verschiedene Zwecke eingesetzt werden. Auf den folgenden Seiten werden gängige Einsatzszenarien mit Schritt-für-Schritt-Anleitungen erläutert. Es ist jedoch zu beachten, dass Einstellungen ggf. individuell angepasst und getestet werden müssen&lt;br /&gt;
*[[Kursanmeldung (JACK3)|Kursanmeldung]] - Reines Anmeldesystem ohne Aufgaben, z.B. für die Anmeldung zu einer mündlichen Prüfung.&lt;br /&gt;
*[[Übungskurs erstellen (JACK3)|Übungskurs]] - Übungsaufgaben, um Inhalte aus der Vorlesung zu üben.&lt;br /&gt;
*[[Prüfung erstellen (JACK3)|Prüfung]] - Prüfung oder Klausur mit JACK3 erstellen.&lt;br /&gt;
&lt;br /&gt;
==Statistiken / Prüfungsergebnisse==&lt;br /&gt;
Beschreibung der Einsicht in die Bearbeitungen von den Studierenden.&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:#f257ff;font-weight:bold;&amp;quot;&amp;gt;[NEU!]&amp;lt;/span&amp;gt; [[Korrekturworkflow (JACK3)|Korrekturworkflow]]&lt;br /&gt;
*[[Einsicht in Ergebnisse in Aufgaben (JACK3)|Ergebnisse ansehen in Aufgaben]]&lt;br /&gt;
*[[Manuelles Feedback (JACK3)|Manuelles Feedback]] - An jeder Einreichung einer Aufgabe und einer Kursbearbeitung kann das automatische Feedback von JACK und die vergebene Punktzahl überschrieben werden.&lt;br /&gt;
*[[Einsicht in Ergebnisse in Kursangeboten (JACK3)|Ergebnisse ansehen in Kursangeboten]]&lt;br /&gt;
&lt;br /&gt;
==Anmeldeoptionen / Nutzer Verwaltung / Rechte Konzept==&lt;br /&gt;
*[[Kursangebot Einstellungen (JACK3)#Zugangsbeschränkung|Verlinkung von Kursen über den öffentlichen Link]]&lt;br /&gt;
* [[LTI Anbindung (JACK3)|Moodle Anbindung]] - Erklärung wie sich ein Kursangebot in JACK3 in einen Moodle Kurs einbinden lässt.&lt;br /&gt;
*[[Rechtekonzept (JACK3)|Rechtekonzept]] und [[Rechte bearbeiten (JACK3)|Rechte bearbeiten]] - Erklärung der verschiedenen Rechte in JACK3.&lt;br /&gt;
*[[Verwaltung (JACK3)|Verwaltung]] - Verwaltungsmöglichkeiten eines Admins.&lt;br /&gt;
&lt;br /&gt;
==Import / Export==&lt;br /&gt;
*[[Inhalte exportieren (JACK3)|Inhalte exportieren]] - Es können nur Inhalte von [[Mein Arbeitsbereich (JACK3)|Mein Arbeitsbereich]] heruntergeladen werden.&lt;br /&gt;
*[[Aufgaben aus Jack2 importieren (JACK3)|Aufgaben aus JACK2 importieren]]&lt;br /&gt;
**[[Evaluator-Änderungen von JACK2 nach JACK3]]&lt;br /&gt;
*[[Inhalte importieren (JACK3)|Inhalte importieren]]&lt;br /&gt;
[[Kategorie:JACK3]]&lt;br /&gt;
[[Kategorie:Benutzerhandbuch]]&lt;br /&gt;
[[Kategorie:Hauptseiten]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Korrekturworkflow_(JACK3)&amp;diff=12807</id>
		<title>Korrekturworkflow (JACK3)</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Korrekturworkflow_(JACK3)&amp;diff=12807"/>
		<updated>2026-05-21T13:24:22Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Seite erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der &#039;&#039;&#039;Korrekturworkflow&#039;&#039;&#039; wurde mit Version 0.20 eingeführt. Diese Funktion unterstützt bei der Korrektur und anschließenden Freischaltung/Einsicht von Prüfungen/Klausuren („Bearbeitungen“) in JACK, insbesondere durch die Möglichkeit, eine große Menge von eingereichten Lösungen zu einer Aufgabe durchzusehen. Dies ist z.&amp;amp;nbsp;B. für offene Aufgaben hilfreich, die manuell korrigiert werden müssen.&lt;br /&gt;
&lt;br /&gt;
Die Funktion gibt es in zwei unterschiedlichen Formen:&lt;br /&gt;
&lt;br /&gt;
* Zum Durchsehen einer durchgeführten Klausur nach Aufgaben eignet sich der Workflow für &#039;&#039;&#039;(Aufgaben-)Bearbeitungen&#039;&#039;&#039;. Es wird eine Aufgabe oder Bearbeitung ausgewählt, anschließend kann man sich durch alle eingereichten Lösungen zu dieser Aufgabe durchklicken, [[Manuelles Feedback (JACK3)|manuelles Feedback]] hinzufügen und die entsprechenden Aufgaben als „&#039;&#039;geprüft&#039;&#039;“ markieren.&lt;br /&gt;
* Die Ansicht nach &#039;&#039;&#039;Kursbearbeitungen / Kursteilnahmen&#039;&#039;&#039; (eine Kursteilnahme entspricht bei Prüfungen i.&amp;amp;nbsp;d.&amp;amp;nbsp;R. einem Studierenden bzw. analog einer abgegebenen Klausur) ist die zweite Option. Hier geht man nacheinander durch alle Kursteilnahmen durch und kann diese zur Ansicht „&#039;&#039;freischalten&#039;&#039;“, um z.&amp;amp;nbsp;B. eine Einsicht zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Beide Formen können gemeinsam, aber auch unabhängig voneinander genutzt werden. Es ist bspw. möglich, den Workflow ausschließlich dazu zu nutzen, um Aufgaben nachzukorrigieren ohne Kursbearbeitungen freizuschalten.&lt;br /&gt;
&lt;br /&gt;
Ein &#039;&#039;&#039;typischer Ablauf&#039;&#039;&#039; könnte wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
* Zunächst wird eine Prüfung mit JACK durchgeführt, die die unten gezeigten Sichtbarkeitseinstellungen hat, d.&amp;amp;nbsp;h. Studierende können die Ergebnisse erst nach manueller Freischaltung sehen.&lt;br /&gt;
* Die Prüfung wird aufgabenweise korrigiert, z.&amp;amp;nbsp;B. indem jede korrigierende Person zu einer Aufgabe zugewiesen wird. Alternativ mithilfe der Positionsanzeige: Die erste Position korrigiert die Bearbeitungen 1–50, die nächste Person 51–100, usw. Es wird pro Bearbeitung zunächst die automatische Bewertung durch JACK überprüft und ggf. mit manuellem Feedback überschrieben (im Falle von falschen Bewertungen, internen Fehlern oder ausschließlich manuell zu korrigierenden Aufgaben), anschließend wird die Bearbeitung direkt oder von einem Dritten (z.&amp;amp;nbsp;B. einem Zweitprüfer) als „geprüft“ markiert.&lt;br /&gt;
* Zum Zeitpunkt einer Einsicht werden Kursbearbeitungen individuell für die jeweiligen Studierenden zur Ansicht freigeschaltet und nach der Einsicht wieder deaktiviert.&lt;br /&gt;
&lt;br /&gt;
== Einstellungen im Kursangebot ==&lt;br /&gt;
&#039;&#039;→ Siehe auch: [[Kursangebot Einstellungen (JACK3)#Einstellungen im Kursangebot|Einstellungen in einem Kursangebot]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Funktion kann über die Einstellung &#039;&#039;Korrekturworkflow aktivieren&#039;&#039; pro Kursangebot aktiviert werden. Dies schaltet in den Einstellungen zu einem Kursangebot folgende Elemente frei:&lt;br /&gt;
* Option, was Studierende &#039;&#039;Nach manueller Freischaltung&#039;&#039; sehen dürfen&lt;br /&gt;
* Fortschrittsanzeige mit den geprüften bzw. freigeschalteten Bearbeitungen&lt;br /&gt;
* Die &#039;&#039;Korrekturübersicht&#039;&#039; als Startpunkt für den Korrekturworkflow&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;500&amp;quot; heights=&amp;quot;265&amp;quot;&amp;gt;&lt;br /&gt;
Datei:Korrekturworkflow Einstellungen.png|Beispiel für Sichtbarkeitseinstellungen: Ergebnisse sind erst nach einer Freischaltung (pro Studierendem) sichtbar.&lt;br /&gt;
Datei:Korrekturworkflow Status.png|Statusanzeige für den Korrekturworkflow am unteren Ende der Kursangebot-Einstellungen.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Korrekturübersicht ==&lt;br /&gt;
Auf der Seite zur &#039;&#039;&#039;Korrekturübersicht&#039;&#039;&#039; befinden sich eine detaillierte Statusanzeige und die von anderen Seiten bekannten Ergebnistabellen.&amp;lt;gallery widths=&amp;quot;500&amp;quot; heights=&amp;quot;150&amp;quot;&amp;gt;&lt;br /&gt;
Datei:Korrekturworkflow Status Details.png|Detaillierte Fortschrittsanzeige für Aufgaben-&amp;amp;nbsp;(1) und Kursbearbeitungen&amp;amp;nbsp;(3) mit der Möglichkeit, den Workflow zu starten und direkt in die erste Bearbeitung zu springen&amp;amp;nbsp;(2).&lt;br /&gt;
&amp;lt;/gallery&amp;gt;Die Tabelle für Bearbeitungen&amp;amp;nbsp;(1) bietet die Möglichkeit der Mehrfachauswahl&amp;amp;nbsp;(3), um mehrere/alle Bearbeitungen als „geprüft“ zu markieren („Aktionen“), außerdem können Bearbeitungen u.&amp;amp;nbsp;a. nach Status&amp;amp;nbsp;(4) und Aufgabe&amp;amp;nbsp;(5) sortiert und gefiltert werden. Geprüfte Bearbeitungen werden mit einem grünen Haken markiert&amp;amp;nbsp;(4). Es besteht die Möglichkeit, aus der Ergebnistabelle direkt zu einer spezifischen Bearbeitung zu navigieren&amp;amp;nbsp;(6). Die Tabelle für Kursbearbeitungen&amp;amp;nbsp;(2) bietet ähnliche Funktionen, darunter die Option, mithilfe der Mehrfachauswahl mehrere/alle Kursbearbeitungen freizuschalten und diese nach aktuellem Status der Freischaltung zu filtern; die Freischaltung wird dabei mit einem grünen Auge gekennzeichnet&amp;amp;nbsp;(7). In der Titelleiste wird angezeigt, wie viele (Kurs-)Bearbeitungen noch nicht geprüft bzw. nicht freigeschaltet wurden&amp;amp;nbsp;(8).&amp;lt;gallery widths=&amp;quot;500&amp;quot; heights=&amp;quot;265&amp;quot;&amp;gt;&lt;br /&gt;
Datei:Korrekturworkflow Aufgabenbearbeitung Übersicht.png|Tabelle mit „Bearbeitungen“ (erster Reiter)&lt;br /&gt;
Datei:Korrekturworkflow Kursbearbeitung Übersicht.png|Tabelle mit „Kursbearbeitungen“ (zweiter Reiter)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Workflow für Bearbeitungen zu einzelnen Aufgaben==&lt;br /&gt;
&#039;&#039;→ Siehe auch: [[Manuelles Feedback (JACK3)|Manuelles Feedback]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Auf der Detailseite zu einzelnen Aufgabenbearbeitungen gibt es folgende Elemente (Bild 1):&lt;br /&gt;
&lt;br /&gt;
# Titelleiste mit der Möglichkeit, zur vorherigen/nächsten Bearbeitung zu dieser Aufgabe zu springen&lt;br /&gt;
# Einen Button, um die gesamte Bearbeitung zu (de-)markieren&lt;br /&gt;
# Eine Statusanzeige zur aktuell gewählten Aufgabe&lt;br /&gt;
# Die [[Einsicht in Ergebnisse in Aufgaben (JACK3)|bekannte Detailansicht]] zur bearbeiteten Aufgabe inklusive aller Teilaufgaben&lt;br /&gt;
# Pro Teilaufgabe einen Button, um diese Teilaufgabe zu markieren. Sind alle Teilaufgaben als „geprüft“ markiert, wird automatisch die gesamte Bearbeitung markiert.&lt;br /&gt;
# Die Möglichkeit, zu anderen eingereichten Aufgaben des Studierenden zu springen&lt;br /&gt;
&lt;br /&gt;
Aufgabenteile, die manuell bewertet werden müssen (darunter zählen Freitextaufgaben, Bild 2), können erst als „geprüft“ markiert werden (1), wenn ein [[Manuelles Feedback (JACK3)|manuelles Feedback]] (2) mit mindestens einer vergebenen Punktzahl (3) vorliegt.&amp;lt;gallery widths=&amp;quot;500&amp;quot; heights=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
Datei:Korrekturworkflow Aufgabenbearbeitung Details 1.png|Detailansicht zu einer Aufgabenbearbeitung&lt;br /&gt;
Datei:Korrekturworkflow Aufgabenbearbeitung Details 2.png|Detailansicht zu einer Aufgabenbearbeitung mit einem manuell bewerteten und geprüften Freitext-Aufgabenteil&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Workflow für Kursbearbeitungen==&lt;br /&gt;
Auf der Detailseite zu einzelnen Kursbearbeitungen gibt es zusätzlich zur bekannten Detailansicht die Möglichkeit, zur vorherigen/nächsten Kursbearbeitung zu springen (1), außerdem können Kursbearbeitungen freigeschaltet werden bzw. die Freigabe wieder entzogen werden (2). Ist eine Kursbearbeitung nicht freigeschaltet, bestimmt sich das, was Studierende sehen dürfen, aus den Einstellungen &#039;&#039;Nach individueller Beendigung des Kurses&#039;&#039; bzw. &#039;&#039;Nachdem die Bearbeitung für alle geendet hat&#039;&#039;. Ist sie freigeschaltet, bestimmt sich dies aus der Einstellung &#039;&#039;Nach manueller Freischaltung&#039;&#039;.&amp;lt;gallery widths=&amp;quot;500&amp;quot; heights=&amp;quot;600&amp;quot;&amp;gt;&lt;br /&gt;
Datei:Korrekturworkflow Kursbearbeitung Details.png|Detailansicht zu einer Kursbearbeitung&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Studierendensicht ==&lt;br /&gt;
Für Studierende ist der Status des Workflows, insb. die Prüf-Markierung von Aufgabenteilen, nicht sichtbar, lediglich die Auswirkungen von durchgeführten Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Manuelles Feedback oder eine gesetzte Punktzahl wird je nach Einstellungen im Kursangebot angezeigt.&lt;br /&gt;
* Die Sichtbarkeitseinstellungen &#039;&#039;Nach manueller Freischaltung&#039;&#039; (s.o.) bestimmen, was Studierende sehen, wenn die Kursbearbeitung freigeschaltet wurde (grünes Auge).&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;600&amp;quot; heights=&amp;quot;400&amp;quot;&amp;gt;&lt;br /&gt;
Datei:Korrekturworkflow Student nicht freigeschaltet.png|Die Kursbearbeitung des jeweiligen Studierenden wurde noch nicht freigeschaltet. Nur die Liste an Aufgaben und die erreichbaren Punktzahlen sind sichtbar (gemäß der Einstellung &#039;&#039;Nach individueller Beendigung&#039;&#039;).&lt;br /&gt;
Datei:Korrekturworkflow Student freigeschaltet.png|Die Kursbearbeitung des jeweiligen Studierenden wurde freigeschaltet. Nun sind auch die gemachten Eingaben und die erreichte Punktzahl sichtbar (gemäß der Einstellung &#039;&#039;Nach manueller Freischaltung&#039;&#039;).&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:JACK3]]&lt;br /&gt;
[[Kategorie:Benutzerhandbuch]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Student_nicht_freigeschaltet.png&amp;diff=12802</id>
		<title>Datei:Korrekturworkflow Student nicht freigeschaltet.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Student_nicht_freigeschaltet.png&amp;diff=12802"/>
		<updated>2026-05-20T17:51:18Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Student_freigeschaltet.png&amp;diff=12801</id>
		<title>Datei:Korrekturworkflow Student freigeschaltet.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Student_freigeschaltet.png&amp;diff=12801"/>
		<updated>2026-05-20T17:51:16Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Status.png&amp;diff=12800</id>
		<title>Datei:Korrekturworkflow Status.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Status.png&amp;diff=12800"/>
		<updated>2026-05-20T17:51:14Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Status_Details.png&amp;diff=12799</id>
		<title>Datei:Korrekturworkflow Status Details.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Status_Details.png&amp;diff=12799"/>
		<updated>2026-05-20T17:51:12Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Kursbearbeitung_%C3%9Cbersicht.png&amp;diff=12798</id>
		<title>Datei:Korrekturworkflow Kursbearbeitung Übersicht.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Kursbearbeitung_%C3%9Cbersicht.png&amp;diff=12798"/>
		<updated>2026-05-20T17:51:11Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Kursbearbeitung_Details.png&amp;diff=12797</id>
		<title>Datei:Korrekturworkflow Kursbearbeitung Details.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Kursbearbeitung_Details.png&amp;diff=12797"/>
		<updated>2026-05-20T17:51:09Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Einstellungen.png&amp;diff=12796</id>
		<title>Datei:Korrekturworkflow Einstellungen.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Einstellungen.png&amp;diff=12796"/>
		<updated>2026-05-20T17:51:08Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Aufgabenbearbeitung_%C3%9Cbersicht.png&amp;diff=12795</id>
		<title>Datei:Korrekturworkflow Aufgabenbearbeitung Übersicht.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Aufgabenbearbeitung_%C3%9Cbersicht.png&amp;diff=12795"/>
		<updated>2026-05-20T17:51:01Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Aufgabenbearbeitung_Details_2.png&amp;diff=12794</id>
		<title>Datei:Korrekturworkflow Aufgabenbearbeitung Details 2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Aufgabenbearbeitung_Details_2.png&amp;diff=12794"/>
		<updated>2026-05-20T17:50:59Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Aufgabenbearbeitung_Details_1.png&amp;diff=12793</id>
		<title>Datei:Korrekturworkflow Aufgabenbearbeitung Details 1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Aufgabenbearbeitung_Details_1.png&amp;diff=12793"/>
		<updated>2026-05-20T17:50:58Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Student_nicht_freigeschaltet.png&amp;diff=12792</id>
		<title>Datei:Korrekturworkflow Student nicht freigeschaltet.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Student_nicht_freigeschaltet.png&amp;diff=12792"/>
		<updated>2026-05-20T17:44:30Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Student_freigeschaltet.png&amp;diff=12791</id>
		<title>Datei:Korrekturworkflow Student freigeschaltet.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Student_freigeschaltet.png&amp;diff=12791"/>
		<updated>2026-05-20T17:44:28Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Status.png&amp;diff=12790</id>
		<title>Datei:Korrekturworkflow Status.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Status.png&amp;diff=12790"/>
		<updated>2026-05-20T17:44:24Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Status_Details.png&amp;diff=12789</id>
		<title>Datei:Korrekturworkflow Status Details.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Status_Details.png&amp;diff=12789"/>
		<updated>2026-05-20T17:44:21Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Kursbearbeitung_%C3%9Cbersicht.png&amp;diff=12788</id>
		<title>Datei:Korrekturworkflow Kursbearbeitung Übersicht.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Kursbearbeitung_%C3%9Cbersicht.png&amp;diff=12788"/>
		<updated>2026-05-20T17:43:38Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Kursbearbeitung_Details.png&amp;diff=12787</id>
		<title>Datei:Korrekturworkflow Kursbearbeitung Details.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Kursbearbeitung_Details.png&amp;diff=12787"/>
		<updated>2026-05-20T17:42:32Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Einstellungen.png&amp;diff=12786</id>
		<title>Datei:Korrekturworkflow Einstellungen.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Einstellungen.png&amp;diff=12786"/>
		<updated>2026-05-20T17:41:46Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Aufgabenbearbeitung_%C3%9Cbersicht.png&amp;diff=12785</id>
		<title>Datei:Korrekturworkflow Aufgabenbearbeitung Übersicht.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Aufgabenbearbeitung_%C3%9Cbersicht.png&amp;diff=12785"/>
		<updated>2026-05-20T17:41:16Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Aufgabenbearbeitung_Details_2.png&amp;diff=12784</id>
		<title>Datei:Korrekturworkflow Aufgabenbearbeitung Details 2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Aufgabenbearbeitung_Details_2.png&amp;diff=12784"/>
		<updated>2026-05-20T17:40:44Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Aufgabenbearbeitung_Details_1.png&amp;diff=12783</id>
		<title>Datei:Korrekturworkflow Aufgabenbearbeitung Details 1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Datei:Korrekturworkflow_Aufgabenbearbeitung_Details_1.png&amp;diff=12783"/>
		<updated>2026-05-20T17:39:54Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=IEEERemainder&amp;diff=12781</id>
		<title>IEEERemainder</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=IEEERemainder&amp;diff=12781"/>
		<updated>2026-05-20T10:11:23Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: LaTeX ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Zugehörige Evaluatoren===&lt;br /&gt;
*&#039;&#039;&#039;MathEvaluator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
Die Funktion &#039;&#039;iEEERemainder&#039;&#039; berechnet die Remainder-Operation zweier Argumente, wie es in dem IEEE 745 Standard beschrieben ist (vgl. [https://doi.org/10.1109/IEEESTD.2019.8766229 IEEE 754-2019, S. 31], [https://de.wikipedia.org/wiki/IEEE_754#Arithmetik_und_Quadratwurzel Wikipedia]). Die Funktion erwartet zwei Zahlen und gibt das Ergebnis von &lt;br /&gt;
&lt;br /&gt;
\(f_{1} - (f_{2} \cdot \text{round}(\frac{f_{1}}{f_{2}}))\)&lt;br /&gt;
&lt;br /&gt;
zurück.&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
 iEEERemainder([[Gleitkommazahl]] f1, [[Gleitkommazahl]] f2)&lt;br /&gt;
&lt;br /&gt;
=== Parameter ===&lt;br /&gt;
* &#039;&#039;&#039;f1&#039;&#039;&#039; - Zähler&lt;br /&gt;
* &#039;&#039;&#039;f2&#039;&#039;&#039; - Nenner&lt;br /&gt;
&lt;br /&gt;
=== Return Value ===&lt;br /&gt;
* Gibt das gerundete Ergebnis von \(f_{1} - (f_{2} \cdot Q)\) zurück. Q ist dabei das gerundete Ergebnis von \(f_{1}/f_{2}\). &#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Wenn \(f_{1}/f_{2}\) genau zwischen zwei ganzen Zahlen liegt, wird die gerade ganze Zahl zurückgegeben ([https://de.wikipedia.org/wiki/Rundung#Symmetrisches_Runden symmetrisches Runden]).&lt;br /&gt;
* Wenn das Ergebnis gleich 0 ist, wird bei positivem \(f_{1}\) &amp;lt;code&amp;gt;+0&amp;lt;/code&amp;gt; und bei negativem \(f_{1}\) &amp;lt;code&amp;gt;-0&amp;lt;/code&amp;gt; zurückgegeben.&lt;br /&gt;
* Wenn \(f_{2}\) gleich 0 ist, wird NaN zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
===Unterschied zu Modulo===&lt;br /&gt;
Beide geben den Rest nach der Division zurück, verwenden aber unterschiedliche Formeln:&lt;br /&gt;
&lt;br /&gt;
 iEEERemainder = dividend - (divisor * Math.Round(dividend / divisor))&lt;br /&gt;
&lt;br /&gt;
 Modulo = (Math.Abs(dividend) - (Math.Abs(divisor) * (Math.Floor(Math.Abs(dividend) / Math.Abs(divisor))))) * Math.Sign(dividend)&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
 3/2    iEEERemainder--&amp;gt;returns -1    Modulo--&amp;gt;returns 1&lt;br /&gt;
 11/3   iEEERemainder--&amp;gt;returns -1    Modulo--&amp;gt;returns 2&lt;br /&gt;
 28/5   iEEERemainder--&amp;gt;returns -2    Modulo--&amp;gt;returns 3&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
==== Standardfälle ====&lt;br /&gt;
 iEEERemainder(4,2)   --&amp;gt; returns 0&lt;br /&gt;
 iEEERemainder(3,2)   --&amp;gt; returns -1&lt;br /&gt;
 iEEERemainder(27,4)  --&amp;gt; returns -1&lt;br /&gt;
 iEEERemainder(17.8,4)  --&amp;gt; returns 1.8&lt;br /&gt;
&lt;br /&gt;
==== Benutzung mit Variablen ====&lt;br /&gt;
 iEEERemainder([var=a],[var=b])&lt;br /&gt;
 &lt;br /&gt;
==== Benutzung mit studentischen Eingaben ====&lt;br /&gt;
 &#039;&#039;&#039;Jack2:&#039;&#039;&#039;&lt;br /&gt;
 iEEERemainder([pos=1],[pos=2])&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Jack3:&#039;&#039;&#039;&lt;br /&gt;
 iEEERemainder([input=field1],[input=field2])&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Math-Evaluatorfunktion]][[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=IEEERemainder&amp;diff=12779</id>
		<title>IEEERemainder</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=IEEERemainder&amp;diff=12779"/>
		<updated>2026-05-19T12:23:41Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: ‎Hinweis zum Runden&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Zugehörige Evaluatoren===&lt;br /&gt;
*&#039;&#039;&#039;MathEvaluator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
Die Funktion &#039;&#039;iEEERemainder&#039;&#039; berechnet die Remainder-Operation zweier Argumente, wie es in dem IEEE 745 Standard beschrieben ist [https://de.wikipedia.org/wiki/IEEE_754#Aritmetik_und_Quadratwurzel]. Die Funktion erwartet zwei Zahlen und gibt das Ergebnis von &lt;br /&gt;
 f1-(f2* Math.Round(f1/f2))&lt;br /&gt;
zurück.&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
 iEEERemainder([[Gleitkommazahl]] f1, [[Gleitkommazahl]] f2)&lt;br /&gt;
&lt;br /&gt;
=== Parameter ===&lt;br /&gt;
* &#039;&#039;&#039;f1&#039;&#039;&#039; - Zähler&lt;br /&gt;
* &#039;&#039;&#039;f2&#039;&#039;&#039; - Nenner&lt;br /&gt;
&lt;br /&gt;
=== Return Value ===&lt;br /&gt;
* Gibt das gerundete Ergebnis von f1-(f2*Q) zurück. Q ist dabei das gerundete Ergebnis von f1/f2. &#039;&#039;&#039;Hinweis&#039;&#039;&#039;: Wenn f1/f2 genau zwischen zwei ganzen Zahlen liegt, wird die gerade ganze Zahl zurückgegeben ([https://de.wikipedia.org/wiki/Rundung#Symmetrisches_Runden symmetrisches Runden]).&lt;br /&gt;
* Wenn f1-(f2*Q) gleich 0 ist, wird bei positivem f1 &#039;&#039;+0&#039;&#039; und bei negativem f1 &#039;&#039;-0&#039;&#039; zurückgegeben.&lt;br /&gt;
* Wenn f2 gleich 0 ist, wird NaN zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
===Unterschied zu Modulo===&lt;br /&gt;
Beide geben den Rest nach der Division zurück, verwenden aber unterschiedliche Formeln:&lt;br /&gt;
&lt;br /&gt;
 iEEERemainder = dividend -(divisor * Math.Round(dividend / divisor))&lt;br /&gt;
&lt;br /&gt;
 Modulo = (Math.Abs(dividend) - (Math.Abs(divisor) * (Math.Floor(Math.Abs(dividend) / Math.Abs(divisor))))) * Math.Sign(dividend)&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
 3/2    iEEERemainder--&amp;gt;returns -1    Modulo--&amp;gt;returns 1&lt;br /&gt;
 11/3   iEEERemainder--&amp;gt;returns -1    Modulo--&amp;gt;returns 2&lt;br /&gt;
 28/5   iEEERemainder--&amp;gt;returns -2    Modulo--&amp;gt;returns 3&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
==== Standardfälle ====&lt;br /&gt;
 iEEERemainder(4,2)   --&amp;gt; returns 0&lt;br /&gt;
 iEEERemainder(3,2)   --&amp;gt; returns -1&lt;br /&gt;
 iEEERemainder(27,4)  --&amp;gt; returns -1&lt;br /&gt;
 iEEERemainder(17.8,4)  --&amp;gt; returns 1.8&lt;br /&gt;
&lt;br /&gt;
==== Benutzung mit Variablen ====&lt;br /&gt;
 iEEERemainder([var=a],[var=b])&lt;br /&gt;
 &lt;br /&gt;
==== Benutzung mit studentischen Eingaben ====&lt;br /&gt;
 &#039;&#039;&#039;Jack2:&#039;&#039;&#039;&lt;br /&gt;
 iEEERemainder([pos=1],[pos=2])&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Jack3:&#039;&#039;&#039;&lt;br /&gt;
 iEEERemainder([input=field1],[input=field2])&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Math-Evaluatorfunktion]][[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=RoundCommercial&amp;diff=12778</id>
		<title>RoundCommercial</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=RoundCommercial&amp;diff=12778"/>
		<updated>2026-05-19T12:17:57Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navigation/Rundungsfunktionen}}&lt;br /&gt;
&lt;br /&gt;
===Zugehörige Evaluatoren===&lt;br /&gt;
*&#039;&#039;&#039;MathEvaluator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
Die Funktion &#039;&#039;roundCommercial&#039;&#039; rundet eine Gleitkommazahl an der angegebenen Nachkommerstelle, wobei das kaufmännische Rundungsverfahren (round-half-away-from-zero) angewendet wird. Standardmäßig rundet die Funktion auf die nächstgelegene Ganzzahl.&lt;br /&gt;
Die Funktion erwartet eine Gleitkommazahl, die gerundet werden soll, sowie eine optionale Ganzzahl, die die Nachkommastelle angibt auf die gerundet werden soll.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Die Funktion wendet das [https://de.wikipedia.org/wiki/Rundung#Kaufm%C3%A4nnisches_Runden kaufmännische Runden] (&#039;&#039;Round half away from Zero&#039;&#039;) an. Zahlen, die genau in der Mitte liegen, werden aufgerundet, negative Zahlen werden nach ihrem Betrag gerundet. Für [https://de.wikipedia.org/wiki/Rundung#Symmetrisches_Runden symmetrisches Runden] siehe [[Round]].|Achtung}}&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
 roundCommercial([[Gleitkommazahl]] zahl, [[Ganzzahl]] index)&lt;br /&gt;
&lt;br /&gt;
=== Parameter ===&lt;br /&gt;
* &#039;&#039;&#039;zahl&#039;&#039;&#039; - die zu rundene Zahl&lt;br /&gt;
* &#039;&#039;&#039;index&#039;&#039;&#039; - die Nachkommastelle - (default = 0)&lt;br /&gt;
&lt;br /&gt;
=== Return Value ===&lt;br /&gt;
*Gibt die gerundete Gleitkommazahl zurück&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
==== Standardfälle ====&lt;br /&gt;
 roundCommercial(1.25, 1)    --&amp;gt; 1.3&lt;br /&gt;
 roundCommercial(15.678)     --&amp;gt; 16.0&lt;br /&gt;
 roundCommercial(-4.555, 1)  --&amp;gt; -4.6&lt;br /&gt;
 roundCommercial(3.14149, 3) --&amp;gt; 3.141&lt;br /&gt;
&lt;br /&gt;
 round(6.5)                  --&amp;gt; 7.0  (kaufmännisches Runden)&lt;br /&gt;
 round(5.5)                  --&amp;gt; 6.0  (kaufmännisches Runden)&lt;br /&gt;
 round(0.625, 2)             --&amp;gt; 0.63 (kaufmännisches Runden)&lt;br /&gt;
&lt;br /&gt;
=== Hinweise ===&lt;br /&gt;
* Weitere Funktionen zum Thema runden sind [[ceil]], [[floor]], [[round]] und [[rint]].&lt;br /&gt;
* Der Unterschied zu [[round]] besteht darin, dass roundCommercial kaufmännisch rundet.&lt;br /&gt;
* Beim Runden wird nur auf die Stelle direkt nach der Stelle geachtet, auf die gerundet werden soll. Also bei &amp;lt;code&amp;gt;roundCommercial(3.14149,3)&amp;lt;/code&amp;gt; wird nur die vierte Nachkommastelle &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; betrachtet, die fünfte &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; spielt keine Rolle.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Math-Evaluatorfunktion]][[Kategorie:Operator]][[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Round&amp;diff=12777</id>
		<title>Round</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Round&amp;diff=12777"/>
		<updated>2026-05-19T12:17:20Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Hinweise zum Runden&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navigation/Rundungsfunktionen}}&lt;br /&gt;
&lt;br /&gt;
===Zugehörige Evaluatoren===&lt;br /&gt;
*&#039;&#039;&#039;MathEvaluator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
Die Funktion &#039;&#039;round&#039;&#039; rundet eine Gleitkommazahl zu einer Ganzzahl. Die Funktion erwartet eine Zahl und gibt die nächst gelegene Ganzzahl zurück.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann die Funktion &#039;&#039;round&#039;&#039; eine Gleitkommazahl auf eine bestimmt Nachkommastelle runden. Das zweite optionale Argument gibt die Nachkommastelle an. 0 entspricht einem Aufruf ohne zweitem Parameter.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Die Funktion wendet das [https://de.wikipedia.org/wiki/Rundung#Symmetrisches_Runden symmetrische Runden] (&#039;&#039;Round half to even&#039;&#039;, auch bekannt als &#039;&#039;Banker’s Rounding&#039;&#039;) an. Zahlen, die genau in der Mitte liegen, werden so gerundet, dass die letzte Ziffer gerade wird (siehe Beispiele). Für [https://de.wikipedia.org/wiki/Rundung#Kaufm%C3%A4nnisches_Runden kaufmännisches Runden] siehe [[RoundCommercial]].|Achtung}}&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
 round([[Gleitkommazahl]] zahl, [ [[Ganzzahl]] index ])&lt;br /&gt;
&lt;br /&gt;
=== Parameter ===&lt;br /&gt;
* &#039;&#039;&#039;zahl&#039;&#039;&#039; - die zu rundene Zahl&lt;br /&gt;
* &#039;&#039;&#039;index&#039;&#039;&#039; - die Nachkommastelle - optional (default = 0)&lt;br /&gt;
&lt;br /&gt;
=== Return Value ===&lt;br /&gt;
*Gibt die gerundete [[Ganzzahl]] zurück&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
==== Standardfälle ====&lt;br /&gt;
 round(12.4)      --&amp;gt; 12&lt;br /&gt;
 round(15.678)    --&amp;gt; 16&lt;br /&gt;
 round(15.678, 2) --&amp;gt; 15.68&lt;br /&gt;
 round(3.21, 2)   --&amp;gt; 3.21&lt;br /&gt;
 round(3.1, 0)    --&amp;gt; 3&lt;br /&gt;
 round(27/4, 2)   --&amp;gt; 6.75&lt;br /&gt;
&lt;br /&gt;
 round(6.5)       --&amp;gt; 6    (symmetrisches Runden)&lt;br /&gt;
 round(5.5)       --&amp;gt; 6    (symmetrisches Runden)&lt;br /&gt;
 round(0.625, 2)  --&amp;gt; 0.62 (symmetrisches Runden)&lt;br /&gt;
 round(0.635, 2)  --&amp;gt; 0.64&lt;br /&gt;
 round(10:16, 2)  --&amp;gt; 0.62&lt;br /&gt;
 round(10/16, 2)  --&amp;gt; 0.62&lt;br /&gt;
 round(0.625, 1)  --&amp;gt; 0.6&lt;br /&gt;
 round(0.625)     --&amp;gt; 1&lt;br /&gt;
 round(0.555, 2)  --&amp;gt; 0.56&lt;br /&gt;
&lt;br /&gt;
==== Benutzung mit Variablen ====&lt;br /&gt;
 round([var=a])&lt;br /&gt;
 &lt;br /&gt;
 round([var=a], [var=b])&lt;br /&gt;
&lt;br /&gt;
==== Benutzung mit studentischen Eingaben ====&lt;br /&gt;
&lt;br /&gt;
 round([input=field1])&lt;br /&gt;
&lt;br /&gt;
=== Hinweise ===&lt;br /&gt;
* Die Funktion kann auch genutzt werden, um aus einem Bruch eine Dezimalzahl zu erzeugen.&lt;br /&gt;
* Weitere Funktionen zum Thema runden sind [[ceil]], [[floor]] und [[rint]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Math-Evaluatorfunktion]][[Kategorie:Operator]][[Kategorie:JACK2]][[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=RoundCommercial&amp;diff=12776</id>
		<title>RoundCommercial</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=RoundCommercial&amp;diff=12776"/>
		<updated>2026-05-19T12:17:08Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Hinweise zum Runden&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navigation/Rundungsfunktionen}}&lt;br /&gt;
&lt;br /&gt;
===Zugehörige Evaluatoren===&lt;br /&gt;
*&#039;&#039;&#039;MathEvaluator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
Die Funktion &#039;&#039;roundCommercial&#039;&#039; rundet eine Gleitkommazahl an der angegebenen Nachkommerstelle, wobei das kaufmännische Rundungsverfahren (round-half-away-from-zero) angewendet wird. Standardmäßig rundet die Funktion auf die nächstgelegene Ganzzahl.&lt;br /&gt;
Die Funktion erwartet eine Gleitkommazahl, die gerundet werden soll, sowie eine optionale Ganzzahl, die die Nachkommastelle angibt auf die gerundet werden soll.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Die Funktion wendet das [https://de.wikipedia.org/wiki/Rundung#Kaufm%C3%A4nnisches_Runden kaufmännische Runden] (&#039;&#039;Round half away from Zero&#039;&#039;) an. Zahlen, die genau in der Mitte liegen, werden aufgerundet, negative Zahlen werden nach ihrem Betrag gerundet. Für [https://de.wikipedia.org/wiki/Rundung#Symmetrisches_Runden symmetrisches Runden] siehe [[Round]].|Achtung}}&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
 roundCommercial([[Gleitkommazahl]] zahl, [[Ganzzahl]] index)&lt;br /&gt;
&lt;br /&gt;
=== Parameter ===&lt;br /&gt;
* &#039;&#039;&#039;zahl&#039;&#039;&#039; - die zu rundene Zahl&lt;br /&gt;
* &#039;&#039;&#039;index&#039;&#039;&#039; - die Nachkommastelle - (default = 0)&lt;br /&gt;
&lt;br /&gt;
=== Return Value ===&lt;br /&gt;
*Gibt die gerundete Gleitkommazahl zurück&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
==== Standardfälle ====&lt;br /&gt;
 roundCommercial(1.25, 1)    --&amp;gt; 1.3&lt;br /&gt;
 roundCommercial(15.678)     --&amp;gt; 16.0&lt;br /&gt;
 roundCommercial(-4.555, 1)  --&amp;gt; -4.6&lt;br /&gt;
 roundCommercial(3.14149, 3) --&amp;gt; 3.141&lt;br /&gt;
&lt;br /&gt;
 round(6.5)                  --&amp;gt; 7    (kaufmännisches Runden)&lt;br /&gt;
 round(5.5)                  --&amp;gt; 6    (kaufmännisches Runden)&lt;br /&gt;
 round(0.625, 2)             --&amp;gt; 0.63 (kaufmännisches Runden)&lt;br /&gt;
&lt;br /&gt;
=== Hinweise ===&lt;br /&gt;
* Weitere Funktionen zum Thema runden sind [[ceil]], [[floor]], [[round]] und [[rint]].&lt;br /&gt;
* Der Unterschied zu [[round]] besteht darin, dass roundCommercial kaufmännisch rundet.&lt;br /&gt;
* Beim Runden wird nur auf die Stelle direkt nach der Stelle geachtet, auf die gerundet werden soll. Also bei &amp;lt;code&amp;gt;roundCommercial(3.14149,3)&amp;lt;/code&amp;gt; wird nur die vierte Nachkommastelle &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; betrachtet, die fünfte &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; spielt keine Rolle.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Math-Evaluatorfunktion]][[Kategorie:Operator]][[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=RoundCommercial&amp;diff=12775</id>
		<title>RoundCommercial</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=RoundCommercial&amp;diff=12775"/>
		<updated>2026-05-13T11:15:18Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Navigationsvorlage hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navigation/Rundungsfunktionen}}&lt;br /&gt;
&lt;br /&gt;
===Zugehörige Evaluatoren===&lt;br /&gt;
*&#039;&#039;&#039;MathEvaluator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
Die Funktion &#039;&#039;roundCommercial&#039;&#039; rundet eine Gleitkommazahl an der angegebenen Nachkommerstelle, wobei das kaufmännische Rundungsverfahren (round-half-away-from-zero) angewendet wird. Standardmäßig rundet die Funktion auf die nächstgelegene Ganzzahl.&lt;br /&gt;
Die Funktion erwartet eine Gleitkommazahl, die gerundet werden soll, sowie eine optionale Ganzzahl, die die Nachkommastelle angibt auf die gerundet werden soll.&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
 roundCommercial([[Gleitkommazahl]] zahl, [[Ganzzahl]] index)&lt;br /&gt;
&lt;br /&gt;
=== Parameter ===&lt;br /&gt;
* &#039;&#039;&#039;zahl&#039;&#039;&#039; - die zu rundene Zahl&lt;br /&gt;
* &#039;&#039;&#039;index&#039;&#039;&#039; - die Nachkommastelle - (default = 0)&lt;br /&gt;
&lt;br /&gt;
=== Return Value ===&lt;br /&gt;
*Gibt die gerundete Gleitkommazahl zurück&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
==== Standardfälle ====&lt;br /&gt;
 roundCommercial(1.25, 1)   --&amp;gt; returns 1.3&lt;br /&gt;
 &lt;br /&gt;
 roundCommercial(15.678)   --&amp;gt; returns 16.0&lt;br /&gt;
 &lt;br /&gt;
 roundCommercial(-4.555, 1)   --&amp;gt; returns -4.6&lt;br /&gt;
 &lt;br /&gt;
 roundCommercial(3.14149, 3)   --&amp;gt; returns 3.141&lt;br /&gt;
&lt;br /&gt;
=== Hinweise ===&lt;br /&gt;
* Weitere Funktionen zum Thema runden sind [[ceil]], [[floor]], [[round]] und [[rint]].&lt;br /&gt;
* Der Unterschied zu [[round]] besteht darin, dass roundCommercial kaufmännisch rundet.&lt;br /&gt;
* Beim Runden wird nur auf die Stelle direkt nach der Stelle geachtet, auf die gerundet werden soll. Also bei &amp;lt;code&amp;gt;roundCommercial(3.14149,3)&amp;lt;/code&amp;gt; wird nur die vierte Nachkommastelle &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; betrachtet, die fünfte &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; spielt keine Rolle.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Math-Evaluatorfunktion]][[Kategorie:Operator]][[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Vorlage:Navigation/Rundungsfunktionen&amp;diff=12774</id>
		<title>Vorlage:Navigation/Rundungsfunktionen</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Vorlage:Navigation/Rundungsfunktionen&amp;diff=12774"/>
		<updated>2026-05-13T11:14:49Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: RoundCommercial hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{Navigation&lt;br /&gt;
| TITEL  = Rundungsfunktionen&lt;br /&gt;
| INHALT = &lt;br /&gt;
[[Round]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[RoundCommercial]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[Rint]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[Ceil]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[Floor]]&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Navigationsvorlagen|Rundungsfunktionen]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=TracingChecker&amp;diff=12773</id>
		<title>TracingChecker</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=TracingChecker&amp;diff=12773"/>
		<updated>2026-05-06T13:24:01Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Hinweis auf Java-Version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hinweis|Der Checker unterstützt aktuell Programmiercode bis Java 17 inklusive der Standardbibliothek des offiziellen Java 17-JDKs.}}Der TracingChecker führt dynamische Tests auf Java Programmcode aus, die dem Prinzip von Unit-Tests folgen. Es müssen daher die zu prüfenden Dateien (“Source files”) sowie ein Testtreiber (“Test driver”) angegeben werden. Im Eintrag “Classes to trace” kann zudem eine kommaseparierte Liste von Klassennamen angegeben werden, für die während der Testausführung ein Trace erzeugt werden soll. Jeder ausgeführte Programmschritt in diesen Klassen wird dann in den Trace aufgenommen.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel einer Testklasse ===&lt;br /&gt;
&lt;br /&gt;
Die Test-Klasse muss dem Grundgerüst des folgenden Programmcodes folgen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line=&#039;line&#039;&amp;gt;&lt;br /&gt;
import de.uni_due.s3.jack2.backend.checkers.tracingchecker.framework.TracingFramework;&lt;br /&gt;
import de.uni_due.s3.jack2.backend.checkers.tracingchecker.framework.TracingFramework.Test;&lt;br /&gt;
&lt;br /&gt;
public class DemoprojektDynamisch {&lt;br /&gt;
&lt;br /&gt;
    private int punkte = 0;&lt;br /&gt;
&lt;br /&gt;
    public int getResult() {&lt;br /&gt;
        return punkte;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Test(name=&amp;quot;Test 1&amp;quot;)&lt;br /&gt;
    public void test1() {&lt;br /&gt;
&lt;br /&gt;
        Demoprojekt p = new Demoprojekt();&lt;br /&gt;
&lt;br /&gt;
        float faktor1 = p.faktor(&amp;quot;Andre&amp;quot;, 36, 4, 10);&lt;br /&gt;
        float result1 = p.betrag(faktor1, 50000);&lt;br /&gt;
&lt;br /&gt;
        if (result1 &amp;lt; 3207.78f || result1 &amp;gt; 3207.79f){&lt;br /&gt;
            if (faktor1 &amp;lt; 6.41f || faktor1 &amp;gt; 6.42f) {&lt;br /&gt;
                TracingFramework.printError(&amp;quot;Falsches Ergebnis und falscher Faktor!&amp;quot;);&lt;br /&gt;
            } else {&lt;br /&gt;
                TracingFramework.printError(&amp;quot;Falsches Ergebnis, aber richtiger Faktor!&amp;quot;);&lt;br /&gt;
                punkte += 20;&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            punkte += 50;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Test(name=&amp;quot;Test 2&amp;quot;)&lt;br /&gt;
    public void test2() {&lt;br /&gt;
        // ...&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Klasse importiert das Tracing-Framework von JACK, das in der Datei “&#039;&#039;jack-tracing-framework.jar&#039;&#039;” bereitgestellt wird (Zeile 1 und 2). Die einzige Methode, die ein Testtreiber in jedem Fall anbieten muss, ist die Methode &amp;lt;code&amp;gt;getResult()&amp;lt;/code&amp;gt;, die die erreichte Punktzahl von 0 bis 100 Punkten als Ganzzahl zurück gibt (Zeile 8-10). Zusätzlich kann der Testtreiber beliebig viele weitere, beliebig komplexe Methoden enthalten, die mit der Annotation @Test(name=“&amp;lt;Name_des_Testfalls&amp;gt;”) versehen werden (Zeile 12 und 32). Ist vor dem Start des gesamte dynamischen Tests eine einmalige Initialisierung notwendig, kann eine Methode &amp;lt;code&amp;gt;init()&amp;lt;/code&amp;gt; ergänzt werden. Die Deklaration von zusätzlichen Hilfsmethoden und&lt;br /&gt;
beliebigen Feldern ist zulässig. &lt;br /&gt;
&lt;br /&gt;
Die Testmethoden werden in der Reihenfolge abgearbeitet, in der sie im Programmcode deklariert sind. Sie führen Aufrufe auf dem zu testenden Programmcode durch und vergleichen die Rückgaben mit den erwarteten Werten. Zur Erzeugung einer textuellen Rückmeldung an die Studierenden stellt das Tracing-Framework die Methode &amp;lt;code&amp;gt;TracingFramework.printError(“&amp;lt;Meldung&amp;gt;”)&amp;lt;/code&amp;gt; bereit (Zeile 22 und 24). Wird eine solche Zeile erreicht, führt dies im Fehlerbericht von JACK zu einer Ausgabe der Form “Fehler in &amp;lt;Name_des_Testfalls&amp;gt;: &amp;lt;Meldung&amp;gt;”. Die Ausführung der Testmethode wird danach weiter fortgesetzt, d.h. eine Testmethode kann mehrere Meldungen erzeugen. Jede Meldung wird automatisch um einen Trace ergänzt, der die ausgeführten Programmschritte seit dem Start der Testmethode bis zur Erzeugung der Fehlermeldung erhält. Analog zur Erzeugung von Fehlermeldungen steht auch eine Methode &amp;lt;code&amp;gt;TracingFramework.printWarning(“&amp;lt;Meldung&amp;gt;”)&amp;lt;/code&amp;gt; zur Verfügung. Diese erzeugt Ausgaben der Form “Warnung in &amp;lt;Name_des_Testfalls&amp;gt;: &amp;lt;Meldung&amp;gt;”. Treten während der Ausführung eines Testfalls Exceptions im geprüften Programmcode auf, führt dies automatisch zu einer Ausgabe der Form “Fehler in &amp;lt;Name_des_Testfalls&amp;gt;: &amp;lt;Beschreibung_der_Exception&amp;gt;&amp;quot;. In diesem Fall wird die Ausführung der Testmethode abgebrochen und der dynamische Test mit dem Aufruf der nächsten Testmethode fortgesetzt. Auch bei einer Exception wird die Meldung um einen Trace ergänzt. Tritt hingegen eine Exception im Testtreiber auf, führt diese zu einem Abbruch des gesamten dynamischen Tests. Es wird keine Punktzahl vergeben, sondern die Lösung wird stattdessen mit einem “internal error” markiert. Die aufgetretene Exception wird als interne Fehlernachricht ausgegeben.Das Erzeugen der Traces zum Programmablauf führt zu einer signifikant verlängerten Laufzeit für die zu testenden Programme. Um den Server nicht zu lange mit einem einzelnen Test zu blockieren, ist die Erzeugung von Traces daher auf eine Länge von 500 Schritten begrenzt. Das Programm wird nach erreichen dieser Grenze weiter ausgeführt, aber es wird kein Trace mehr dazu aufgezeichnet. Die Traceaufzeichnung kann gezielter gesteuert werden, indem die Aufrufe &amp;lt;code&amp;gt;TracingFramework.switchOffTracing()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;TracingFramework.switchOnTracing()&amp;lt;/code&amp;gt; verwendet werden. Damit kann für Abschnitte eines Testfalls das zeitaufwändige Tracing abgeschaltet und später wieder eingeschaltet werden. Die Ein-/Ausschaltung gilt immer nur pro Testfall. Insbesondere beginnt jeder Testfall standardmäßig mit eingeschaltetem Tracing. &lt;br /&gt;
&lt;br /&gt;
Schreibt der geprüfte Programmcode während der Testausführung Ausgaben auf die Standardausgabe, werden diese unabhängig von den einzelnen Testfällen gespeichert und als zusätzliche Information in der Web-Oberfläche von JACK mit ausgegeben. Eine automatische inhaltliche Auswertung der Ausgaben ist nicht möglich.&lt;br /&gt;
&lt;br /&gt;
[[category:Checker]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=GReQLJavaChecker&amp;diff=12772</id>
		<title>GReQLJavaChecker</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=GReQLJavaChecker&amp;diff=12772"/>
		<updated>2026-05-06T13:23:50Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Hinweis auf Java-Version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Hinweis|Der Checker unterstützt aktuell Programmiercode bis Java 17. Syntaxelemente im eingereichten Code, die darüber hinausgehen, führen zu einem Kompilierungsfehler.}}&lt;br /&gt;
&lt;br /&gt;
Der GReQLJavaChecker ermöglicht statische Checks auf Programmcode und verwendet dazu Abfragen auf dem Syntaxgraphen. Um einen statischen Check mit dem Checker durchzuführen, müssen die zu untersuchenden Dateien in der Liste &amp;quot;Source Files&amp;quot; ausgewählt werden und eine einzelne Datei mit Prüfregeln (&amp;quot;Rule File&amp;quot;) angegeben werden. Die Regeln werden in dieser Datei im XML-Format organisiert und verwenden die Sprache GReQL für Abfragen auf dem Syntaxbaum.&lt;br /&gt;
&lt;br /&gt;
=== Beispiele und Eigenschaften von Regeln ===&lt;br /&gt;
Als erstes Element im XML Dokument muss &amp;lt;checkerrules&amp;gt; stehen, entsprechend muss &amp;lt;/checkerrules&amp;gt; als letztes Element in dem XML Dokument sein.&lt;br /&gt;
&lt;br /&gt;
Zwei beispielhafte Abfragen in dieser Sprache sehen so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line=&#039;line&#039;&amp;gt;&lt;br /&gt;
 &amp;lt;rule type=&amp;quot;absence&amp;quot; points=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;query&amp;gt;from u : V{CompilationUnit}, x : V{WhileStatement} with&lt;br /&gt;
             not isEmpty(u --&amp;gt;* x --&amp;gt;{WhileStatementBody}&amp;amp;amp;{EmptyStatement}) or&lt;br /&gt;
             (not isEmpty(u --&amp;gt;* x --&amp;gt;{WhileStatementBody}&amp;amp;amp;{Block}) and&lt;br /&gt;
             isEmpty(u --&amp;gt;* x --&amp;gt;{WhileStatementBody}&amp;amp;amp;{Block} --&amp;gt;{Child}))&lt;br /&gt;
          report u.name as &amp;quot;name&amp;quot;, x.line as &amp;quot;line&amp;quot; end&amp;lt;/query&amp;gt;&lt;br /&gt;
    &amp;lt;feedback&amp;gt;In der Datei {name} besteht die while-Schleife in Zeile {line} nur aus einer&lt;br /&gt;
             Abbruchbedingung und ist dadurch sinnlos.&amp;lt;/feedback&amp;gt;&lt;br /&gt;
 &amp;lt;/rule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line=&#039;line&#039;&amp;gt;&lt;br /&gt;
 &amp;lt;rule type=&amp;quot;presence&amp;quot; points=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;query&amp;gt;from t : V{TypeDeclaration}, m : V{MethodDeclaration} with&lt;br /&gt;
             t.name=&amp;quot;Miniprojekt2&amp;quot; and&lt;br /&gt;
             t --&amp;gt;{TypeDeclarationBodyDeclarations2} m and&lt;br /&gt;
             hasSignature(m, &amp;quot;public static String geometrie1(int)&amp;quot;)&lt;br /&gt;
          report 0 end&amp;lt;/query&amp;gt;&lt;br /&gt;
   &amp;lt;feedback prefix=&amp;quot;Signaturcheck&amp;quot;&amp;gt;Die Methode &amp;quot;public static String geometrie1(int laenge)&amp;quot; in&lt;br /&gt;
             der Klasse &amp;quot;Miniprojekt2&amp;quot; fehlt. Hast du die vorgegebene Methodensignatur veraendert?&amp;lt;/feedback&amp;gt;&lt;br /&gt;
 &amp;lt;/rule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die obere Regel ist vom Typ &amp;quot;absence&amp;quot;, d.h. sie definiert einen Codestruktur, die nicht in der untersuchten Lösung vorkommen soll. Als Abfrage wird eine Struktur aus Elementen des Syntaxbaums definiert. Als Meldung wird ein String definiert, der zur Fehlerliste hinzugefügt wird, wenn die in der Abfrage definierte Struktur gefunden wird. Dabei dienen {name} und {line} als Platzhalter für Werte, die in der Abfrage in der report-Klausel ausgegeben wurden. Die zweite Regel ist vom Typ &amp;quot;presence&amp;quot; und definiert folglich eine Codestruktur, die in der untersuchten Lösung vorkommen soll. D.h., in diesem Fall wird die definierte Fehlermeldung ausgegeben, wenn die in der Abfrage definierte Struktur nicht auftritt. Folglich können in dieser Regel auch keine Platzhalter in der Ausgabe verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;amp;rarr; Details zu den verwendeten GReQL-Bezeichnern:&#039;&#039; [[GReQL-Typegraph für Java]]&lt;br /&gt;
&lt;br /&gt;
Die Funktion &amp;lt;code&amp;gt;hasSignature&amp;lt;/code&amp;gt; ist eine spezielle, von JACK bereitgestellte Erweiterung der GReQL-Syntax, die eine bequeme Überprüfung von Methodensignaturen ermöglicht. Wie im Beispiel dargestellt, braucht die übergebene Zeichenkette keine vollständige Methodensignatur zu sein, sondern es reicht die Angabe der zu überprüfenden Bestandteile. D.h., Namen der Methodenparameter können ebenso entfallen wie Modifier oder der Rückgabetyp. Es ist allerdings nicht möglich, nur Modifier anzugeben und keinen Rückgabetyp.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;amp;rarr; Weitere Beispiele:&#039;&#039; [[GReQL Regeln]]&lt;br /&gt;
&lt;br /&gt;
=== Auswertung eines Regelsatzes ===&lt;br /&gt;
Bei der Durchführung des statischen Checks wird zunächst der abstrakte Syntaxgraph der abgegebenen Lösung erzeugt und anschließend alle Regeln angewendet. Alle erzeugten Fehlernachrichten werden als Ausgabe des statischen Tests gesammelt. Die vergebene Punktzahl ergibt sich aus den Punkten der einzelnen Regeln, wobei die Gesamtsumme der Punkte in der Regeldatei stets auf 100 normiert wird. D.h., im oben gezeigten Beispiel erhält eine korrekte Lösung 100 Punkte, während eine Lösung, die die erste Regel verletzt, nur 67 Punkte erhält. Tritt während des Checks ein technischer Fehler auf, wird der Check abgebrochen und die Lösung mit einem &amp;quot;internal error&amp;quot; als fehlerhaft markiert.&lt;br /&gt;
&lt;br /&gt;
=== Versionsunterschiede ===&lt;br /&gt;
Je nach eingesetzter Checker-Version müssen einige Abfragen zur Code-Struktur leicht unterschiedlich formuliert werden. Dies betrifft insbesondere die beiden Checker-Versionen, die in JACK 2 und JACK 3 zum Einsatz kommen.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Art der Änderung !! Alt (insb. JACK 2) !! Neu (insb. JACK 3 und Moodle-Plugin)&lt;br /&gt;
|-&lt;br /&gt;
| Geänderter Kantentyp || &amp;lt;code&amp;gt;TypeDeclarationBodyDeclarations2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;TypeDeclarationBodyDeclarations1&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Geänderter Kantentyp || &amp;lt;code&amp;gt;TypeDeclarationSuperclassType2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;TypeDeclarationSuperclassType&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Geänderter Kantentyp || &amp;lt;code&amp;gt;ParameterizedTypeTypeArguments1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;ParameterizedTypeTypeArguments2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;ParameterizedTypeTypeArguments&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Geänderter Kantentyp || &amp;lt;code&amp;gt;TypeDeclarationSuperInterfaceTypes1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;TypeDeclarationSuperInterfaceTypes2&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;TypeDeclarationSuperInterfaceTypes&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Erweiterte Funktion || Die Funktion &amp;lt;code&amp;gt;hasSignature&amp;lt;/code&amp;gt; kann nicht auf geworfene Exceptions prüfen || Die Prüfung ist möglich&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
[[index.php?title=Medium:GReQL-Referencecard.pdf|GReQL-Referencecard]]&lt;br /&gt;
&lt;br /&gt;
[[category:Checker]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Dynamischer_Python_Checker_(JACK3)&amp;diff=12751</id>
		<title>Dynamischer Python Checker (JACK3)</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Dynamischer_Python_Checker_(JACK3)&amp;diff=12751"/>
		<updated>2026-04-28T06:40:58Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Anleitung für statische Tests hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der [[Python (JACK3)|Aufgabentyp Python]] lässt sich automatisiert bewerten, indem Testfälle ausgeführt werden. Diese können z.&amp;amp;nbsp;B. einen erwarteter Wert mit dem tatsächlichen Wert vergleichen. Der Python-Checker von JACK3 kann nicht nur Punktzahlen und Feedback zurückgeben, sondern auch Traces aufzeichnen (welche Zeilen ausgeführt wurden und wie die Variablenbelegung beim Testfall war). Es lassen sich beliebig komplexe Testfälle und auch zufallsbasierte Tests schreiben sowie passgenaues Feedback, programmiert in Python, erzeugen. &lt;br /&gt;
&lt;br /&gt;
{{Hinweis|In diesem Artikel werden [https://docs.python.org/3/tutorial/index.html grundlegende Python-Kenntnisse] vorausgesetzt.}}&lt;br /&gt;
&lt;br /&gt;
Der Checker arbeitet auf Python 3.11. Aktuell ist es nicht möglich, eigene Module zum Check hinzuzufügen oder Pakete aus dem Python Package Index (PyPI) (über &amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt;) zu laden. Das Paket [https://pandas.pydata.org/docs/user_guide/index.html pandas] ist vorinstalliert und kann durch den Testtreiber geladen werden, ansonsten sind ausschließlich Pakete der [https://docs.python.org/3.11/library/index.html Python-Standardbibliothek] nutzbar. &lt;br /&gt;
&lt;br /&gt;
== Unterstützte Aufgabenstellungen ==&lt;br /&gt;
Der dynamische Python-Checker ist darauf ausgelegt, Funktionsaufrufe aufzuzeichnen und ihre Rückgabewerte zu prüfen. Dies funktioniert am besten mit folgenden Aufgabenstellungen:&lt;br /&gt;
&lt;br /&gt;
* Schreiben Sie eine parameterlose Funktion, die ... zurückgibt.&lt;br /&gt;
* Schreiben Sie eine Funktion, die ... erwartet und ... zurückgibt.&lt;br /&gt;
* Schreiben Sie eine Funktion mit x Parametern, die mit dem ersten Parameter ... macht. (Um die Funktion zu prüfen, muss der Typ des ersten Parameters mutierbar sein, z.&amp;amp;nbsp;B. eine Liste.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel&#039;&#039;&#039;: &#039;&#039;Definieren Sie eine Funktion add. Die Funktion soll zwei Parameter entgegennehmen und das Ergebnis der Addition zurückgeben.&#039;&#039; Die erwartete Musterlösung für diesen Fall wäre:&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def add(a, b):&lt;br /&gt;
  return a + b&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Testfälle (s.u.) können diese Funktion dann mit verschiedenen Werten aufrufen und das Ergebnis prüfen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Statische Tests &amp;amp; Codeanalyse&#039;&#039;&#039;: Derzeit gibt es für Python keinen statischen (GReQL-)Checker. Der eingereichte Code kann allerdings indirekt auf Syntaxelemente überprüft werden, indem er händisch geparst wird. Hierzu können die Python-Bordmittel, insbesondere das [https://docs.python.org/3.11/library/ast.html AST (Abstract Syntax Trees)]-Modul für Syntaxbäume genutzt werden.&lt;br /&gt;
&lt;br /&gt;
==Testtreiber für den Checker==&lt;br /&gt;
Grundsätzlich ist ein Testtreiber ein einzelnes Modul mit einer oder mehreren [https://docs.python.org/3.11/tutorial/controlflow.html#defining-functions parameterlosen Funktionen] (&#039;&#039;&#039;Testfälle&#039;&#039;&#039;), die nacheinander ausgeführt werden. In der Regel importiert der Testtreiber dabei das Modul mit dem eingereichten (zu testenden) Code. Dessen Name [[Python (JACK3)|wird im UI als &amp;quot;Modul-Pfad für studentischen Code&amp;quot;]] festgelegt.&lt;br /&gt;
&lt;br /&gt;
Damit die Traces der Testfälle korrekt aufgezeichnet werden, wird jeder Testfall mit dem [https://book.pythontips.com/en/latest/decorators.html Decorator] &amp;lt;code&amp;gt;decorator&amp;lt;/code&amp;gt; aus dem vorgegebenen &amp;lt;code&amp;gt;Communicator&amp;lt;/code&amp;gt;-Modul gekennzeichnet. Der folgende Code zeigt ein Beispiel mit zwei Testfällen, jeweils ohne Inhalt:&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import Communicator&lt;br /&gt;
import Trace&lt;br /&gt;
import studentcode as s&lt;br /&gt;
&lt;br /&gt;
@Communicator.decorator&lt;br /&gt;
def testcase1():&lt;br /&gt;
  # TODO so something with s ...&lt;br /&gt;
  pass&lt;br /&gt;
&lt;br /&gt;
@Communicator.decorator&lt;br /&gt;
def testcase2():&lt;br /&gt;
  # TODO so something with s ...&lt;br /&gt;
  pass&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    print(&#039;Running test case 1...&#039;)&lt;br /&gt;
    testcase1()&lt;br /&gt;
    print(&#039;Running test case 2 ...&#039;)&lt;br /&gt;
    testcase2()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===API zum Zurückmelden von Ergebnissen ===&lt;br /&gt;
Innerhalb eines Testfalls werden Ergebnisse über das Modul &amp;lt;code&amp;gt;Trace&amp;lt;/code&amp;gt; zurückgeliefert. Dieses Modul sammelt alle Punktzahlen und Feedback auf und berichtet diese am Ende der Ausführung. Es bietet folgende Funktion:&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def printResult(result: int, feedback: str = None):&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  Reports a result.&lt;br /&gt;
&lt;br /&gt;
  :param result: Points which are reported. Must be between 0 and 100 (both inclusive).&lt;br /&gt;
  :param feedback: Optional Feedback presented to the user.&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  pass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;{{Wichtig|In jedem Testfall muss &amp;lt;code&amp;gt;printResult&amp;lt;/code&amp;gt; genau ein Mal tatsächlich aufgerufen werden!}}&lt;br /&gt;
&lt;br /&gt;
===Schreiben von Testfällen===&lt;br /&gt;
Der Checker nutzt für das Tracing eine spezielle Kontrollflussanalyse, basierend auf Pythons [https://docs.python.org/3.11/reference/simple_stmts.html#the-assert-statement &amp;lt;code&amp;gt;assert&amp;lt;/code&amp;gt;-Schlüsselwort] und Exceptions. Mit &amp;lt;code&amp;gt;assert&amp;lt;/code&amp;gt; lassen sich Ausdrücke testen, die resultierende Exception lässt sich anschließend fangen und in Feedback umwandeln.&lt;br /&gt;
&lt;br /&gt;
Ein möglicher Testfall 1 für das obige Beispiel wäre dementsprechend:&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
@Communicator.decorator&lt;br /&gt;
def testcase1():&lt;br /&gt;
  try:&lt;br /&gt;
    # Berechnen des Ergebnisses mit dem &amp;quot;studentcode&amp;quot;:&lt;br /&gt;
    result = s.add(1, 0)&lt;br /&gt;
    # zu prüfender Ausdruck:&lt;br /&gt;
    assert result == 1&lt;br /&gt;
&lt;br /&gt;
    # Bei Erfolg: +25 Punkte&lt;br /&gt;
    Trace.printResult(25)&lt;br /&gt;
  except Exception:&lt;br /&gt;
    # Bei Misserfolg: +0 Punkte mit Feedback-Nachricht&lt;br /&gt;
    Trace.printResult(0, f&amp;quot;Erwartete Summe: 1, tatsächlich: {result}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Das Tracing reagiert auf alle Arten von Exceptions und zeigt im Falle eines &amp;lt;code&amp;gt;AssertionError&amp;lt;/code&amp;gt;s (entweder händisch geworfen oder über &amp;lt;code&amp;gt;assert&amp;lt;/code&amp;gt;) eine generische Fehlermeldung an, die mitteilt, dass der Testfall nicht bestanden wurde, sofern kein benutzerdefiniertes Feedback (zweiter Parameter von &amp;lt;code&amp;gt;printResult&amp;lt;/code&amp;gt;) vorgegeben wurde. Zusätzlich wird die Variablenbelegung angezeigt und die ausgeführten Zeilen.&lt;br /&gt;
&lt;br /&gt;
Pro Testtreiber werden die Punkte aller Testfälle aufsummiert. Bei einer gleichen Gewichtung von vier Testfällen wird jeder Testfall also 25 Punkte im Erfolg zurückmelden. Die summierten Punkte müssen zwischen 0 und 100 (jeweils inklusiv) liegen.&lt;br /&gt;
&lt;br /&gt;
In Situationen, bei denen die Punktevergabe von anderen Testfällen abhängig ist (z.&amp;amp;nbsp;B. wenn ausschließlich Punkte vergeben werden sollen, wenn statische Checks erfolgreich waren), kann diese Logik auch in einem einzigen Testfall untergebracht werden. Punktzahl und (ggf. konkatenierte) Feedback(s) müssen dann entsprechend vom Testfall zusammengesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Statische Tests===&lt;br /&gt;
Mithilfe des [https://docs.python.org/3.11/library/ast.html AST]-Moduls kann der eingereichte Code in einen Syntaxbaum geparst werden. Dieser Syntaxbaum lässt sich mithilfe von Python-Code prüfen. Der folgende Testfall prüft beispielsweise, ob im eingereichten Code Importe enthalten sind:&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import Communicator&lt;br /&gt;
import Trace&lt;br /&gt;
import studentcode&lt;br /&gt;
import math&lt;br /&gt;
import ast&lt;br /&gt;
&lt;br /&gt;
@Communicator.decorator&lt;br /&gt;
def static_check():&lt;br /&gt;
  # Parsen in Syntaxbaum&lt;br /&gt;
  with open(studentcode.__file__, mode=&amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
    source_code = f.read()&lt;br /&gt;
  tree = ast.parse(source_code)&lt;br /&gt;
&lt;br /&gt;
  # Über Syntaxbaum iterieren und Importe suchen&lt;br /&gt;
  import_detected = None&lt;br /&gt;
  for node in ast.walk(tree):&lt;br /&gt;
    if isinstance(node, (ast.Import, ast.ImportFrom)):&lt;br /&gt;
      import_detected = node.lineno&lt;br /&gt;
      print(f&amp;quot;Import in line {import_detected}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  # Feedback erzeugen&lt;br /&gt;
  error_feedback = None&lt;br /&gt;
  if import_detected is not None:&lt;br /&gt;
    error_feedback = f&amp;quot;In Zeile {import_detected} wurde ein Import erkannt. Die Lösung sollte ohne Importe auskommen.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  # Rückmeldung&lt;br /&gt;
  try:&lt;br /&gt;
    assert (error_feedback is None)&lt;br /&gt;
    Trace.printResult(40) # Statischer Test bestanden&lt;br /&gt;
  except Exception:&lt;br /&gt;
    Trace.printResult(0, error_feedback) # Statischer Test nicht bestanden&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    static_check()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Dieser Test könnte beliebig erweitert werden, z.&amp;amp;nbsp;B. for-/while-Schleifen suchen oder Rekursion prüfen, indem Funktionsaufrufe auf eine bestimmte Funktion gesucht werden. Es ist wichtig, dass Aufrufe von &amp;lt;code&amp;gt;ast.walk&amp;lt;/code&amp;gt; nicht ineinander verschachtelt werden – stattdessen sollten Elemente, über die ein zweites Mal iteriert werden soll, zwischengespeichert werden.&lt;br /&gt;
&lt;br /&gt;
==Ressourcen==&lt;br /&gt;
Um das Entwickeln von Testfällen zu vereinfachen, haben wir einen Dummy gebaut, der die Funktion des Checkers simuliert. [[Medium:Tracing-Python-Checker-Dummy.zip|Den Dummy können Sie hier herunterladen.]] Folgende Dateien sind enthalten:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;Trace.py&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;Communicator.py&amp;lt;/code&amp;gt; simulieren die Funktion des Checkers.&lt;br /&gt;
*&amp;lt;code&amp;gt;testdriver.py&amp;lt;/code&amp;gt; enthält vier Testfälle aus dem Beispiel oben und kann beliebig angepasst werden.&lt;br /&gt;
*&amp;lt;code&amp;gt;studentcode.py&amp;lt;/code&amp;gt; enthält eine studentische Einreichung mit einem &amp;quot;Fehler&amp;quot;, bei dem einer der Testfälle nicht bestanden wird.&lt;br /&gt;
*&amp;lt;code&amp;gt;run.py&amp;lt;/code&amp;gt; ist ein Skript, das den Testtreiber ausführt und ausgibt, wie viele Punkte die Lösung ergeben würde.&lt;br /&gt;
&lt;br /&gt;
Der Dummy kann mit dem Befehl &amp;lt;code&amp;gt;python run.py&amp;lt;/code&amp;gt; ausgeführt werden (auf Linux-Systemen kann der Befehl auch &amp;lt;code&amp;gt;python3&amp;lt;/code&amp;gt; lauten, auf Windows auch &amp;lt;code&amp;gt;py&amp;lt;/code&amp;gt;).&lt;br /&gt;
{{Hinweis|Der Dummy arbeitet nicht exakt wie der Checker. Es gibt keine Garantie, dass Testtreiber, die mit dem Dummy funktionieren, auch genau so in JACK funktionieren. Testen Sie die Aufgabe deshalb immer auch in JACK!}}&lt;br /&gt;
[[Kategorie:Benutzerhandbuch]]&lt;br /&gt;
[[Kategorie:Checker]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Python_(JACK3)&amp;diff=12750</id>
		<title>Python (JACK3)</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Python_(JACK3)&amp;diff=12750"/>
		<updated>2026-04-27T12:15:09Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Schnellverweis zum Checker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Siehe auch: [[Dynamischer Python Checker (JACK3)]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Aufgabeninhalt===&lt;br /&gt;
In dem Bereich Aufgabeninhalt wird der Aufgabentext erstellt und spezifische Eingaben für den jeweiligen Aufgabenteil gemacht.&lt;br /&gt;
[[File:Aufgabentext.jpg|center|thumb|800px|Editor für den Aufgabentext]]&lt;br /&gt;
* &#039;&#039;&#039;Titel:&#039;&#039;&#039; Hier kann optional der Name des Aufgabenteils eingetragen werden.&lt;br /&gt;
* &#039;&#039;&#039;Aufgabentext:&#039;&#039;&#039; Im Aufgabentext steht die Aufgabenstellung. Der Editor für den Aufgabetext lässt sich öffnen in dem man reinklickt. In dem Fließtext kann Latex-Code verwendet werden, indem man diesen mit $-Zeichen einspannt. Der Editor bietet einige Formatierungen an wie z.B. fett, kursiv und unterstrichen. Einfache Tabellen können auch mithilfe des Editors erstellt werden. Wenn man den Button &#039;&#039;source code&#039;&#039; [[File:Icon-source_code.jpg|35px]] verwendet kann man HTML-Code nutzen. Über den Button &#039;&#039;&#039;Ressource Einfügen&#039;&#039;&#039; lässt sich ein hochgeladenes Bild oder ein Link in den Aufgabentext einfügen.&lt;br /&gt;
&lt;br /&gt;
===Feedback===&lt;br /&gt;
* &#039;&#039;&#039;Gewichtung des Aufgabenteils:&#039;&#039;&#039; Gewichtung der Punktzahl eines Aufgabenteils innerhalb der Aufgabe.&lt;br /&gt;
* &#039;&#039;&#039;Verhalten bei internen Fehlern während der Überprüfung:&#039;&#039;&#039; Während der Überprüfung der studentischen Lösung können Fehler auftreten. Hier muss angegeben werden ob die &#039;&#039;&#039;Bearbeitung markiert und abgebrochen&#039;&#039;&#039; wird oder ob eine &#039;&#039;&#039;Nachricht ausgegeben und Bearbeitung fortgesetzt&#039;&#039;&#039; wird.&lt;br /&gt;
* &#039;&#039;&#039;Bewertungsverfahren:&#039;&#039;&#039; Hier lassen sich Checks definieren, die den eingereichten Code automatisch prüfen. Aktuell ist nur der [[Dynamischer Python Checker (JACK3)|&#039;&#039;&#039;dynamische Python Checker&#039;&#039;&#039;]] verfügbar. Dieser führt Testfälle aus und zeichnet Traces auf.&lt;br /&gt;
** &#039;&#039;&#039;Gewichtung dieses Checks:&#039;&#039;&#039; Ein Python-Aufgabenteil kann mehrere Checks haben. Die Ergebnisse der Checks können unterschiedlich stark in der Gesamtbewertung einfließen.&lt;br /&gt;
** &#039;&#039;&#039;Timeout:&#039;&#039;&#039; Nach wie vielen Sekunden ein Check abbrechen soll.&lt;br /&gt;
** &#039;&#039;&#039;Module-Pfad für den studentischen Code:&#039;&#039;&#039; Name des Python-Moduls, das den eingereichten Code enthält. Diese Information muss beim Schreiben des Testtreibers berücksichtigt werden, um den passenden Import zu wählen. Dieses Feld muss ausgefüllt werden.&lt;br /&gt;
** Unter dem Modul-Pfad wird der &#039;&#039;&#039;Testtreiber&#039;&#039;&#039; für den dynamischen Test geschrieben. Siehe [[Dynamischer Python Checker (JACK3)]] für weitere Informationen.&lt;br /&gt;
* &#039;&#039;&#039;Feedback beim Überspringen:&#039;&#039;&#039; Der Lehrende kann jeden Python Aufgabenteil zum Überspringen anbieten. Dazu muss zunächst der Haken gesetzt werden. Danach gibt es noch die Möglichkeit einen Text den Lernenden anzuzeigen, wenn dieser diesen Aufgabenteil übersprungen hat. Den Text kann man durch Klicken in das Textfeld oder über das Icon [[File:Icon-Pencil.jpg|22px]] hinzufügen.&lt;br /&gt;
[[File:Python_Checker.JPG|center|thumb|800px|Einstellungen eines dynamischen Python-Checks]]&lt;br /&gt;
&lt;br /&gt;
{{JACK3:Hinweise}}&lt;br /&gt;
&lt;br /&gt;
===Verknüpfungen===&lt;br /&gt;
* &#039;&#039;&#039;Nächster Aufgabenteil (Standard):&#039;&#039;&#039; In dem Drop-Down Feld wird der nächste Zustand ausgewählt, in die die Aufgabe sein soll, wenn der Lernende eine Lösung eingereicht hat. Dieses wird immer dann durchgeführt, wenn keine andere Aktion zutrifft. Es gibt die folgenden Möglichkeiten: &lt;br /&gt;
** &#039;&#039;&#039;Nächster oder Ende:&#039;&#039;&#039; Dies ist die default Einstellung. Nach der studentischen Einreichung dieses Aufgabenteils wird der nächste Aufgabenteil in der Reihe angezeigt. Wenn dies der letzte Aufgabenteil dieser Aufgabe ist, ist die Aufgabe beendet. &lt;br /&gt;
** &#039;&#039;&#039;Ende der Aufgabe:&#039;&#039;&#039; Die Aufgabe ist mit der Aktion des Lernenden beendet.&lt;br /&gt;
** &#039;&#039;&#039;Aufgabenteil wiederholen:&#039;&#039;&#039; Der Aufgabenteil wird wiederholt. Der Lernende kann ein weiteres Ergebnis einreichen. Diese Aktion kann man z.B. bei Übungsaufgaben benutzen, wenn der Lernende eine Aufgabe solange wiederholen soll, bis das richtige Ergebnis eingereicht wurde.&lt;br /&gt;
** &#039;&#039;&#039;#x (x ist dabei ein beliebiger Aufgabenteil dieser Aufgabe):&#039;&#039;&#039; Der entsprechende Aufgabenteil wird als nächstes angezeigt. Wenn man die Aufgabenteilnummer des aktuellen Aufgabenteils wählt wird dieser Aufgabenteil neu aufgerufen.&lt;br /&gt;
* &#039;&#039;&#039;Nicht auf Feedback warten und sofort zum nächsten Aufgabenteil weiterschalten:&#039;&#039;&#039; Da Python-Checks je nach Anzahl der Testfälle und ihrer Komplexität länger dauern können, besteht die Möglichkeit, das Warten auf die Ergebnisse zu überspringen.&lt;br /&gt;
[[File:Verknuepfung_Java.JPG|center|thumb|800px|Verknüpfung mit anderen Aufgabenteilen]]&lt;br /&gt;
* &#039;&#039;&#039;Weitere nächste Aufgabenteile (optional):&#039;&#039;&#039; Hier kann die nächste Aktion dynamisch eingestellt werden, d.h. sie kann abhängig von der Variablen Konstelation sein oder von der Eingabe des Lernenden.&lt;br /&gt;
* &#039;&#039;&#039;Nächster Aufgabenteil beim Überspringen (optional):&#039;&#039;&#039; Hier wird eingestellt welcher nächste Aufgabenteil angezeigt werden soll, wenn der Lernende den Aufgabenteil übersprungen hat. Diese Einstellungsmöglichkeit steht nur zur Verfügung, wenn der Haken im Tab Feedback fürs Überspringen gesetzt wurde.&lt;br /&gt;
&lt;br /&gt;
{{JACK3:Variablenupdates}}&lt;br /&gt;
&lt;br /&gt;
{{JACK3:Dateien für Studierende}}&lt;br /&gt;
&lt;br /&gt;
=== Variablen ===&lt;br /&gt;
Die folgenden [[Variablen (JACK3)|JACK-Variablen]] stehen für diesen Aufgabentyp zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[input=code]&amp;lt;/code&amp;gt;|| Der eingereichte Python-Code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[category:Benutzerhandbuch]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Formeleditor_Paletten_(JACK3)&amp;diff=12749</id>
		<title>Formeleditor Paletten (JACK3)</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Formeleditor_Paletten_(JACK3)&amp;diff=12749"/>
		<updated>2026-04-07T08:40:02Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: LaTeX korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die verschiedenen Paletten des [[Formeleditor (JACK3)|JACK3-Formeleditors]] sind in allen [[Fill-In (JACK3)|Fill-In Aufgaben]] einsetzbar. Hier werden die einzelnen Varianten charakterisiert.&lt;br /&gt;
&lt;br /&gt;
== Mathematik-Paletten ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name!!Formeleditor!!Inhalt&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Ohne (Mathematik)&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
| Es wird keine Palette angezeigt. Eingegebene Formeln werden aber automatisch in die Anzeigeform des Formeleditors umgewandelt.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Einfach&#039;&#039;&#039;|| style=&amp;quot;width: 60%&amp;quot; |&amp;lt;center&amp;gt;[[File:Formeleditor-Basic.jpg|130px]]&amp;lt;/center&amp;gt;||&lt;br /&gt;
*Wurzeln&lt;br /&gt;
*Brüche&lt;br /&gt;
*Potenzen&lt;br /&gt;
*Beträge&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Standard&#039;&#039;&#039;||&amp;lt;center&amp;gt;[[File:Formeleditor-Palette.jpg|400px]]&amp;lt;/center&amp;gt;||&lt;br /&gt;
*Vergleichsoperationen&lt;br /&gt;
*\(\pi\), \(e^{1}\), \(i\) und \(\infty\)&lt;br /&gt;
*Division, Potenzen, Beträge, Fakultät und \(e^{x}\)&lt;br /&gt;
*trigonometrische Funktionen &#039;&#039;Sinus&#039;&#039;, &#039;&#039;Kosinus&#039;&#039; und &#039;&#039;Tangens&#039;&#039;&lt;br /&gt;
*Logarithmen&lt;br /&gt;
*Wurzeln&lt;br /&gt;
*Integrale&lt;br /&gt;
*Summen-und Produktzeichen&lt;br /&gt;
*Determinante&lt;br /&gt;
*Vektoren und Matrizen&lt;br /&gt;
*Intervalle&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Vollständig&#039;&#039;&#039;||&amp;lt;center&amp;gt;[[File:Formeleditor-PaletteFull1.jpg|350px]][[File:Formeleditor-PaletteFull2.jpg|350px]]&amp;lt;/center&amp;gt;||&lt;br /&gt;
*Vergleichsoperationen&lt;br /&gt;
*\(\pi\), \(e^{1}\), \(i\) und \(\infty\)&lt;br /&gt;
*Division, Potenzen, Beträge, Fakultät und \(e^{x}\)&lt;br /&gt;
*trigonometrische Funktionen &#039;&#039;Sinus&#039;&#039;, &#039;&#039;Kosinus&#039;&#039; und &#039;&#039;Tangens&#039;&#039;&lt;br /&gt;
*Logarithmen&lt;br /&gt;
*Wurzeln&lt;br /&gt;
*Integrale&lt;br /&gt;
*Limes&lt;br /&gt;
*Summen-und Produktzeichen&lt;br /&gt;
*Determinante&lt;br /&gt;
*Vektoren und Matrizen&lt;br /&gt;
*sämtliche trigonometrische Funktionen&lt;br /&gt;
*Intervalle&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;UDE Mathematikdidaktik&#039;&#039;&#039;||&amp;lt;center&amp;gt;[[File:Formeleditor UdeMathDidactics1.jpg|300px]] [[File:Formeleditor UdeMathDidactics2.jpg|300px]]&amp;lt;/center&amp;gt; &amp;lt;center&amp;gt;[[File:Formeleditor UdeMathDidactics3.jpg|300px]] [[File:Formeleditor UdeMathDidactics4.jpg|300px]]&amp;lt;/center&amp;gt;||&lt;br /&gt;
*Grundrechenarten&lt;br /&gt;
*Vergleichsoperatoren&lt;br /&gt;
*Brüche&lt;br /&gt;
*Potenzen&lt;br /&gt;
*Wurzeln&lt;br /&gt;
*Betrag&lt;br /&gt;
* Summen- und Produktformel&lt;br /&gt;
* Fakultät&lt;br /&gt;
*Mengen&lt;br /&gt;
*Durchschnitt&lt;br /&gt;
*Vereinigung&lt;br /&gt;
*Differenz&lt;br /&gt;
*leere Menge&lt;br /&gt;
*Intervalle&lt;br /&gt;
*Exponentialfunktion&lt;br /&gt;
*Logarithmusfunktionen&lt;br /&gt;
*\(\pi\)&lt;br /&gt;
*\(i\)&lt;br /&gt;
*\(\infty\)&lt;br /&gt;
* Vektoren&lt;br /&gt;
*Matrizen&lt;br /&gt;
*Determinante&lt;br /&gt;
*trigonometrische Funktionen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Chemie-Paletten ==&lt;br /&gt;
&lt;br /&gt;
Die Eingabemöglichkeiten im Chemie-Formeleditor sind wie folgt:&lt;br /&gt;
&lt;br /&gt;
* Durch Tippen von Großbuchstaben (optional gefolgt von einem Kleinbuchstaben) können Atome angegeben werden, beispielsweise \(H\) (Wasserstoff) oder \(Li\) (Lithium).&lt;br /&gt;
* Durch &amp;lt;code&amp;gt;Shift + Pfeil unten&amp;lt;/code&amp;gt; kann die Anzahl der Atome in einem Molekül erreicht werden, beispielsweise \(H_{2}\).&lt;br /&gt;
* Durch &amp;lt;code&amp;gt;Shift + Pfeil oben&amp;lt;/code&amp;gt; kann die Ladung des Moleküls angegeben werden, beispielsweise \(Ca^{2+}\).&lt;br /&gt;
* Operatoren &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; stehen zur Verfügung.&lt;br /&gt;
* Ganzzahlen können verwendet werden&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name!!Formeleditor!!Inhalt&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Ohne (Chemie)&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|Es wird keine Palette angezeigt. Eingegebene Reaktionsgleichungen werden aber automatisch umgewandelt.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Reaktionsgleichung&#039;&#039;&#039;||&amp;lt;center&amp;gt;[[File:Formeleditor-PaletteChemicalReactionEquation.jpg|130px]] ||Ermöglicht die Eingabe von Reaktionsgleichungen und Molekülen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[category:Benutzerhandbuch]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Formeleditor_Paletten_(JACK3)&amp;diff=12748</id>
		<title>Formeleditor Paletten (JACK3)</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Formeleditor_Paletten_(JACK3)&amp;diff=12748"/>
		<updated>2026-04-07T08:39:09Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Aktualisierung der Palettennamen; Ergänzungen zum Chemie-Formeleditor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die verschiedenen Paletten des [[Formeleditor (JACK3)|JACK3-Formeleditors]] sind in allen [[Fill-In (JACK3)|Fill-In Aufgaben]] einsetzbar. Hier werden die einzelnen Varianten charakterisiert.&lt;br /&gt;
&lt;br /&gt;
== Mathematik-Paletten ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name!!Formeleditor!!Inhalt&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Ohne (Mathematik)&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
| Es wird keine Palette angezeigt. Eingegebene Formeln werden aber automatisch in die Anzeigeform des Formeleditors umgewandelt.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Einfach&#039;&#039;&#039;|| style=&amp;quot;width: 60%&amp;quot; |&amp;lt;center&amp;gt;[[File:Formeleditor-Basic.jpg|130px]]&amp;lt;/center&amp;gt;||&lt;br /&gt;
*Wurzeln&lt;br /&gt;
*Brüche&lt;br /&gt;
*Potenzen&lt;br /&gt;
*Beträge&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Standard&#039;&#039;&#039;||&amp;lt;center&amp;gt;[[File:Formeleditor-Palette.jpg|400px]]&amp;lt;/center&amp;gt;||&lt;br /&gt;
*Vergleichsoperationen&lt;br /&gt;
*\(\pi\), \(e^{1}\), \(i\) und \(\infty\)&lt;br /&gt;
*Division, Potenzen, Beträge, Fakultät und \(e^{x}\)&lt;br /&gt;
*trigonometrische Funktionen &#039;&#039;Sinus&#039;&#039;, &#039;&#039;Kosinus&#039;&#039; und &#039;&#039;Tangens&#039;&#039;&lt;br /&gt;
*Logarithmen&lt;br /&gt;
*Wurzeln&lt;br /&gt;
*Integrale&lt;br /&gt;
*Summen-und Produktzeichen&lt;br /&gt;
*Determinante&lt;br /&gt;
*Vektoren und Matrizen&lt;br /&gt;
*Intervalle&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Vollständig&#039;&#039;&#039;||&amp;lt;center&amp;gt;[[File:Formeleditor-PaletteFull1.jpg|350px]][[File:Formeleditor-PaletteFull2.jpg|350px]]&amp;lt;/center&amp;gt;||&lt;br /&gt;
*Vergleichsoperationen&lt;br /&gt;
*\(\pi\), \(e^{1}\), \(i\) und \(\infty\)&lt;br /&gt;
*Division, Potenzen, Beträge, Fakultät und \(e^{x}\)&lt;br /&gt;
*trigonometrische Funktionen &#039;&#039;Sinus&#039;&#039;, &#039;&#039;Kosinus&#039;&#039; und &#039;&#039;Tangens&#039;&#039;&lt;br /&gt;
*Logarithmen&lt;br /&gt;
*Wurzeln&lt;br /&gt;
*Integrale&lt;br /&gt;
*Limes&lt;br /&gt;
*Summen-und Produktzeichen&lt;br /&gt;
*Determinante&lt;br /&gt;
*Vektoren und Matrizen&lt;br /&gt;
*sämtliche trigonometrische Funktionen&lt;br /&gt;
*Intervalle&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;UDE Mathematikdidaktik&#039;&#039;&#039;||&amp;lt;center&amp;gt;[[File:Formeleditor UdeMathDidactics1.jpg|300px]] [[File:Formeleditor UdeMathDidactics2.jpg|300px]]&amp;lt;/center&amp;gt; &amp;lt;center&amp;gt;[[File:Formeleditor UdeMathDidactics3.jpg|300px]] [[File:Formeleditor UdeMathDidactics4.jpg|300px]]&amp;lt;/center&amp;gt;||&lt;br /&gt;
*Grundrechenarten&lt;br /&gt;
*Vergleichsoperatoren&lt;br /&gt;
*Brüche&lt;br /&gt;
*Potenzen&lt;br /&gt;
*Wurzeln&lt;br /&gt;
*Betrag&lt;br /&gt;
* Summen- und Produktformel&lt;br /&gt;
* Fakultät&lt;br /&gt;
*Mengen&lt;br /&gt;
*Durchschnitt&lt;br /&gt;
*Vereinigung&lt;br /&gt;
*Differenz&lt;br /&gt;
*leere Menge&lt;br /&gt;
*Intervalle&lt;br /&gt;
*Exponentialfunktion&lt;br /&gt;
*Logarithmusfunktionen&lt;br /&gt;
*\(\pi\)&lt;br /&gt;
*\(i\)&lt;br /&gt;
*\(\infty\)&lt;br /&gt;
* Vektoren&lt;br /&gt;
*Matrizen&lt;br /&gt;
*Determinante&lt;br /&gt;
*trigonometrische Funktionen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Chemie-Paletten ==&lt;br /&gt;
&lt;br /&gt;
Die Eingabemöglichkeiten im Chemie-Formeleditor sind wie folgt:&lt;br /&gt;
&lt;br /&gt;
* Durch Tippen von Großbuchstaben (optional gefolgt von einem Kleinbuchstaben) können Atome angegeben werden, beispielsweise (\H\) (Wasserstoff) oder (\Li\) (Lithium).&lt;br /&gt;
* Durch &amp;lt;code&amp;gt;Shift + Pfeil unten&amp;lt;/code&amp;gt; kann die Anzahl der Atome in einem Molekül erreicht werden, beispielsweise (\H_{2}\).&lt;br /&gt;
* Durch &amp;lt;code&amp;gt;Shift + Pfeil oben&amp;lt;/code&amp;gt; kann die Ladung des Moleküls angegeben werden, beispielsweise (\Ca^{2+}\).&lt;br /&gt;
* Operatoren &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; stehen zur Verfügung.&lt;br /&gt;
* Ganzzahlen können verwendet werden&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Name!!Formeleditor!!Inhalt&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Ohne (Chemie)&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
|Es wird keine Palette angezeigt. Eingegebene Reaktionsgleichungen werden aber automatisch umgewandelt.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Reaktionsgleichung&#039;&#039;&#039;||&amp;lt;center&amp;gt;[[File:Formeleditor-PaletteChemicalReactionEquation.jpg|130px]] ||Ermöglicht die Eingabe von Reaktionsgleichungen und Molekülen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[category:Benutzerhandbuch]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Formeleditor&amp;diff=12747</id>
		<title>Formeleditor</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Formeleditor&amp;diff=12747"/>
		<updated>2026-04-07T08:32:15Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: /* Chemie Editor */ Tippfehler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JACK bietet die Möglichkeit, Fill-In-Aufgaben um einen Editor zu erweitern, der die Eingabe mathematischer und chemischer Ausdrücke vereinfacht.&lt;br /&gt;
&lt;br /&gt;
=Mathematik Editor=&lt;br /&gt;
Zum Einbinden des mathematischen Editors in eine Aufgabe muss der &amp;lt;code&amp;gt;exercise&amp;lt;/code&amp;gt;-Tag um das Attribut &amp;lt;code&amp;gt;editor&amp;lt;/code&amp;gt; mit einem passenden Wert ergänzt werden. Der mathematische Editor bietet eine Palette mit einer Vielfalt an mathematischen Ausdrücken an, die außerdem erweitert werden kann. In JACK gibt es die Möglichkeit eigene Paletten ([[Templatepaletten]]) zu erstellen und vorgefertigte [[Standardpaletten]] zu nutzen. &lt;br /&gt;
&lt;br /&gt;
Um [[Standardpaletten]] einzubinden genügt es den Namen der Palette wie oben beschrieben anzugeben.&lt;br /&gt;
&lt;br /&gt;
Um [[Templatepaletten]] einzubinden, muss die selbsterstellte XML Datei der Aufgabe hinzugefügt werden. Zusätzlich muss in dem &amp;lt;code&amp;gt;editor&amp;lt;/code&amp;gt;-Tag der Stage Datei der Name der Datei + Dateiendung übergeben werden. Bsp.: &amp;lt;code&amp;gt;editor=&amp;quot;MyPalette.xml&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Beispiel==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;exercise type=&amp;quot;fillIn&amp;quot; editor=&amp;quot;basic&amp;quot;&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/exercise&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In dem Beispiel hat &amp;lt;code&amp;gt;editor&amp;lt;/code&amp;gt; den Wert &amp;lt;code&amp;gt;basic&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Hinweise zum mathematischen Editor==&lt;br /&gt;
&lt;br /&gt;
=== Eingabe mit Multiplikationszeichen ===&lt;br /&gt;
Damit der Formeleditor Terme richtig erkennen kann, muss zwischen den Variablen ein Multiplikationszeichen stehen.&lt;br /&gt;
::*Bsp.:&lt;br /&gt;
:::*&amp;lt;code&amp;gt;a^4c&amp;lt;/code&amp;gt; kann vom Editor nicht erkannt werden&lt;br /&gt;
:::*&amp;lt;code&amp;gt;a^4*c&amp;lt;/code&amp;gt; dieser Ausdruck wird vom Editor korrekt erkannt&lt;br /&gt;
&lt;br /&gt;
===Mehrere Buchstaben werden als eine Variable zusammengefasst===&lt;br /&gt;
Der Formeleditor erlaubt Variablen mit mehrere Buchstaben.&lt;br /&gt;
&lt;br /&gt;
::*Beispiele: &lt;br /&gt;
:::*Für &amp;lt;code&amp;gt;ca^4&amp;lt;/code&amp;gt; wird als die Variable &amp;quot;ca&amp;quot; hoch 4 interpretiert.&lt;br /&gt;
:::*&amp;lt;code&amp;gt;x*y^2&amp;lt;/code&amp;gt; führt zu &amp;lt;code&amp;gt;x*y*y&amp;lt;/code&amp;gt;&lt;br /&gt;
:::*&amp;lt;code&amp;gt;x*yz^2&amp;lt;/code&amp;gt; wird als die Variable &amp;quot;x&amp;quot; multipliziert mit der Variablen &amp;quot;yz&amp;quot; hoch vier interpretiert.&lt;br /&gt;
:::*&amp;lt;code&amp;gt;ab*ab&amp;lt;/code&amp;gt; führt zu &amp;lt;code&amp;gt;(ab)^2&amp;lt;/code&amp;gt;, wobei &amp;lt;code&amp;gt;ab&amp;lt;/code&amp;gt; wieder als eine Variable erkannt wird.&lt;br /&gt;
:::*&amp;lt;code&amp;gt;abc&amp;lt;/code&amp;gt; wird als Variable &amp;lt;code&amp;gt;abc&amp;lt;/code&amp;gt; erkannt. Schreibt man aber &amp;lt;code&amp;gt;a*b*c&amp;lt;/code&amp;gt; werden alle drei Buchstaben als einzelne Variablen erkannt.&lt;br /&gt;
&lt;br /&gt;
=== Keine Palette anzeigen===&lt;br /&gt;
Es gibt die Möglichkeit die FillIn Kästchen des Formeleditors zu nutzen, ohne eine Palette anzuzeigen. Hierzu kann &amp;lt;code&amp;gt;editor=&amp;quot;invisible&amp;quot;&amp;lt;/code&amp;gt; gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
===Besondere Zeichen===&lt;br /&gt;
* &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt;: Wird in einem FillIn Kästchen ein &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; eingefügt, wird ein Bruch anstelle eines &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; erstellt.&lt;br /&gt;
&lt;br /&gt;
=Chemie Editor= &lt;br /&gt;
[[file:Beispiel_Chem.PNG|thumb|Stimulierendes Beispiel mit der Palette &amp;quot;palette_chemical_reaction_equation&amp;quot;]]&lt;br /&gt;
Um den chemischen Editor für eine Aufgabe zu nutzen muss dem Tag &amp;lt;code&amp;gt;exercise&amp;lt;/code&amp;gt; das Attribut &amp;lt;code&amp;gt;domain&amp;lt;/code&amp;gt; mit dem Wert &amp;quot;chem&amp;quot; und das Attribut &amp;lt;code&amp;gt;editor&amp;lt;/code&amp;gt; mit Wert &amp;quot;palette_chemical_reaction_equation&amp;quot; oder &amp;quot;invisibleChem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Durch tippen von Großbuchstaben (optional gefolgt durch einen Kleinbuchstaben) können Atome angegeben werden.&lt;br /&gt;
* Durch &amp;lt;code&amp;gt;Shift + Pfeil unten&amp;lt;/code&amp;gt; kann die Anzahl der Atome in einem Molekül erreicht werden.&lt;br /&gt;
* Durch &amp;lt;code&amp;gt;Shift + Pfeil oben&amp;lt;/code&amp;gt; kann die Ladung des Moleküls angegeben werden.&lt;br /&gt;
* Operatoren &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; stehen zur Verfügung.&lt;br /&gt;
* Ganzzahlen können verwendet werden&lt;br /&gt;
&lt;br /&gt;
Die Palette &amp;quot;palette_chemical_reaction_equation&amp;quot; beinhaltet Elemente um Oxidationszahlen anzugeben und die Elemente, die mit &amp;lt;code&amp;gt; Shift + Pfeiltaste &amp;lt;/code&amp;gt; erzeugbar sind. Diese können mit einem Mausklick eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
==Beispiel zum chemischen Editor==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;exercise type=&amp;quot;fillIn&amp;quot; domain=&amp;quot;chem&amp;quot; editor=&amp;quot;palette_chemical_reaction_equation&amp;quot;&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/exercise&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In dem Beispiel hat &amp;lt;code&amp;gt;editor&amp;lt;/code&amp;gt; den Wert &amp;lt;code&amp;gt;palette_chemical_reaction_equation&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Allgemeine Hinweise zum Editor=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mischen vom mathematischen und chemischen Formeleditor===&lt;br /&gt;
*Eine Mischung der beiden Editoren ist in einer Stage nicht möglich.&lt;br /&gt;
*Eine Mischung in verschiedenen Stages einer Aufgabe ist zwar möglich, sollte aber vermieden werden. Die korrekte Anzeige aller gemachten Eingaben ist im Falle einer Mischung nicht möglich.&lt;br /&gt;
&lt;br /&gt;
=== erweitertes Steuern des Editorfeldes===&lt;br /&gt;
Der Formeleditor wird nur für ein Inputfeld angezeigt, wenn&lt;br /&gt;
:*in der Stage, wie oben beschrieben, ein Editor eingefügt wurde und beim Inputfeld &#039;&#039;&#039;nicht&#039;&#039;&#039; &amp;lt;code&amp;gt;editor=&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt; gesetzt wurde.&lt;br /&gt;
:*in der Stage, wie oben beschrieben, ein Editor eingefügt wurde und beim Inputfeld &amp;lt;code&amp;gt;editor=&amp;quot;true&amp;quot;&amp;lt;/code&amp;gt; gesetzt wurde.&lt;br /&gt;
:*in der Stage &#039;&#039;&#039;kein&#039;&#039;&#039; Editor eingefügt wurde und beim Inputfeld &amp;lt;code&amp;gt;editor=&amp;quot;true&amp;quot;&amp;lt;/code&amp;gt; gesetzt wurde. Hierbei wird die &#039;&#039;palette6&#039;&#039; des mathematischen Editors als Defaultpalette angezeigt.&lt;br /&gt;
&lt;br /&gt;
Für alle Fälle gilt, dass das Inputfeld &#039;&#039;&#039;kein&#039;&#039;&#039; Dropdownfeld sein darf!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weiterführende Links==&lt;br /&gt;
  * [[Templatepaletten]]&lt;br /&gt;
  * [[Standardpaletten]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Formeleditor]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Dynamischer_Python_Checker_(JACK3)&amp;diff=12642</id>
		<title>Dynamischer Python Checker (JACK3)</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Dynamischer_Python_Checker_(JACK3)&amp;diff=12642"/>
		<updated>2026-02-03T07:43:43Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der [[Python (JACK3)|Aufgabentyp Python]] lässt sich automatisiert bewerten, indem Testfälle ausgeführt werden. Diese können z.&amp;amp;nbsp;B. einen erwarteter Wert mit dem tatsächlichen Wert vergleichen. Der Python-Checker von JACK3 kann nicht nur Punktzahlen und Feedback zurückgeben, sondern auch Traces aufzeichnen (welche Zeilen ausgeführt wurden und wie die Variablenbelegung beim Testfall war). Es lassen sich beliebig komplexe Testfälle und auch zufallsbasierte Tests schreiben sowie passgenaues Feedback, programmiert in Python, erzeugen. &lt;br /&gt;
&lt;br /&gt;
{{Hinweis|In diesem Artikel werden [https://docs.python.org/3/tutorial/index.html grundlegende Python-Kenntnisse] vorausgesetzt.}}&lt;br /&gt;
&lt;br /&gt;
Der Checker arbeitet auf Python 3.11. Aktuell ist es nicht möglich, eigene Module zum Check hinzuzufügen oder Pakete aus dem Python Package Index (PyPI) (über &amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt;) zu laden. Das Paket [https://pandas.pydata.org/docs/user_guide/index.html pandas] ist vorinstalliert und kann durch den Testtreiber geladen werden, ansonsten sind ausschließlich Pakete der [https://docs.python.org/3.11/library/index.html Python-Standardbibliothek] nutzbar. &lt;br /&gt;
&lt;br /&gt;
== Unterstützte Aufgabenstellungen ==&lt;br /&gt;
Der dynamische Python-Checker ist darauf ausgelegt, Funktionsaufrufe aufzuzeichnen und ihre Rückgabewerte zu prüfen. Dies funktioniert am besten mit folgenden Aufgabenstellungen:&lt;br /&gt;
&lt;br /&gt;
* Schreiben Sie eine parameterlose Funktion, die ... zurückgibt.&lt;br /&gt;
* Schreiben Sie eine Funktion, die ... erwartet und ... zurückgibt.&lt;br /&gt;
* Schreiben Sie eine Funktion mit x Parametern, die mit dem ersten Parameter ... macht. (Um die Funktion zu prüfen, muss der Typ des ersten Parameters mutierbar sein, z.&amp;amp;nbsp;B. eine Liste.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel&#039;&#039;&#039;: &#039;&#039;Definieren Sie eine Funktion add. Die Funktion soll zwei Parameter entgegennehmen und das Ergebnis der Addition zurückgeben.&#039;&#039; Die erwartete Musterlösung für diesen Fall wäre:&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def add(a, b):&lt;br /&gt;
  return a + b&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Testfälle (s.u.) können diese Funktion dann mit verschiedenen Werten aufrufen und das Ergebnis prüfen.&lt;br /&gt;
&lt;br /&gt;
=== Statische Tests &amp;amp; Codeanalyse ===&lt;br /&gt;
Derzeit gibt es für Python keinen statischen (GReQL-)Checker. Der eingereichte Code kann allerdings indirekt auf Syntaxelemente überprüft werden, indem er händisch geparst wird. Hierzu können die Python-Bordmittel, insbesondere das [https://docs.python.org/3.11/library/ast.html AST (Abstract Syntax Trees)]-Modul genutzt werden.&lt;br /&gt;
&lt;br /&gt;
== Aufbau eines Testtreibers ==&lt;br /&gt;
Grundsätzlich ist ein Testtreiber ein einzelnes Modul mit einer oder mehreren [https://docs.python.org/3.11/tutorial/controlflow.html#defining-functions parameterlosen Funktionen] (&#039;&#039;&#039;Testfälle&#039;&#039;&#039;), die nacheinander ausgeführt werden. In der Regel importiert der Testtreiber dabei das Modul mit dem eingereichten (zu testenden) Code. Dessen Name [[Python (JACK3)|wird im UI als &amp;quot;Modul-Pfad für studentischen Code&amp;quot;]] festgelegt.&lt;br /&gt;
&lt;br /&gt;
Damit die Traces der Testfälle korrekt aufgezeichnet werden, wird jeder Testfall mit dem [https://book.pythontips.com/en/latest/decorators.html Decorator] &amp;lt;code&amp;gt;decorator&amp;lt;/code&amp;gt; aus dem vorgegebenen &amp;lt;code&amp;gt;Communicator&amp;lt;/code&amp;gt;-Modul gekennzeichnet. Der folgende Code zeigt ein Beispiel mit zwei Testfällen, jeweils ohne Inhalt:&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import Communicator&lt;br /&gt;
import Trace&lt;br /&gt;
import studentcode as s&lt;br /&gt;
&lt;br /&gt;
@Communicator.decorator&lt;br /&gt;
def testcase1():&lt;br /&gt;
  # TODO so something with s ...&lt;br /&gt;
  pass&lt;br /&gt;
&lt;br /&gt;
@Communicator.decorator&lt;br /&gt;
def testcase2():&lt;br /&gt;
  # TODO so something with s ...&lt;br /&gt;
  pass&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    print(&#039;Running test case 1...&#039;)&lt;br /&gt;
    testcase1()&lt;br /&gt;
    print(&#039;Running test case 2 ...&#039;)&lt;br /&gt;
    testcase2()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===API zum Zurückmelden von Ergebnissen===&lt;br /&gt;
Innerhalb eines Testfalls werden Ergebnisse über das Modul &amp;lt;code&amp;gt;Trace&amp;lt;/code&amp;gt; zurückgeliefert. Dieses Modul sammelt alle Punktzahlen und Feedback auf und berichtet diese am Ende der Ausführung. Es bietet folgende Funktion:&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def printResult(result: int, feedback: str = None):&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  Reports a result.&lt;br /&gt;
&lt;br /&gt;
  :param result: Points which are reported. Must be between 0 and 100 (both inclusive).&lt;br /&gt;
  :param feedback: Optional Feedback presented to the user.&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  pass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;{{Wichtig|In jedem Testfall muss &amp;lt;code&amp;gt;printResult&amp;lt;/code&amp;gt; genau ein Mal tatsächlich aufgerufen werden!}}&lt;br /&gt;
&lt;br /&gt;
=== Schreiben von Testfällen ===&lt;br /&gt;
Der Checker nutzt für das Tracing eine spezielle Kontrollflussanalyse, basierend auf Pythons [https://docs.python.org/3.11/reference/simple_stmts.html#the-assert-statement &amp;lt;code&amp;gt;assert&amp;lt;/code&amp;gt;-Schlüsselwort] und Exceptions. Mit &amp;lt;code&amp;gt;assert&amp;lt;/code&amp;gt; lassen sich Ausdrücke testen, die resultierende Exception lässt sich anschließend fangen und in Feedback umwandeln.&lt;br /&gt;
&lt;br /&gt;
Ein möglicher Testfall 1 für das obige Beispiel wäre dementsprechend:&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
@Communicator.decorator&lt;br /&gt;
def testcase1():&lt;br /&gt;
  try:&lt;br /&gt;
    # Berechnen des Ergebnisses mit dem &amp;quot;studentcode&amp;quot;:&lt;br /&gt;
    result = s.add(1, 0)&lt;br /&gt;
    # zu prüfender Ausdruck:&lt;br /&gt;
    assert result == 1&lt;br /&gt;
&lt;br /&gt;
    # Bei Erfolg: +25 Punkte&lt;br /&gt;
    Trace.printResult(25)&lt;br /&gt;
  except Exception:&lt;br /&gt;
    # Bei Misserfolg: +0 Punkte mit Feedback-Nachricht&lt;br /&gt;
    Trace.printResult(0, f&amp;quot;Erwartete Summe: 1, tatsächlich: {result}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Das Tracing reagiert auf alle Arten von Exceptions und zeigt im Falle eines &amp;lt;code&amp;gt;AssertionError&amp;lt;/code&amp;gt;s (entweder händisch geworfen oder über &amp;lt;code&amp;gt;assert&amp;lt;/code&amp;gt;) eine generische Fehlermeldung an, die mitteilt, dass der Testfall nicht bestanden wurde, sofern kein benutzerdefiniertes Feedback (zweiter Parameter von &amp;lt;code&amp;gt;printResult&amp;lt;/code&amp;gt;) vorgegeben wurde. Zusätzlich wird die Variablenbelegung angezeigt und die ausgeführten Zeilen.&lt;br /&gt;
&lt;br /&gt;
Pro Testtreiber werden die Punkte aller Testfälle aufsummiert. Bei einer gleichen Gewichtung von vier Testfällen wird jeder Testfall also 25 Punkte im Erfolg zurückmelden. Die summierten Punkte müssen zwischen 0 und 100 (jeweils inklusiv) liegen.&lt;br /&gt;
&lt;br /&gt;
== Ressourcen ==&lt;br /&gt;
Um das Entwickeln von Testfällen zu vereinfachen, haben wir einen Dummy gebaut, der die Funktion des Checkers simuliert. [[Medium:Tracing-Python-Checker-Dummy.zip|Den Dummy können Sie hier herunterladen.]] Folgende Dateien sind enthalten:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Trace.py&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;Communicator.py&amp;lt;/code&amp;gt; simulieren die Funktion des Checkers.&lt;br /&gt;
* &amp;lt;code&amp;gt;testdriver.py&amp;lt;/code&amp;gt; enthält vier Testfälle aus dem Beispiel oben und kann beliebig angepasst werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;studentcode.py&amp;lt;/code&amp;gt; enthält eine studentische Einreichung mit einem &amp;quot;Fehler&amp;quot;, bei dem einer der Testfälle nicht bestanden wird.&lt;br /&gt;
* &amp;lt;code&amp;gt;run.py&amp;lt;/code&amp;gt; ist ein Skript, das den Testtreiber ausführt und ausgibt, wie viele Punkte die Lösung ergeben würde.&lt;br /&gt;
&lt;br /&gt;
Der Dummy kann mit dem Befehl &amp;lt;code&amp;gt;python run.py&amp;lt;/code&amp;gt; ausgeführt werden (auf Linux-Systemen kann der Befehl auch &amp;lt;code&amp;gt;python3&amp;lt;/code&amp;gt; lauten, auf Windows auch &amp;lt;code&amp;gt;py&amp;lt;/code&amp;gt;).&lt;br /&gt;
{{Hinweis|Der Dummy arbeitet nicht exakt wie der Checker. Es gibt keine Garantie, dass Testtreiber, die mit dem Dummy funktionieren, auch genau so in JACK funktionieren. Testen Sie die Aufgabe deshalb immer auch in JACK!}}&lt;br /&gt;
[[Kategorie:Benutzerhandbuch]]&lt;br /&gt;
[[Kategorie:Checker]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Kategorie:Geometry&amp;diff=12641</id>
		<title>Kategorie:Geometry</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Kategorie:Geometry&amp;diff=12641"/>
		<updated>2026-02-02T17:06:33Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Navigationsvorlage eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine Auflistung aller Funktionen die mit geometrischen Formen arbeiten.&lt;br /&gt;
&lt;br /&gt;
{{Navigation/Geometriefunktionen}}&lt;br /&gt;
[[Kategorie:Math-Evaluatorfunktion]][[Kategorie:Evaluatorfunktionenkategorie]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Vorlage:Navigation/Geometriefunktionen&amp;diff=12640</id>
		<title>Vorlage:Navigation/Geometriefunktionen</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Vorlage:Navigation/Geometriefunktionen&amp;diff=12640"/>
		<updated>2026-02-02T17:05:50Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: LGlaser verschob die Seite Vorlage:Navigation/Koordinatenfunktionen nach Vorlage:Navigation/Geometriefunktionen, ohne dabei eine Weiterleitung anzulegen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{Navigation&lt;br /&gt;
| TITEL  = Geometriefunktionen&lt;br /&gt;
| INHALT = &lt;br /&gt;
Geometrische Figuren:&lt;br /&gt;
[[Coordinate]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[Circle]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[Polygon]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[Rectangle]]&lt;br /&gt;
&lt;br /&gt;
Prüfen von Koordinaten:&lt;br /&gt;
[[IsCoordinateInCircle]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[IsCoordinateInPolygon]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[IsCoordinateInRectangle]]&lt;br /&gt;
&lt;br /&gt;
Abrufen von Koordinaten:&lt;br /&gt;
[[GetXCoordinate]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[GetYCoordinate]]&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Navigationsvorlagen|Koordinatenfunktionen]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Vorlage:Navigation/Geometriefunktionen&amp;diff=12639</id>
		<title>Vorlage:Navigation/Geometriefunktionen</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Vorlage:Navigation/Geometriefunktionen&amp;diff=12639"/>
		<updated>2026-02-02T17:05:02Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Vervollständigung der Vorlage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{Navigation&lt;br /&gt;
| TITEL  = Geometriefunktionen&lt;br /&gt;
| INHALT = &lt;br /&gt;
Geometrische Figuren:&lt;br /&gt;
[[Coordinate]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[Circle]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[Polygon]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[Rectangle]]&lt;br /&gt;
&lt;br /&gt;
Prüfen von Koordinaten:&lt;br /&gt;
[[IsCoordinateInCircle]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[IsCoordinateInPolygon]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[IsCoordinateInRectangle]]&lt;br /&gt;
&lt;br /&gt;
Abrufen von Koordinaten:&lt;br /&gt;
[[GetXCoordinate]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[GetYCoordinate]]&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Navigationsvorlagen|Koordinatenfunktionen]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Vorlage:Navigation/Numberfunktionen&amp;diff=12638</id>
		<title>Vorlage:Navigation/Numberfunktionen</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Vorlage:Navigation/Numberfunktionen&amp;diff=12638"/>
		<updated>2026-02-02T17:00:51Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: IsNaN nachgetragen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{Navigation&lt;br /&gt;
| TITEL  = Numberfunktionen ([[Übersicht Numberfunktionen|Übersicht]])&lt;br /&gt;
| INHALT = &lt;br /&gt;
[[EvaluatesToNumber]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[IsNumber]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[IsIntegerNumber]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[IsNaturalNumber]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[IsRationalNumber]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[IsRealNumber]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[IsMathematikerRealNumber]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[IsNaN]]&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Navigationsvorlagen|Numberfunktionen]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Dynamischer_Python_Checker_(JACK3)&amp;diff=12637</id>
		<title>Dynamischer Python Checker (JACK3)</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Dynamischer_Python_Checker_(JACK3)&amp;diff=12637"/>
		<updated>2026-02-02T16:51:41Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Hinweis auf statische Codeanalyse&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der [[Python (JACK3)|Aufgabentyp Python]] lässt sich automatisiert bewerten, indem Testfälle ausgeführt werden. Diese können z.&amp;amp;nbsp;B. einen erwarteter Wert mit dem tatsächlichen Wert vergleichen. Der Python-Checker von JACK3 kann nicht nur Punktzahlen und Feedback zurückgeben, sondern auch Traces aufzeichnen (welche Zeilen ausgeführt wurden und wie die Variablenbelegung beim Testfall war). Es lassen sich beliebig komplexe Testfälle und auch zufallsbasierte Tests schreiben sowie passgenaues Feedback, programmiert in Python, erzeugen. &lt;br /&gt;
&lt;br /&gt;
{{Hinweis|In diesem Artikel werden [https://docs.python.org/3/tutorial/index.html grundlegende Python-Kenntnisse] vorausgesetzt.}}&lt;br /&gt;
&lt;br /&gt;
Der Checker arbeitet auf Python 3.11. Aktuell ist es nicht möglich, eigene Module zum Check hinzuzufügen oder Pakete aus dem Python Package Index (PyPI) (über &amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt;) zu laden. Das Paket [https://pandas.pydata.org/docs/user_guide/index.html pandas] ist vorinstalliert und kann durch den Testtreiber geladen werden, ansonsten sind ausschließlich Pakete der [https://docs.python.org/3.11/library/index.html Python-Standardbibliothek] nutzbar. &lt;br /&gt;
&lt;br /&gt;
== Unterstützte Aufgabenstellungen ==&lt;br /&gt;
Der dynamische Python-Checker ist darauf ausgelegt, Funktionsaufrufe aufzuzeichnen und ihre Rückgabewerte zu prüfen. Dies funktioniert am besten mit folgenden Aufgabenstellungen:&lt;br /&gt;
&lt;br /&gt;
* Schreiben Sie eine parameterlose Funktion, die ... zurückgibt.&lt;br /&gt;
* Schreiben Sie eine Funktion, die ... erwartet und ... zurückgibt.&lt;br /&gt;
* Schreiben Sie eine Funktion mit x Parametern, die mit dem ersten Parameter ... macht. (Um die Funktion zu prüfen, muss der Typ des ersten Parameters mutierbar sein, z.&amp;amp;nbsp;B. eine Liste.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel&#039;&#039;&#039;: &#039;&#039;Definieren Sie eine Funktion add. Die Funktion soll zwei Parameter entgegennehmen und das Ergebnis der Addition zurückgeben.&#039;&#039; Die erwartete Musterlösung für diesen Fall wäre:&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def add(a, b):&lt;br /&gt;
  return a + b&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Testfälle (s.u.) können diese Funktion dann mit verschiedenen Werten aufrufen und das Ergebnis prüfen.&lt;br /&gt;
&lt;br /&gt;
=== Statische Tests &amp;amp; Codeanalyse ===&lt;br /&gt;
Derzeit gibt es für Python keinen statischen (GReQL-)Checker. Der eingereichte Code kann allerdings indirekt auf Syntaxelemente überprüft werden, indem er händisch geparst wird. Hierzu können die Python-Bordmittel, insbesondere das [https://docs.python.org/3.11/library/ast.html AST (Abstract Syntax Trees)]-Modul genutzt werden.&lt;br /&gt;
&lt;br /&gt;
== Aufbau eines Testtreibers ==&lt;br /&gt;
Grundsätzlich ist ein Testtreiber ein einzelnes Modul mit einer oder mehreren [https://docs.python.org/3.11/tutorial/controlflow.html#defining-functions parameterlosen Funktionen] (&#039;&#039;&#039;Testfälle&#039;&#039;&#039;), die nacheinander ausgeführt werden. In der Regel importiert der Testtreiber dabei das Modul mit dem eingereichten (zu testenden) Code. Dessen Name [[Python (JACK3)|wird im UI als &amp;quot;Modul-Pfad für studentischen Code&amp;quot;]] festgelegt.&lt;br /&gt;
&lt;br /&gt;
Damit die Traces der Testfälle korrekt aufgezeichnet werden, wird jeder Testfall mit dem [https://book.pythontips.com/en/latest/decorators.html Decorator] &amp;lt;code&amp;gt;decorator&amp;lt;/code&amp;gt; aus dem vorgegebenen &amp;lt;code&amp;gt;Communicator&amp;lt;/code&amp;gt;-Modul gekennzeichnet. Der folgende Code zeigt ein Beispiel mit zwei Testfällen, jeweils ohne Inhalt:&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import Communicator&lt;br /&gt;
import Trace&lt;br /&gt;
import studentcode as s&lt;br /&gt;
&lt;br /&gt;
@Communicator.decorator&lt;br /&gt;
def testcase1():&lt;br /&gt;
  # TODO so something with s ...&lt;br /&gt;
  pass&lt;br /&gt;
&lt;br /&gt;
@Communicator.decorator&lt;br /&gt;
def testcase2():&lt;br /&gt;
  # TODO so something with s ...&lt;br /&gt;
  pass&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    print(&#039;Running test case 1...&#039;)&lt;br /&gt;
    testcase1()&lt;br /&gt;
    print(&#039;Running test case 2 ...&#039;)&lt;br /&gt;
    testcase2()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===API zum Zurückmelden von Ergebnissen===&lt;br /&gt;
Innerhalb eines Testfalls werden Ergebnisse über das Modul &amp;lt;code&amp;gt;Trace&amp;lt;/code&amp;gt; zurückgeliefert. Dieses Modul sammelt alle Punktzahlen und Feedback auf und berichtet diese am Ende der Ausführung. Es bietet folgende Funktion:&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
def printResult(result: int, feedback: str = None):&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  Reports a result.&lt;br /&gt;
&lt;br /&gt;
  :param result: Points which are reported. Must be between 0 and 100 (both inclusive).&lt;br /&gt;
  :param feedback: Optional Feedback presented to the user.&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  pass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;{{Wichtig|In jedem Testfall muss &amp;lt;code&amp;gt;printResult&amp;lt;/code&amp;gt; genau ein Mal tatsächlich aufgerufen werden!}}&lt;br /&gt;
&lt;br /&gt;
=== Schreiben von Testfällen ===&lt;br /&gt;
Der Checker nutzt für das Tracing eine spezielle Kontrollflussanalyse, basierend auf Pythons [https://docs.python.org/3.11/reference/simple_stmts.html#the-assert-statement &amp;lt;code&amp;gt;assert&amp;lt;/code&amp;gt;-Schlüsselwort] und Exceptions. Mit &amp;lt;code&amp;gt;assert&amp;lt;/code&amp;gt; lassen sich Ausdrücke testen, die resultierende Exception lässt sich anschließend fangen und in Feedback umwandeln.&lt;br /&gt;
&lt;br /&gt;
Ein möglicher Testfall 1 für das obige Beispiel wäre dementsprechend:&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
@Communicator.decorator&lt;br /&gt;
def testcase1():&lt;br /&gt;
  try:&lt;br /&gt;
    # Berechnen des Ergebnisses mit dem &amp;quot;studentcode&amp;quot;:&lt;br /&gt;
    result = s.add(1, 0)&lt;br /&gt;
    # zu prüfender Ausdruck:&lt;br /&gt;
    assert result == 1&lt;br /&gt;
&lt;br /&gt;
    # Bei Erfolg: +25 Punkte&lt;br /&gt;
    Trace.printResult(25)&lt;br /&gt;
  except Exception:&lt;br /&gt;
    # Bei Misserfolg: +0 Punkte mit Feedback-Nachricht&lt;br /&gt;
    Trace.printResult(0, f&amp;quot;Erwartete Summe: 1, tatsächlich: {result}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Das Tracing reagiert auf alle Arten von Exceptions und zeigt im Falle eines &amp;lt;code&amp;gt;AssertionError&amp;lt;/code&amp;gt;s (entweder händisch geworfen oder über &amp;lt;code&amp;gt;assert&amp;lt;/code&amp;gt;) eine generische Fehlermeldung an, die mitteilt, dass der Testfall nicht bestanden wurde, sofern kein benutzerdefiniertes Feedback (zweiter Parameter von &amp;lt;code&amp;gt;printResult&amp;lt;/code&amp;gt;) vorgegeben wurde. Zusätzlich wird die Variablenbelegung angezeigt und die ausgeführten Zeilen.&lt;br /&gt;
&lt;br /&gt;
Pro Testtreiber werden die Punkte aller Testfälle aufsummiert. Bei einer gleichen Gewichtung von vier Testfällen wird jeder Testfall also 25 Punkte im Erfolg zurückmelden. Die summierten Punkte müssen zwischen 0 und 100 (jeweils inklusiv) liegen.&lt;br /&gt;
&lt;br /&gt;
== Ressourcen ==&lt;br /&gt;
Um das Entwickeln von Testfällen zu vereinfachen, haben wir einen Dummy gebaut, der die Funktion des Checkers simuliert. [[index.php?title=Medium:Tracing-Python-Checker-Dummy.zip|Den Dummy können Sie hier herunterladen.]] Folgende Dateien sind enthalten:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Trace.py&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;Communicator.py&amp;lt;/code&amp;gt; simulieren die Funktion des Checkers.&lt;br /&gt;
* &amp;lt;code&amp;gt;testdriver.py&amp;lt;/code&amp;gt; enthält vier Testfälle aus dem Beispiel oben und kann beliebig angepasst werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;studentcode.py&amp;lt;/code&amp;gt; enthält eine studentische Einreichung mit einem &amp;quot;Fehler&amp;quot;, bei dem einer der Testfälle nicht bestanden wird.&lt;br /&gt;
* &amp;lt;code&amp;gt;run.py&amp;lt;/code&amp;gt; ist ein Skript, das den Testtreiber ausführt und ausgibt, wie viele Punkte die Lösung ergeben würde.&lt;br /&gt;
&lt;br /&gt;
Der Dummy kann mit dem Befehl &amp;lt;code&amp;gt;python run.py&amp;lt;/code&amp;gt; ausgeführt werden (auf Linux-Systemen kann der Befehl auch &amp;lt;code&amp;gt;python3&amp;lt;/code&amp;gt; lauten, auf Windows auch &amp;lt;code&amp;gt;py&amp;lt;/code&amp;gt;).&lt;br /&gt;
{{Hinweis|Der Dummy arbeitet nicht exakt wie der Checker. Es gibt keine Garantie, dass Testtreiber, die mit dem Dummy funktionieren, auch genau so in JACK funktionieren. Testen Sie die Aufgabe deshalb immer auch in JACK!}}&lt;br /&gt;
[[Kategorie:Benutzerhandbuch]]&lt;br /&gt;
[[Kategorie:Checker]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Vorlage:Navigation&amp;diff=12277</id>
		<title>Vorlage:Navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Vorlage:Navigation&amp;diff=12277"/>
		<updated>2025-06-06T07:54:04Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Vorlagenkategorie&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div style=&amp;quot;background: #eaf3ff; border: solid 1px #a3caff; padding-left: 10px; padding-right: 10px; line-height: 1.0em; text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
{{#if: {{{TITEL|}}} | &amp;lt;div style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;&lt;br /&gt;
{{{TITEL}}}&lt;br /&gt;
&amp;lt;/div&amp;gt; | }}&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
{{{INHALT}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;Diese Vorlage bildet eine Navigationsleiste, ähnlich zu der in der [https://de.wikipedia.org/wiki/Vorlage:Navigationsleiste Wikipedia].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Benutzung:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{{Navigation&lt;br /&gt;
| TITEL  = Titel hier einfügen&lt;br /&gt;
| INHALT = &lt;br /&gt;
[[Erste Seite]]&amp;amp;amp;nbsp;&amp;amp;amp;bull;&lt;br /&gt;
[[Zweite Seite]]&amp;amp;amp;nbsp;&amp;amp;amp;bull;&lt;br /&gt;
[[Dritte Seite]]&amp;amp;amp;nbsp;&amp;amp;amp;bull;&lt;br /&gt;
[[Vierte Seite]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Parameter &amp;lt;code&amp;gt;TITEL&amp;lt;/code&amp;gt; ist optional.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ergibt:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Navigation&lt;br /&gt;
| TITEL  = Titel hier einfügen&lt;br /&gt;
| INHALT = &lt;br /&gt;
Erste Seite&amp;amp;nbsp;&amp;amp;bull; &amp;lt;!-- Dummy-Links entfernt --&amp;gt;&lt;br /&gt;
Zweite Seite&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
Dritte Seite&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
Vierte Seite&lt;br /&gt;
}}&lt;br /&gt;
[[:Kategorie:Navigationsvorlagen|Liste aller Navigationsvorlagen]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Navigationsvorlagen| ]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Checkliste_f%C3%BCr_Pr%C3%BCfungen_mit_JACK_3&amp;diff=12114</id>
		<title>Checkliste für Prüfungen mit JACK 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Checkliste_f%C3%BCr_Pr%C3%BCfungen_mit_JACK_3&amp;diff=12114"/>
		<updated>2025-03-11T08:11:54Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Hinweis auf PC-Hall konkretisiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier finden Sie eine Checkliste zur erfolgreichen Durchführung von Prüfungen mit JACK3. Um eine möglichst reibungslose Prüfungsdurchführung zu ermöglichen, bitten wir Sie, folgende Punkte abzuarbeiten:&lt;br /&gt;
&lt;br /&gt;
Bis &#039;&#039;&#039;zwei Wochen&#039;&#039;&#039; vor der Klausur:&lt;br /&gt;
&lt;br /&gt;
* Die Klausur wurde über die [mailto:jack@paluno.uni-due.de Funktionsmail] angemeldet.&lt;br /&gt;
&lt;br /&gt;
* Falls die Prüfung in einer [https://www.uni-due.de/zim/services/pc-pruefungen/pc-hall PC-Hall der Universität Duisburg-Essen] stattfindet: Die Klausur wurde beim [https://www.uni-due.de/zim/klausuranmeldung ZIM] angemeldet.&lt;br /&gt;
&lt;br /&gt;
* Lehrende haben Editierrechte und einen Ordner in [[Verfügbare Kurse (JACK3)|&#039;&#039;Verfügbare Kurse&#039;&#039;]] auf dem/den Prüfungsserver/n erhalten.&lt;br /&gt;
&lt;br /&gt;
Bis &#039;&#039;&#039;eine Woche&#039;&#039;&#039; vor der Klausur:&lt;br /&gt;
&lt;br /&gt;
* Die Klausuraufgaben wurden auf den/die Prüfungsserver importiert.&lt;br /&gt;
&lt;br /&gt;
* Alle Bilder in den Aufgaben wurden erneut in der Aufgabe verlinkt.&lt;br /&gt;
&lt;br /&gt;
* Es wurde ein Kurs erstellt, die Aufgaben dort eingefügt und die Punkte für die Aufgaben angepasst.&lt;br /&gt;
&lt;br /&gt;
* Es wurde ein Kursangebot erstellt, der Kurs eingebunden und das Kursangebot konfiguriert.&lt;br /&gt;
&lt;br /&gt;
* Die Klausur wurde aus Studierendensicht auf technische Korrektheit geprüft.&lt;br /&gt;
&lt;br /&gt;
* Die Klausur wurde aus Studierendensicht auf inhaltliche Korrektheit geprüft.&lt;br /&gt;
&lt;br /&gt;
=== Weitere Hinweise ===&lt;br /&gt;
* Das JACK-Team übernimmt keine Verantwortung für die Korrektheit der Aufgaben, Kurse und Kursangebote.&lt;br /&gt;
&lt;br /&gt;
* Für neue Kunden wird einmalig ein Mitarbeiter vor Ort für die Betreuung der Klausur in der PC-Hall bereitgestellt.&lt;br /&gt;
&lt;br /&gt;
* Das JACK-Team steht im Zeitraum &#039;&#039;vor&#039;&#039; diesen zwei Wochen stets gerne für Beratungen und Schulungen zu allen Themen zur Verfügung, um eine störungsfreie und erfolgreiche Durchführung der Prüfungen zu gewährleisten.&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=IsNaN&amp;diff=12113</id>
		<title>IsNaN</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=IsNaN&amp;diff=12113"/>
		<updated>2025-03-11T08:08:13Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navigation/Numberfunktionen}}&lt;br /&gt;
&lt;br /&gt;
=== Zugehörige Evaluatoren ===&lt;br /&gt;
*&#039;&#039;&#039;MathEvaluator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
Die Funktion &#039;&#039;IsNaN&#039;&#039; prüft nach dem IEEE-Standard 754, ob eine Fließkommazahl &amp;quot;[https://de.wikipedia.org/wiki/NaN Not a Number]&amp;quot; ist.&lt;br /&gt;
&lt;br /&gt;
Siehe auch [[Übersicht Numberfunktionen]].&lt;br /&gt;
&lt;br /&gt;
=== Syntax ===&lt;br /&gt;
 isNaN(a)&lt;br /&gt;
&lt;br /&gt;
=== Parameter ===&lt;br /&gt;
* &#039;&#039;&#039;a&#039;&#039;&#039; - [[Objekt]]&lt;br /&gt;
&lt;br /&gt;
=== Return Value ===&lt;br /&gt;
*Gibt True (wahr) oder False (nicht wahr) zurück&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
==== Standardfälle ====&lt;br /&gt;
 isNaN(4)  --&amp;gt; returns &#039;&#039;true&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 isNaN(-1245)   --&amp;gt; returns &#039;&#039;true&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 isNaN(2.5) --&amp;gt; returns &#039;&#039;false&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Math-Evaluatorfunktion]][[Kategorie:Testfunktionen]][[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=%C3%9Cbersicht_Numberfunktionen&amp;diff=12112</id>
		<title>Übersicht Numberfunktionen</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=%C3%9Cbersicht_Numberfunktionen&amp;diff=12112"/>
		<updated>2025-03-11T08:07:29Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: /* IsNaN */ typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navigation/Numberfunktionen}}&lt;br /&gt;
&lt;br /&gt;
== Funktionsweise ==&lt;br /&gt;
Im Mathe-Evaluator gibt es sechs verschiedene Funktionen, mit denen getestet werden kann, ob die Eingabe zu einer bestimmten Zahlengruppe gehört:&lt;br /&gt;
&lt;br /&gt;
=== [[IsNumber]] ===&lt;br /&gt;
* Gibt &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurück, wenn&lt;br /&gt;
** die Eingabe eine Zahl ist oder&lt;br /&gt;
** sich die Eingabe zu einer Zahl ausrechnen lässt.&lt;br /&gt;
* &#039;&#039;&#039;Gibt auch für komplexe Zahlen true zurück.&#039;&#039;&#039;&lt;br /&gt;
=== [[IsIntegerNumber]] ===&lt;br /&gt;
* Gibt &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurück, wenn&lt;br /&gt;
** die Eingabe ein Integer ist.&lt;br /&gt;
* &#039;&#039;&#039;Die Eingabe wird nicht ausgerechnet.&#039;&#039;&#039;&lt;br /&gt;
=== [[IsNaturalNumber]] ===&lt;br /&gt;
* Gibt &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurück, wenn&lt;br /&gt;
** die Eingabe eine natürliche Zahl oder&lt;br /&gt;
** Null ist.&lt;br /&gt;
* &#039;&#039;&#039;Die Eingabe wird nicht ausgerechnet.&#039;&#039;&#039;&lt;br /&gt;
=== [[IsRationalNumber]] ===&lt;br /&gt;
* Gibt &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurück, wenn&lt;br /&gt;
** die Eingabe eine rationale Zahl ist.&lt;br /&gt;
* &#039;&#039;&#039;Die Eingabe wird nicht ausgerechnet.&#039;&#039;&#039;&lt;br /&gt;
=== [[IsRealNumber]] ===&lt;br /&gt;
* Gibt &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurück, wenn sich die Eingabe zu einer reellen Zahl ausrechnen lässt und&lt;br /&gt;
** es sich um eine ganze oder Fließkomma-Zahl handelt,&lt;br /&gt;
** es sich um &amp;lt;code&amp;gt;+/- e&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;+/- pi&amp;lt;/code&amp;gt; handelt,&lt;br /&gt;
** es sich um einen Bruch handelt, bei dem Zähler und Nenner eine ganze Zahl/Fließkommazahl/&amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;pi&amp;lt;/code&amp;gt; sind oder&lt;br /&gt;
** es sich um eine Wurzel handelt und der Term unter der Wurzel obigen Kriterien entspricht.&lt;br /&gt;
=== [[IsMathematikerRealNumber]] ===&lt;br /&gt;
* Gibt &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurück, wenn&lt;br /&gt;
** die Eingabe sich nicht zu Unendlich ausrechnen lässt,&lt;br /&gt;
** die Eingabe sich zu einer reellen Zahl ausrechnen lässt und&lt;br /&gt;
** die Eingabe nicht weiter vereinfacht werden kann.&lt;br /&gt;
* Die Eingabe ist vereinfachbar, wenn&lt;br /&gt;
** sie mindesten einen Operanten enthält (&amp;lt;code&amp;gt;+, -, *, /, ^, sqrt&amp;lt;/code&amp;gt;) und&lt;br /&gt;
** sie sich zu einer Ganzzahl ausrechnen lässt.&lt;br /&gt;
=== [[IsNaN]] ===&lt;br /&gt;
* Gibt &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurück, wenn&lt;br /&gt;
** es sich bei der Eingabe um &#039;&#039;&#039;keine&#039;&#039;&#039; Zahl des [https://de.wikipedia.org/wiki/NaN IEEE-Standard 754] handelt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vergleich ==&lt;br /&gt;
In folgender Tabelle wird verglichen, welche Rückgabe die Funktionen für verschiedene Eingaben liefern:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Ausgaben der Funktionen bei verschiedenen Eingaben&lt;br /&gt;
|-&lt;br /&gt;
! !! \(2\) !! \(0\) !! \(-4\) !! \(4.6\) !! \(\frac{2}{3}\) !! \(\sqrt{\frac{4}{4}}\) !! \(1+3\) !! \(i\) !! \(\infty\)&lt;br /&gt;
|-&lt;br /&gt;
| IsNumber || True || True || True || True || True || True  || True || True ||  style=&amp;quot;background-color: silver;&amp;quot; |False&lt;br /&gt;
|-&lt;br /&gt;
| IsIntegerNumber || True || True || True ||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False&lt;br /&gt;
|-&lt;br /&gt;
| IsNaturalNumber || True || True ||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False&lt;br /&gt;
|-&lt;br /&gt;
| IsRationalNumber || True || True || True || True || True ||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False&lt;br /&gt;
|-&lt;br /&gt;
| IsRealNumber || True || True || True || True || True || True ||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False&lt;br /&gt;
|-&lt;br /&gt;
| IsMathematikerRealNumber || True || True || True || True  || True ||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False||  style=&amp;quot;background-color: silver;&amp;quot; |False&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Math-Evaluatorfunktion]][[Kategorie:Testfunktionen]][[Kategorie:JACK2]][[Kategorie:JACK3]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Formeleditor_(JACK3)&amp;diff=12111</id>
		<title>Formeleditor (JACK3)</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Formeleditor_(JACK3)&amp;diff=12111"/>
		<updated>2025-03-06T13:37:24Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Kleine Korrekturen, &amp;#039;/&amp;#039; zu besonderen Zeichen hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JACK3 bietet die Möglichkeit, [[Fill-In (JACK3)|Fill-In Aufgaben]] um einen Formeleditor zu erweitern. Dieser unterstützt bei der Eingabe von mathematischen und chemischen Ausdrücken.&lt;br /&gt;
&lt;br /&gt;
=== Allgemeine Informationen ===&lt;br /&gt;
Zum Einbinden des Formeleditors in einer Aufgabe muss in dem Aufgabenteil unter Formeleditor eine &#039;&#039;Palette&#039;&#039; ausgewählt werden und für das jeweilige Inputfeld in dem Drop-Down Feld &#039;&#039;Formeleditor&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:FillIn_Felder_Lehrender.JPG|center|thumb|800px|Einbinden des Formeleditors für Fill-In Felder]]{{Hinweis|In einer Aufgabe dürfen die beiden Formeleditoren Mathe und Chemie nicht gemischt werden.|Wichtig}}Der Formeleditor wird nur für ein Inputfeld angezeigt, wenn in dem Aufgabenteil ein Formeleditor ausgewählt wurde und bei dem Inputfeld &#039;&#039;Formeleditor&#039;&#039; gewählt wurde.&lt;br /&gt;
&lt;br /&gt;
Bei beiden, Mathematik und Chemie, kann man sich auch keine Palette anzeigen lassen, aber trotzdem die Funktionen nutzen. Für Mathematik wählt man dafür &amp;lt;code&amp;gt;invisible&amp;lt;/code&amp;gt; aus und für Chemie &amp;lt;code&amp;gt;invisibleChem&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Mathematik Formeleditor ===&lt;br /&gt;
====Mehrere Buchstaben werden zu einer Variable zusammengefasst====&lt;br /&gt;
Der Formeleditor erlaubt Variablen mit mehreren Buchstaben. Beispiele:&lt;br /&gt;
* Für &amp;lt;code&amp;gt;ca^4&amp;lt;/code&amp;gt; wird als die Variable &#039;&#039;ca&#039;&#039; hoch 4 interpretiert.&lt;br /&gt;
* &amp;lt;code&amp;gt;x*y^2&amp;lt;/code&amp;gt; führt zu &amp;lt;code&amp;gt;x*y*y&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;x*yz^2&amp;lt;/code&amp;gt; wird als die Variable &#039;&#039;x&#039;&#039; multipliziert mit der Variable &#039;&#039;yz&#039;&#039; hoch 2 interpretiert.&lt;br /&gt;
* &amp;lt;code&amp;gt;ab*ab&amp;lt;/code&amp;gt; führt zu &amp;lt;code&amp;gt;(ab)^2&amp;lt;/code&amp;gt;, wobei &amp;lt;code&amp;gt;ab&amp;lt;/code&amp;gt; wieder als &#039;&#039;&#039;eine&#039;&#039;&#039; Variable erkannt wird.&lt;br /&gt;
* &amp;lt;code&amp;gt;abc&amp;lt;/code&amp;gt; wird als Variable &#039;&#039;abc&#039;&#039; erkannt. Schreibt man aber &amp;lt;code&amp;gt;a*b*c&amp;lt;/code&amp;gt; werden alle drei Buchstaben als einzelne Variablen erkannt.&lt;br /&gt;
&lt;br /&gt;
====Besondere Zeichen====&lt;br /&gt;
&amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;: Fügt in einem Fill-In-Feld mit Formeleditor einen Bruch ein.&lt;br /&gt;
&lt;br /&gt;
=== Chemie Formeleditor ===&lt;br /&gt;
[[File:Formeleditor-Chemie.jpg|thumb|Beispiel mit der Palette &amp;quot;palette_chemical_reaction_equation&amp;quot;]]&lt;br /&gt;
Für Chemie stehen die beiden Formeleditoren &#039;&#039;invisibleChem&#039;&#039; und &#039;&#039;palette_chemical_reaction_equation&#039;&#039; zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Durch Tippen von Großbuchstaben (optional gefolgt durch einen Kleinbuchstaben) können Atome angegeben werden.&lt;br /&gt;
* Durch &amp;lt;code&amp;gt;Shift + Pfeil unten&amp;lt;/code&amp;gt; kann die Anzahl der Atome in einem Molekül erreicht werden.&lt;br /&gt;
* Durch &amp;lt;code&amp;gt;Shift + Pfeil oben&amp;lt;/code&amp;gt; kann die Ladung des Moleküls angegeben werden.&lt;br /&gt;
* Operatoren &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; stehen zur Verfügung.&lt;br /&gt;
* Ganzzahlen können verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Die Palette &#039;&#039;palette_chemical_reaction_equation&#039;&#039; beinhaltet Elemente um Oxidationszahlen anzugeben und die Elemente, die mit &amp;lt;code&amp;gt;Shift + Pfeiltaste&amp;lt;/code&amp;gt; erzeugbar sind. Diese können mit einem Mausklick eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
===Weitere Links===&lt;br /&gt;
* [[Formeleditor Paletten (JACK3)|Formeleditor-Paletten]]&lt;br /&gt;
* [[Fill-In (JACK3)|Fill-In]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Benutzerhandbuch]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=RandomUniqueIntegersBetween&amp;diff=12108</id>
		<title>RandomUniqueIntegersBetween</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=RandomUniqueIntegersBetween&amp;diff=12108"/>
		<updated>2025-03-04T07:34:43Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Vorlage:Warnung|Warnung=Diese Seite ist beinhaltet eine Evaluatorfunktion für JACK3.}}&lt;br /&gt;
&lt;br /&gt;
===Zugehörige Evaluatoren===&lt;br /&gt;
*&#039;&#039;&#039;MathEvaluator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Beschreibung===&lt;br /&gt;
Die Funktion &#039;&#039;randomUniqueIntegersBetween&#039;&#039; zieht eine vorgegebene Anzahl an zufälligen und unterschiedlichen [[Ganzzahl|Ganzzahlen]] aus einem vorgegebenen Bereich. Es werden keine Zahlen doppelten gezogen. Die gezogenen [[Ganzzahl|Ganzzahlen]] sind dabei inklusiv der unteren Grenze und exklusiv der oberen Grenze. Die Anzahl zu ziehender Zahlen darf nicht größer als der Abstand zwischen der unteren und oberen Grenze sein.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
 randomUniqueIntegersBetween(int anzahl, int untereGrenze, int obereGrenze)&lt;br /&gt;
&lt;br /&gt;
===Parameter===&lt;br /&gt;
* &#039;&#039;&#039;anzahl&#039;&#039;&#039; - [[Ganzzahl]] Anzahl an Zufallszahlen&lt;br /&gt;
* &#039;&#039;&#039;untereGrenze&#039;&#039;&#039; - [[Ganzzahl]] untere Grenze (inklusiv)&lt;br /&gt;
* &#039;&#039;&#039;obereGrenze&#039;&#039;&#039; - [[Ganzzahl]] obere Grenze (exklusiv)&lt;br /&gt;
&lt;br /&gt;
===Return Value===&lt;br /&gt;
* Gibt eine [[List|Liste]] zurück, welche aus [[Ganzzahl]]en besteht.&lt;br /&gt;
&lt;br /&gt;
===Beispiele===&lt;br /&gt;
 randomUniqueIntegersBetween(2, 2, 6)    --&amp;gt; returns (zum Beispiel) 2, 4 &lt;br /&gt;
 &lt;br /&gt;
 randomUniqueIntegersBetween(3, 1, 10)    --&amp;gt; returns (zum Beispiel) 3, 7, 8 &lt;br /&gt;
 &lt;br /&gt;
 randomUniqueIntegersBetween(1, 4, 10)    --&amp;gt; returns (zum Beispiel) 9&lt;br /&gt;
&lt;br /&gt;
===Hinweise===&lt;br /&gt;
* Weitere Funktionen die zufällig Zahlen ziehen sind: [[random]], [[randomBetween]], [[randomIntegerBetween]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Math-Evaluatorfunktion]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
	<entry>
		<id>https://wiki.uni-due.de/jack/index.php?title=Vorlage:Navigation/Geometriefunktionen&amp;diff=12107</id>
		<title>Vorlage:Navigation/Geometriefunktionen</title>
		<link rel="alternate" type="text/html" href="https://wiki.uni-due.de/jack/index.php?title=Vorlage:Navigation/Geometriefunktionen&amp;diff=12107"/>
		<updated>2025-02-27T10:38:39Z</updated>

		<summary type="html">&lt;p&gt;LGlaser: Reihenfolge geändert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{Navigation&lt;br /&gt;
| TITEL  = Funktionen mit Koordinaten&lt;br /&gt;
| INHALT = &lt;br /&gt;
Geometrische Figuren:&lt;br /&gt;
[[Coordinate]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[Circle]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[Polygon]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[Rectangle]]&lt;br /&gt;
&lt;br /&gt;
Prüfen von Koordinaten:&lt;br /&gt;
[[IsCoordinateInCircle]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[IsCoordinateInPolygon]]&amp;amp;nbsp;&amp;amp;bull;&lt;br /&gt;
[[IsCoordinateInRectangle]]&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Navigationsvorlagen|Koordinatenfunktionen]]&lt;/div&gt;</summary>
		<author><name>LGlaser</name></author>
	</entry>
</feed>