1112 |
runlen |
Das Runlength Verfahren |
Kategorie: | String |
Klasse: | schwer |
Eingabe: | String |
Ausgabe: | String |
|
Abzugebende Files: runlen.txt, runlen.java |
Kurzbeschreibung:
Das Runlength-Verfahren stellt eine einfache Methode zur Datenkompression dar,
bei der mehrfach hintereinander auftretende Zeichen durch Angabe eines Wiederholungsfaktors zusammengefaßt werden.
Allgemeine Hinweise:
-
Ihr Programm darf nur genau jene Ausgabedaten liefern, die in der Spezifikation
verlangt werden. Die Ausgaben Ihres Programmes werden automatisch mit
Referenzdaten verglichen; etwaige Abweichungen führen zu Punkteabzügen!
-
Testen Sie Ihr Programm vor der Abgabe mit der mitgelieferten Eingabedatei.
Geben Sie Ihre Lösung erst ab, wenn die Ausgaben Ihres Programmes mit der
ebenfalls mitgelieferten Ausgabedatei übereinstimmen! Testen Sie Ihr
Programm auch mit anderen Eingabedaten.
-
Verwenden Sie nur das von uns mitgelieferten Package eprog
für Ihre Ein/Ausgaben. Programme, 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 mit 0 Punkten bewertet!
-
Schreiben Sie Ihr Programm möglichst allgemein und kommentieren Sie es gut.
Erstellen Sie weiters eine übersichtliche und verständliche Dokumentation.
Damit erhöhen Sie Ihre Chancen, daß andere Studenten in den nächsten Runden
Ihr Programm wählen und Ihnen damit zu Zusatzpunkten verhelfen!
Aufgabenstellung:
Ihr Programm soll Strings einlesen, diese nach dem Runlength-Verfahren codieren
und das Ergebnis der Codierung ausgeben. Dieses Verfahren funktioniert wie
folgt: Zeichen, die im String 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; wenn dieses
Zeichen im Eingabestring vorkommt, so wird dies durch Verdoppelung '' (zwei
einfache Hochkomma hintereinander) dargestellt.
Am Anfang jedes Datensatzes ist das Programm im Singlemodus; der Multimodus
darf nur verwendet werden, wenn tatsächlich mehrere gleiche Zeichen hintereinander auftreten. Wenn mehrere Gruppen gleicher Zeichen unmittelbar aufeinanderfolgen, so wird nur einmal in den Multimodus umgeschalten und erst beim
nächsten "Einzelgänger" zurückgeschalten.
Es nicht erwünscht, gefordert oder einer positiven Beurteilung zuträglich, am
Ende der Kodierung in den Singlemodus zurückzuschalten, falls das Programm im
Multimodus war.
Eingabedaten:
Lesen Sie Strings mit einer maximalen Länge von 30 Zeichen ein. Längere
Strings sind als fehlerhafte Daten zu bewerten. Ebenfalls inkorrekt sind
Datensätze, in denen ein Zeichen öfter als 9 mal hintereinander auftritt.
Ausgabedaten:
Bei korrekten Eingabesätzen soll Ihr Programm das Ergebnis der Codierung,
gefolgt von einem Zeilenvorschub, ausgeben.
Fehlerbehandlung:
Generell wird bei fehlerhaften Eingabedatensätzen nur eine einzige Fehlermeldung erzeugt, weitere Berechnungen werden nicht mehr durchgeführt.
Sind eingegebenen Daten inhaltlich nicht korrekt oder erfüllen nicht die
Bedingungen, so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.
Beispiele:
Eingabedaten
|
abbbab
abcde
|
Ausgabedaten
|
a'b3'ab
abcde
|
Bemerkung: 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 runlen < runlen.i1 > runlen.out1
Das erzeugte File runlen.out1 können Sie dann mit dem mitgelieferten Outputfile runlen.o1 vergleichen.