• Keine Ergebnisse gefunden

2. Programmieraufgabe Informatik II

N/A
N/A
Protected

Academic year: 2021

Aktie "2. Programmieraufgabe Informatik II"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Prof. Dr. R. Schrader WS 2002/2003 D. R¨abiger

2. Programmieraufgabe Informatik II

Online–Abgabe bis zum 12.01.2003

In den ¨Ubungen wurden pr¨afixfreie Codes eingef¨uhrt. Ein solcher ist der Huffman–Code, der auf dem 8.

Ubungsblatt behandelt wurde. Dort wurde ebenfalls der zugeh¨orige Algorithmus beschrieben. Der Huffman¨ Code wird u.a. in der Bildkomprimierung (z.B. in Teilen des JPEG–Verfahrens) eingesetzt. Die folgenden Uberlegungen sollen Ihnen helfen, den Algorithmus in C oder C++ zu implementieren.¨

Datenstruktur

F¨ur eine zu kodierende TeilmengeM des ASCII–Zeichensatzes bezeichnep(z)∈[0,1]die Wahrscheinlich- keit des Auftretens eines Zeichensz ∈M. Mitl(z)bezeichnen wir die L¨ange des zugeordneten Codewortes.

Damit definieren wir dann die durchschnittliche L¨ange des Codes durchLavg =P

zMp(z)·l(z). Zwischen je zwei Elementeny, z ∈M gelte die folgende Totalordnung:

y < z falls(p(y)< p(z))oder (p(y) = p(z)undyist lexikographisch kleiner alsz)

Dabei sei ASCII(z)der Wert des Zeichenszlaut ASCII–Tabelle. Verwenden Sie zur einfacheren Verwaltung der zu kodierenden Zeichen eine Priority Queue mit der oben beschriebenen Ordnung.

Aufgabenstellung

Implementieren Sie die folgenden Funktionen in einem Programm:

a) Das Programm soll einen Text aus einer Dateiinput.txteinlesen. Der Text kann alle Zeichen des ASCII–Codes enthalten, also z.B. alle Buchstaben, Ziffern und zul¨assigen Steuerzeichen.

b) Bauen Sie den Huffman–Baum auf:

1. Fassen Sie alle Zeichen des zu kodierenden Textes in einer MengeM zusammen (die Elemente dieser Menge bilden die Bl¨atter des Code-Baumes)

2. Finden Sie zwei Elementez1, z2 M mitz1 < z2 und kleinsten H¨aufigkeitenp(z1), p(z2), ver- schmelzen Sie sie zu einem neuen Elementz0 :=z1z2 und f¨ugen Sie diesesM hinzu. Außerdem:

p(z0) := p(z1) +p(z2). Das neue Element ist der Vater–Knoten des linken Sohnesz1 und des rechten Sohnesz2in dem Code–Baum.

3. Wiederholen Sie Schritt 2 so lange, bisM nur noch ein Element enth¨alt.

c) Erstellen Sie die Code–Tabelleh, indem Sie den Baum von der Wurzel durchmustern. F¨ur einen Schritt zum linken Sohn erweitern Sie den jeweiligen Code um eine0, f¨ur einen Schritt zum rechten Sohn um eine1. Das folgende Beispiel soll dieses Vorgehen verdeutlichen.

a b

c d

cd bcd

abcd h(a) = 0

h(b) = 10 h(c) = 110 h(d) = 111

Beispiel: der Huffman–Baum auf der linken Seite ordnet den einzelnen Zeichena, b, c, ddie Werte h(a), h(b), h(c), h(d)zu.

(2)

d) Geben Sie in einer Datei output.txt (achten Sie bei den Dateinamen auf Kleinschreibung!) die Elemente z1, . . . , zn M in alphabetischer Ordnung sowie (durch ein Semikolon getrennt) ihre Kodierungh(zi)entsprechend der Code–Tabelle aus:

1. Zeile: ASCII(z1);h(z1) 2. Zeile: ASCII(z2);h(z2) ... ...

n. Zeile: ASCII(zn);h(zn)

Die Zeilen werden durch das Zeilenumbruchszeichen (\n) getrennt.

ASCII(a)ist der Wert des Zeichensain der der ASCII–Tabelle, also z.B. entspricht ’t’ dem Wert 116. Falls Sie den ASCII–Wert einer Variablencvom Typunsigned charwissen m¨ochten, reicht ein sog. Cast aufint, also:

