Informatik / TAMS / Applets / Jython Console / Zahlenwert-Aufgaben
Beschreibung
Diese Seite demonstriert die Überprüfung von Zahlenwert-Aufgaben und die möglichen Hilfestellungen für die Art von Aufgaben.

Die Antwort zu dieser Kategorie von Übungsaufgaben besteht in einfachen Zahlenwerten, so dass die Überprüfung auf Korrektheit in vielen Fällen durch einfachen Vergleich mit einer vorgegebenen Musterlösung erfolgen kann. Speziell für Anwendung in der technischen Informatik sollten die Zahlenwerte aber nicht nur im Dezimalsystem sondern zusätzlich auch in anderen Zahlensystemen akzeptiert werden; besonders wichtig sind natürlich Binärzahlen, Oktal- und Sedezimalzahlen (Hex). Die Demonstrationsbeispiele auf dieser Seite entsprechen Aufgaben aus Kapitel 1 des T1-Skripts.

Die Applets auf dieser Seite verwenden wieder die digital-signierte Version unserer interaktiven Jython-Console und laden bei Bedarf kleinere Jython-Skripte direkt vom Webserver nach. Abhängig von den Sicherheitseinstellungen Ihres Browsers bzw. ihres JREs bekommen Sie eventuell eine Nachfrage und Warnung. Bitte bestätigen Sie die Ausführung des signierten Applets.

Überprüfung von Zahlenwert-
Aufgaben

Aufgabe T1.1.3a: Berechnen Sie das Ergebnis der Addition 0x98c7 + 0x3237 im Hexadezimalsystem. Als Eingabeformat für Hex-Zahlen benutzen Sie bitte die Schreibweise mit vorangestelltem Prefix 0x (z.B. 0x0001) oder mit angehängtem Suffix _16 (z.B. affe_16).

Das folgende Applet enthält (ausnahmsweise) bereits die korrekte Lösung. Durch Ändern der Zeichenkette im Textfeld und anschließendes wiederholtes Anklicken des 'Überprüfen'-Knopfs lassen sich aber auch die übrigen Funktionen austesten:


Für falsche Antworten gibt es eine Vielzahl von unterschiedlichen Fehlermeldungen, die zugleich als Hilfestellungen dienen:






Funktionsprinzip
Die folgende Graphik veranschaulicht die Reihenfolge der verschiedenen Überprüfung innerhalb von NumberParser:


Das 'Klartext-Problem'
Damit die Klasse NumberParser universell verwendbar ist, können die zu überprüfenden Eigenschaften der korrekten Lösung über Parameter eingestellt werden. Im Rahmen unseres Konzepts für die interaktiven Skripte stehen den Studierenden gleichzeitig alle Quelltexte der einzelnen Skriptfunktionen zur Verfügung. Das bedeutet aber auch, dass den Studierenden die Quelltexte der Skripte zur Überprüfung der Übungsaufgaben zur Verfügung stehen --- mitsamt den dort im Klartext enthaltenen Parametern der korrekten Lösung.

Statt die Lösung der Aufgabe selbst zu berechnen, könnten die Studierenden daher auf die Idee kommen, einfach die passen Skriptdateien zu öffnen und die Lösung abzulesen. Dies gilt auch für die in den obigen Applets verwendete Funktion check_t1_1_3a. Mit wenig Aufwand lässt sich die zugehörige Textdatei in die Console oder ein neues Browserfenster laden, z.B. über diesen Link. Es ist klar, dass diese Art der Kodierung für Klausuren und prüfungsrelevante Aufgaben nicht in Frage kommt. Statt dessen ist es möglich, die Lösungsparameter nur in vorcompilierten Klassen zur Verfügung zu stellen oder solche Funktionen nur auf einem Server (ohne Quelltexte) vorzuhalten. Für den eigentlichen Einsatzzwecks, nämlich das selbständige Nacharbeiten und Vertiefen der Vorlesungsstoffes, ist die Option zum Nachschlagen der Lösung (im Quelltext) kein Problem. Als Zwischenlösung ist es möglich, die Parameter über Einsatz unserer Hilfsklassen wie NumberScrambler oder StringScrambler quasi zu verschlüsseln. Obwohl die Studierenden weiterhin Zugang zu den Quelltexten haben, sind die Lösungswerte jedoch nicht mehr trivial ablesbar:


Natürlich könnte man auch auf die Idee kommen, die vom interaktiven Skript selbst bereitgestellten Funktionen zur Lösung von Aufgaben auszunutzen. Zum Beispiel enhält das folgende Applet ein kleines Skript, dass mit einer Schleife einfach alle möglichen Lösungswerte von 51000 bis 52000 durchprobiert und anhält, sobald die Überprüfung eine korrekte Lösung signalisiert:


Wie das Beispiel zeigt, ist jedoch ein weitgehendes Verständnis der Aufgabenstellung notwendig (hier zum Beispiel die Formatierung der Anfragen als Hexadezimalzahlen), um ein solches Skript überhaupt formulieren zu können. Eine mögliche Abhilfe gegen derartige brute-force Attacken wäre eine Limitierung der von NumberParser innerhalb einer Zeitspanne bearbeiteten Anfragen. Dies ist jedoch bisher nicht implementiert.

28.07.2004 Impressum
http://tams-www.informatik.uni-hamburg.de/applets/jython/index.html