3059 |
Decode |
Decodierung |
Kategorie: | String |
Klasse: | mittel |
Eingabe: | siehe Spezifikation |
Ausgabe: | siehe Spezifikation |
|
Abzugebende Files: Decode.txt, Decode.java, *.java , 142.txt, 62.txt |
Kurzbeschreibung:
Ein komprimierter und codierter String soll entpackt und decodiert werden.
Allgemeine Hinweise:
-
Sie haben Lösungen (und Spezifikationen) aus der 1. Runde von anderen Studenten erhalten,
die Ihnen Ihre Aufgabe erleichtern sollen. Wählen Sie eine Lösung aus, die Ihnen hinsichtlich Lesbarkeit, Programmierstil,
Korrektheit und Verwendbarkeit am besten erscheint. Verwenden Sie
diese Lösung in Ihrem Programm. Sie können auch die anderen Lösungen einsetzen.
- Merken Sie sich die Lösungsnummer des ausgewählten Beispieles für die Abgabe. Diese Nummer müssen Sie bei der Abgabe angeben. Geben Sie nur jene Lösungsnummer an, die Sie auch wirklich ausgewählt haben.
-
Erstellen Sie für alle Lösungen zu diesem Beispiel (siehe: "Abzugebende Files") ein File mit dem Namen <number>.txt. und schreiben in dieses File ein Review (=Kritik) zu der Lösung. Diese Reviews erhalten dann die TeilnehmerIn von dem/der die Lösung stammt. Beachten Sie das bitte bei der Form Ihrer Kritik.
-
Sie können für die Lösung der gewählten Aufgabe eine oder mehrere Klassen programmieren. Die Klasse Decode.java muß aber die Methode main enthalten. Weiters müssen alle abgegebenen Klassenfiles in demselben Verzeichnis vorliegen, Pfadangaben sind nicht gestattet.
-
Achten Sie auf die korrekten Konventionen der Groß/Kleinschreibung bei
Klassen und Methoden!
[Wir tun das jetzt auch :-)]
-
Falls Ihre Lösung einen Exit Code zurueckliefert, so
achten Sie darauf, dass dieser den Wert 0 hat.
Bei allen anderen Werten können Probleme bei der Bewertung und in weiterer
Folge unbeabsichtigte Punkteabzüge auftreten.
- Ihre Lösung darf nur genau jene Ausgabedaten liefern, die in der
Spezifikation verlangt werden. Die Ausgaben Ihrer Lösung werden automatisch mit Referenzdaten verglichen; etwaige Abweichungen führen zu Punkteabzügen!
- Testen Sie Ihre Lösung vor der Abgabe mit der mitgelieferten Eingabedatei. Geben Sie Ihre Lösung erst ab, wenn die Ausgaben Ihrer Lösung mit der ebenfalls mitgelieferten Ausgabedatei übereinstimmen! Testen Sie Ihre Lösung auch mit anderen Eingabedaten.
-
Verwenden Sie nur das von uns mitgelieferten Package eprog
für Ihre Ein/Ausgaben. Klassen, die Packages oder Klassen ausserhalb der verwendeten Übungsumgebung (Java2, Standard Edition, Version 1.3.1_1) verwenden, können von uns
nicht getestet werden und werden daher mit 0 Punkten bewertet!
- Schreiben Sie Ihre Klasse(n) möglichst allgemein und kommentieren
Sie diese gut. Erstellen Sie weiters eine übersichtliche und
verständliche Dokumentation. Damit erhöhen Sie Ihre Chancen,
daß andere Studenten in der nächsten Runde Ihre Lösung
wählen und Ihnen damit zu Zusatzpunkten verhelfen!
Aufgabenstellung:
Lesen Sie einen String ein, der nach dem Runlength-Verfahren komprimiert
wurden und dekomprimieren sie diesen.
Die Runlength-Komprimierung funktioniert wie folgt: Zeichen, die wiederholt
vorkommen, werden durch eine nachgestellte Ziffer "vervielfacht". Dazu wird
zwischen zwei "Betriebsarten" unterschieden:
Im Singlemodus werden die Zeichen so übernommen, wie sie im Eingabestring
stehen; im Multimodus hingegen durch das Nachstellen einer Ziffer, die die
Häufigkeit angibt, vervielfacht. Der šbergang zwischen Single- und Multimodus
wird durch das Trennzeichen ' (einfaches Hochkomma) markiert.
Am Anfang jedes Datensatzes ist das Programm im Singlemodus; der Multimodus
wird nur verwendet, wenn tatsächlich mehrere gleiche Zeichen hintereinanderauftreten.
Wenn mehrere Gruppen gleicher Zeichen unmittelbar aufeinanderfolgen,
so wird nur einmal in den Multimodus umgeschalten und erst beim
nächsten "Einzelgänger" zurückgeschalten.
Sie müssen diesen Vorgang umdrehen. Danach haben Sie einen String vorliegen,
dessen Länge durch 8 teilbar sein muß und der nur aus den Ziffern "1" und "0"
bestehen darf (sonst liegt ein Eingabefehler vor).
Jeweils 8 dieser Ziffern bilden eine Binärzahl, die die Ordnungszahl (den
"ASCII"-Code) des zu ermittelnden Zeichens angibt. Ermitteln Sie die so
codierten Zeichen und geben Sie diese aus.
Eingabedaten:
Lesen Sie Strings ein, die nach der oben beschriebenen Methode codiert und
komprimiert sind. Nach der Dekomprimierung dürfen maximal 32 Binärziffern
vorliegen; daraus werden im zweiten Schritt maximal 4 Zeichen.
Die Ordnungszahlen dieser Zeichen müssen größer als 33 und kleiner als 122
sein.
Ausgabedaten:
Bei korrekten Eingabesätzen soll Ihr Programm das Ergebnis der Decodierung,
gefolgt von einem Zeilenvorschub, ausgeben.
Fehlerbehandlung:
Wenn ein falscher String eingeben wird, soll Ihr Programm "FALSCHE EINGABE",
gefolgt von einem Zeilenvorschub, ausgeben.
Beispiele:
Eingabedaten
|
01'05'1
01'05'101'04'10
|
Testen:
Diese Beispiele dienen nur zur Verdeutlichung der Spezifikation und
müssen nicht korrekt formatiert sein. Die korrekte Formatierung entnehmen Sie
bitte dem mitgelieferten Outputfile. Zum Testen Ihrer Lösung
können Sie aus den mitgelieferten Eingabedaten wie folgt eine Ausgabedatei
erzeugen:
java Decode < Decode.i1 > Decode.out1
Das erzeugte File Decode.out1 können Sie dann mit dem mitgelieferten Outputfile Decode.o1 vergleichen.