|
|
Eingabeaufgaben
|
|
|
------------------
|
|
|
Eine Eingabeaufgabe ist eine Aufgabe, bei der ein Student eine für ihn einzigartige Eingabe generiert bekommt. Mit dieser Eingabe muss er die ihm gestellte Aufgabe lösen und bekommt einen Text als Ergebnis, den er dann auf Dozentron als Lösung abgibt. Diese Tests haben den Vorteil, das der Student sie in einer beliebigen Programmiersprache lösen kann.
|
|
|
|
|
|
Für einen Eingabetest wird ein Programm zum generieren von Eingaben und eine "Musterlösung" benötigt. Der Generator ist ein ausführbares Java-Programm, dass eine Eingabe für den Studenten auf die Standardausgabe schreibt.
|
|
|
|
|
|
Beispiel für eine Einfache Aufgabe: Zähle wie viele "|" für dich generiert wurden.
|
|
|
|
|
|
```java
|
|
|
package de.thm.mni;
|
|
|
|
|
|
/**
|
|
|
*
|
|
|
*/
|
|
|
public class BeispielGenerator {
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
int length = (int) (Math.random() * 10) + 2;
|
|
|
StringBuilder out = new StringBuilder();
|
|
|
|
|
|
|
|
|
for (int i = 0; i < length; i++)
|
|
|
out.append('|');
|
|
|
|
|
|
System.out.println(out.toString());
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
Die "Musterlösung" ist ein Programm, dass die Eingabe von einem Student und seine Lösung als 2 Programmargumente bekommt:
|
|
|
|
|
|
* input=<Pfad zu einer Datei mit der Eingabe des Studenten>
|
|
|
* student-output=<Pfad zu einer Datei mit dem Ergebnis des Studenten>
|
|
|
|
|
|
Die "Musterlösung" muss auch ohne Argumente ohne Fehler beenden, dies wird von dem Plugin als Indiz gesehen, dass sie richtig implementiert wurde. Um anzugeben ob das Ergebnis eines Studenten richtig oder falsch war, wird die Standardausgabe verwendet.
|
|
|
* Wenn die Standardausgabe von der "Musterlösung" leer ist, dann wird angenommen, dass das Ergebnis korrekt ist.
|
|
|
* Wenn etwas auf die Standardausgabe geschrieben wird, wird angenommen, dass das Ergebnis falsch ist und die Ausgabe wird dem Studenten als Grund angezeigt.
|
|
|
|
|
|
```java
|
|
|
package de.thm.mni;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.nio.file.Files;
|
|
|
import java.nio.file.Paths;
|
|
|
import java.util.Arrays;
|
|
|
|
|
|
/**
|
|
|
* Beispiel für eine "Musterlösung" von einem Eingabetest in Java.
|
|
|
*/
|
|
|
public class BeispielLoesung {
|
|
|
public static void main(String[] args) throws IOException {
|
|
|
// Sicher gehen, dass wir ohne Parameter ohne Fehler beenden.
|
|
|
// Das Eingabetest Plugin benutzt diese Information als Indiz, dass wir die "Musterlösung" richtig geschrieben haben.
|
|
|
if(args.length == 0)
|
|
|
System.exit(0);
|
|
|
|
|
|
String inputFile = null;
|
|
|
String studentOutputFile = null;
|
|
|
|
|
|
for(String arg : args) {
|
|
|
if(arg.startsWith("input=")) {
|
|
|
inputFile = arg.substring("input=".length());
|
|
|
}
|
|
|
|
|
|
if(arg.startsWith("student-output=")) {
|
|
|
studentOutputFile = arg.substring("student-output=".length());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
String input = new String(Files.readAllBytes(Paths.get(inputFile)));
|
|
|
int expectedOutput = input.trim().length();
|
|
|
int gotOutput;
|
|
|
try {
|
|
|
gotOutput = Integer.parseInt(new String(Files.readAllBytes(Paths.get(studentOutputFile))).trim());
|
|
|
|
|
|
// Schreibe den Grund für einen Misserfolg auf die Standardausgabe
|
|
|
if(expectedOutput > gotOutput)
|
|
|
System.out.println("Die gesuchte Zahl ist größer!");
|
|
|
else if(expectedOutput < gotOutput)
|
|
|
System.out.println("Die gesuchte Zahl ist kleiner!");
|
|
|
} catch(NumberFormatException e) {
|
|
|
System.out.println("Abgabe muss eine Zahl sein!");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
Um die Aufgabe auf Dozentron zu erstellen, werden der Generator und die "Musterlösung" zu ausführbaren Jar-Dateien gepackt. Diese Jar-Dateien werden dann auf Dozentron als Generator und "Test" angegeben.
|
|
|
|
|
|
![new-input-output](/uploads/c4b56325f8156a71f60feda91486a488/new-input-output.png) |
|
|
\ No newline at end of file |