MORSEN---

Das Programm enthält ausreichend Kommentare




Kurzbeschreibung:

Ein Morsecode soll in Plain-Text (unverschlüsselten Text) zurückverwandelt werden. 

 
Aufgabenbeschreibung:
Die Aufgabe besteht darin, einen Morsecode zurückzuverwandeln in lesbare Form. 
Das Alphabet des Morsecodes umfasst drei Zeichen. Ein kurzes und ein langes Signal 
sowie ein Pausezeichen um die einzelnen Zeichen voneinander unterscheiden zu können. 
Im Programm werden die drei Zeichen repräsentiert durch "." (Punkt für kurzes Signal) 
"-" (Strich für langes Signal) und "!" (Rufezeichen für Pause). 
Das Programm soll mit dem Standardalphabet, Ziffern und einige Satzzeichen 
umgehen können. Im folgenden eine Auflistung des zu verwendenden Alphabets: 

Alphabet... (max. 4 codierte Zeichen) 
.-  A --. G --  M ... S -.--  Y 
-...  B .... H -.  N -  T --.. Z 
-.-. C ..  I --- O ..- U     
-..  D .---  J .--.  P ...- V     
.  E -.-  K --.-  Q .-- W     
..-.  F .-.. L .-.  R -..-  X     


Ziffern... (5 Zeichen) 
.---- 1 -.... 6 
..---  2 --...  7 
...--  3 ---.. 8 
....- 4 ----.  9 
..... 5 -----  0 


Satzzeichen... (6 Zeichen, bestehen aus mehreren Buchstaben) 
Punkt (.) .-.-.- (AAA)  
Beistrich (,) --..-- (MIM) 
Fragezeichen (?) ..--.. (IMI) 
Doppelpunkt (:) ---... (OS) 


Eingabedaten:
Eingelesen wird ein Morsecode, dieser umfasst ausschliesslich die erlaubten Zeichen 
des Morsecodes (".","-","!"). Sämtliche andere Zeichen (auch Spaces) sind nicht erlaubt 
und sollen mit einer Fehlermeldung quitiert werden (Siehe Fehlerbehandlung). Die 
Eingabe soll mit einem Pausezeichen beginnen, dann folgt das erste Zeichen in codierter 
Form, gefolgt wiederum von einem Pausezeichen. Zu beachten ist, dass die Zeichenfolge 
eine Länge von 100 Zeichen nicht überschreitet. 

Ausgabedaten: 
Das Programm muss nun den Morsecode in Plain-Text umwandeln. Der Morsecode wurde unter 
den Gesichtspunkten möglichst hoher Performance erstellt. Die einzelnen Zeichen sind 
dabei so codiert, dass Zeichen mit hoher Auftretenswahrscheinlichkeit entsprechend wenige 
Zeichen für die Übertragung brauchen. In die Überlegungen miteinbezogen wurde dabei auch 
Tatsache, dass die Übertragung eines langen Signals drei mal länger benötigt, als die 
Übertragung eines kurzens. Der Code ist also darauf ausgelegt ein Maximum an Informationen 
zu übertragen. Um nun diese Eigenschaften des Morsecodes auch bei der Decodierung 
auszunützen ist ein Codebaum, ausgehend vom Pausezeichen zu erstellen, der sich in "-" und 
"." Äste verzweigt. Aus dem Eingabestring ist sodann die Zeichenfolge bis zum ersten 
Pausezeichen zu extrahieren. Nun kann der Codebaum entsprechend abgegangen werden. Man beginnt 
bei der Wurzel, dem Pausezeichen. Tritt als erstes codiertes Zeichen ein Punkt auf, so wendet 
man sich dem Punkt-Teil des Baumes zu, andernfalls dem Strichteil. Mit dem zweiten codierten 
Zeichen wird ebenso verfahren. Dies wird solange ausgeführt bis das erste Zeichenfolge vollständig 
abgearbeitet wurde. Nun hat man das entsprechende Zeichen im Plaintext gefunden. Es ist die 
Stelle im Baum wo man sich gerade befindet. Ist der Baum allerdings zu Ende, bevor alle 
Zeichen abgearbeitet wurden, so handelt es sich um eine fehlerhafte Codierung (siehe Fehlerbehandlung). 
Dieser Vorgang wird solange ausgeführt, bis sämtliche codierte Zeichen abgearbeitet sind. 
Die eleganteste Art dies zu lösen ist eine rekursive Programmierung. Ausgeben werden soll die 
Plaintext-Messages als String, gefolgt von einem Zeilenvorschub. 

Fehlerbehandlung:
Als fehlerhafte Eingabe sind sämtliche Zeichen aufzufassen, die nicht aus dem Morsecode-Alphabeth 
entstammen. Ebenso kann als Fehler auftreten, dass eine (Teil-)Zeichenfolge des Codes keine 
Entsprechung im Plaintext-Alphabet hat. Tritt ein solcher Fall auf, so ist die Meldung "FALSCHE EINGABE" 
gefolgt von einem Zeilenvorschub auszugeben. 

Beispiele:
Eingabedaten  
!....!.!.-..!.-..!---!.--!---!.-.!.-..!-.. 

--------------------------------------------------------------------------------
.......... 

--------------------------------------------------------------------------------
 
Ausgabedaten  
HELLOWORLD 

--------------------------------------------------------------------------------
FALSCHE EINGABE 

--------------------------------------------------------------------------------
 




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 Main < morsen.i1 > morsen.out1

Das erzeugte File morsen.out1 können Sie dann mit dem mitgelieferten Outputfile morsen.o1 vergleichen.