int asciiwert = (int)c;

Andersherum reicht ein Cast aufunsigned char:

unsigned char c = (unsigned char)asciiwert;

Achten Sie darauf, dass Sie keine in C oder C++ gesch¨utzten Begriffe verwenden. Auch C–Programme wer- den mittels eines C++ Compilers ¨ubersetzt! Solche gesch¨utzten Begriffe sind u.a.new, delete, class u.s.w.

Organisatorische Hinweise

Die L¨osung zur Programmieraufgabe wird online ¨uber das WWW1 abgegeben. Bei der Abgabe wird sofort gepr¨uft, ob sich das Programm korrekt kompilieren l¨asst. Außerdem wird anhand einer weiteren Testeingabe gepr¨uft, ob das Programm die erwartete Ausgabe liefert. Bei Fehlern erhalten Sie einen Hinweis auf den Fehler und k¨onnen diesen beheben, bevor Sie es erneut probieren. Ein Fehler mit dem Hinweissegmenta- tion faultweist auf einen Programmabsturz hin und ist ¨ublicherweise auf Speicherschutzverletzungen zur¨uckzuf¨uhren.

Außerdem wird die Ausgabe Ihres Programmes auf dem Standard–Ausgabe–Kanal angezeigt.

Eine Beispieldatei zur Eingabe kann ebenfalls auf den oben genannten Webseiten heruntergeladen werden.

Dort finden Sie auch eine Ausgabedatei, so dass Sie vor der elektronischen Abgabe vergleichen k¨onnen, ob Ihr Programm das erwaretete Ausgabeformat besitzt. Achten Sie auch darauf, dass keine unn¨otigen Leerzei- len am Anfang und Ende Ihrer Ausgabe entstehen.

Es wird Einzel–Abgabe erwartet. Die abgegeben Quelltexte werden auf ¨Ahnlichkeit untersucht. Bei T¨auschungs- versuchen werden beide betroffenen Personen keine Bonus–Punkte f¨ur den Programmierteil der Klausur erhalten.

Es ist ausdr¨ucklich erw¨unscht, dass die Mailingliste f¨ur Fragen und Antworten zu allgemeinen Problemen, die bei der Programmierung in C/C++ entstehen k¨onnen, genutzt wird. Dar¨uber hinaus sollen nat¨urlich keine L¨osungen f¨ur die konkrete Aufgabenstellung pr¨asentiert werden.

1Die Seiten zu den ¨Ubungen finden Sie unter

http://www.zaik.uni-koeln.de/AFS/teachings/courses/InfoII/uebungen.html

Referenzen

ÄHNLICHE DOKUMENTE

Abschließend werden die Zahlen dann mit der Standardausgabe (cout) zeilenweise (also pro Zeile genau eine Zahl und sonst keine weiteren Zeichen) aufsteigend sortiert

Dieser k¨ urzeste Weg wird als Liste von Knoten so angegeben, daß jeweils zwei aufeinanderfolgende Knoten in dieser Liste durch eine Kante verbunden sind.. Zum Beispiel: Auf dem

Termin: 20. b) Die zu verwendenden Symbole sind die Ziffern 0 bis 9 und die Buchstaben a-z und A-Z. Kleine und große Buchstaben sind als unterschiedliche Symbole betrachtet. c) Es

• bis zu 2,5 Millionen Euro, in Ausnahmefällen bis zu 3,5 Millionen Euro pro Grant (anteilig geringer für Projekte mit kürzerer Laufzeit). • maximal fünf Jahre

Einige der Pangäachen hatten zufällig einen längeren Hals, so dass sie über das Gras hinwegsehen konnten.. Sie fanden besonders viele Insekten und konnten sich besser fortpflanzen

Seine Präsentation enthält Informationen zum Anwendungsbereich und Inhalt der DSGVO, zu den Ausnahmen für Archivzwecke sowie zu einzelnen Maßnahmen die Archive ergreifen müssen,

Gesetz betreffend die Erwerbs- und Wirtschaftsgenossenschaften (GenG) - Auszug 98 Gesetz über die Beaufsichtigung der Versicherungsunternehmen (VAG) - Auszug 100 Gesetz über

Both designs ground on the fol- lowing typing behavior we observed on standard Qwerty soft key- boards: A user searches a letter on the key map, moves her finger to the letter and,