1150 hamming Hamming Code
Kategorie:MATHEMATIK
Klasse:schwer
Eingabe:String
Ausgabe:int
Abzugebende Files: hamming.txt, hamming.java

Kurzbeschreibung:

Eingelesene Datenbits werden im fehlerkorrigierenden Hammingcode codiert.

Allgemeine Hinweise:

Aufgabenstellung:

Der Hammingcode ist ein fehlerkorrigierender Code, der aus den Datenbits Prüfbits berechnet. Diese Prüfbits werden gemeinsam mit den Datenbits an den Empfänger des Codes gesendet. Der Empfänger kann dann wiederum aufgrund der Prüfbits feststellen, ob die Übertragung fehlerfrei abgelaufen ist, und einfache Fehler (nur ein Bit gestört) sogar korrigieren.

Der Algorithmus funktioniert folgendermaßen:

Die Bits des Codewortes werden mit 1 beginnend von links nach rechts durchnummeriert. Jene Bits, die Potenzen von 2 sind, also 1, 2, 4, 8 usw. sind Prüfbits. Die restlichen (3, 5, 6, 7, 9,... usw.) sind mit den Information tragenden Datenbits gefüllt.
Jedes Prüfbit ist ein Parity-Bit für eine bestimmte Menge von Bits. Ein Bit kann in Berechnungen verschiedener Prüfbits involviert sein. Um festzustellen, zu welchen Prüfbits ein bestimmtes Bit, nämlich das mit der Nummer k, einen Beitrag liefert, genügt es, k als Summe von Zweierpotenzen zu schreiben. Zum Beispiel 11 = 8 + 2 + 1 oder 29 = 16 + 8 + 4 + 1. (Mit anderen Worten: Die Zahl k wird in das Binärsystem umgerechnet).

Ein Bit liefert zu allen jenen Prüfbits einen Beitrag, deren Nummer in dieser Darstellung vorkommt. So wird etwa Bit 11 in den Berechnungen der Prüfbits 1, 2 und 8 berücksichtigt. Um nun ein Prüfbit zu ermitteln, werden alle Datenbits, die bei diesem Prüfbit zu berücksichtigen sind, mittels Exklusiv-Oder verknüpft.

Beispiel: Hammingcode der aus 4 Datenbits und aus 3 Prüfbits besteht:

Gleichung für das Prüfbit 1: P1 = x3 + x5 + x7
Gleichung für das Prüfbit 2: P2 = x3 + x6 + x7
Gleichung für das Prüfbit 4: P4 = x5 + x6 + x7

0+0=0
1+0=1
0+1=1
1+1=0

Anmerkung: Für das Exklusiv-Oder wird normalerweise ein Pluszeichen, das in einem Kreis liegt, geschrieben. Hier wurde das Zeichen + verwendet.

Eingabedaten:

Lesen Sie einen String mit einer maximalen Länge von 6 Zeichen ein. Dieser darf nur aus den Zeichen "0" und "1" bestehen und stellt die Datenbits dar, aus denen das Codewort gebildet werden soll.

Ausgabedaten:

Bei korrekten Eingabesätzen soll Ihr Programm die Prüfbits (und nur diese) liefern, und zwar P1, P2, P4 etc. Es sollen nur soviele Prüfbits ausgegeben werden, wie zur Codierung des Datenwortes notwendig sind.

Die einzelnen Prüfbits sind durch Leerzeichen zu trennen, am Ende des Datensatzes ist ein Zeilenvorschub auszugeben.

Fehlerbehandlung:

Wenn ein falscher String eingeben wird, soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.

Beispiele:

Eingabedaten
011011

100010

Ausgabedaten
0 0 0 0

0 1 0 1

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 hamming < hamming.i1 > hamming.out1

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