1072 |
gehalt |
Informationsgehalt |
Kategorie: | Statistik |
Klasse: | leicht |
Eingabe: | float |
Ausgabe: | float im Fixpunktf. |
|
Abzugebende Files: gehalt.txt, gehalt.java |
Kurzbeschreibung:
Der Informationsgehalt der Zeichen eines Alphabets soll berechnet 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:
Lesen Sie eine Folge von Zahlen ein, die die Auftrittswahrscheinlichkeiten
von Zeichen darstellen.
Berechnen Sie für jedes dieser Zeichen den Informationsgehalt, wobei Sie
nach folgender Formel vorgehen sollen:
Sei p die Auftrittswahrscheinlichkeit eines Zeichens, so ist
h=ld(1/p)
wobei h den Informationsgehalt und ld den logarithmus dualis (Logarithmus
zur Basis 2) bezeichnet. Den natürlichen Logarithmus, den Sie zur Berechnung des ld benötigen, finden Sie in der Klasse java.math
Eingabedaten:
Lesen Sie die Auftrittswahrscheinlichkeiten als Float-Zahlen ein, wobei diese
zwischen 0 und 1 (exclusive 0, inclusive 1)liegen müssen. Durch die Eingabe einer negativen Zahl wird die Folge beendet. Diese negative Zahl ist selbstverständlich nicht als Fehler zu betrachten.
Die Zahlenfolge muß aus mindestens einer Zahl und maximal 10 Zahlen bestehen.
Ausgabedaten:
Bei korrekten Eingabedaten ist der Informationsgehalt der einzelnen Zeichen,
jeweils getrennt durch ein Leerzeichen, auszugeben, anschließend ein Zeilenvorschub.
Fehlerbehandlung:
Sämtliche Eingabedatensätze sind immer vollständig einzulesen.
Generell wird bei fehlerhaften Eingabedatensätzen nur eine einzige Fehlermeldung erzeugt, weitere Berechnungen werden nicht mehr durchgeführt.
Enthält der Eingabedatensatz einen ungültigen Datentyp, so soll einmal das Zeichen "?", gefolgt von einem Zeilenvorschub, ausgegeben werden.
Sind die Datentypen bei allen Eingaben richtig, die
eingegebenen Daten aber inhaltlich nicht korrekt oder erfüllen nicht die
Bedingungen, so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.
Beispiele:
Eingabedaten
|
0.5 0.25 0.25 -1.0
1.2 0.24 0.6 -1.0
|
Ausgabedaten
|
1.000 2.000 2.000
FALSCHE EINGABE
|
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 gehalt < gehalt.i1 > gehalt.out1
Das erzeugte File gehalt.out1 können Sie dann mit dem mitgelieferten Outputfile gehalt.o1 vergleichen.