Montag, 26. Mai 2014

 

Worthäufigkeiten mit binärem Baum ermitteln (POS1: 2BHIF)

Erstellen Sie ein Java-Programm welches für jedes gelesene Wort bestimmt, wie oft es vorkommt. Nach dem Ende der Eingabe (EOF) ist eine Liste von Worten und deren Häufigkeiten auszugeben.
Ein Beispiel, gegeben sei folgende Eingabe:

Das ist die erste Zeile und
das ist die zweite Zeile und
hier folgt die dritte Zeile.
Satzzeichen gelten als Trenner.
Folgendes ist kein W0rt und das
4uch nicht.

Das Programm soll dann diese Ausgabe liefern.

als 1
Das 3
die 3
dritte 1
erste 1
Folgendes 1
folgt 1
gelten 1
hier 1
ist 3
kein 1
nicht 1
Satzzeichen 1
Trenner 1
und 3
Zeile 3
zweite 1

Es erzeugt also eine Liste von Worten (in der zuerst vorkommenden Schreibweise), mit der Anzahl der Vorkommnisse.
Das Programm soll von der Standardeingabe oder von beliebig vielen Dateien lesen.
Zur Erkennung von Wörtern lesen Sie hier: Wörter in der Eingabe erkennen

Verwenden Sie dazu einen binären Baum für die Wörter.
Nennen Sie das Projekt hauf.

Labels: , ,


Montag, 5. Mai 2014

 

Rekursionen (POS1: 2BHIF)

Implementieren Sie in einem Paket recursion Klassen mit Testmethoden für folgende Aufgabenstellungen:

  1. Fakultät: 0! = 1, 1! = 1, n! = n * (n -1)
  2. Fibonaccizahlen: fib(0) = 0, fib(1) = 1, fib(n) = fib(n - 1) + fib(n - 2)
  3. McCarthys 91: f(n) = n-10, wenn n > 100 bzw. f(f(n+11)) für allen anderen n.
  4. Bestimmen Sie ob eine Zahl gerade oder ungerade ist, in dem Sie zwei indierekt rekursive Funkionen boolean istUngerade(int n) und boolean istGerade(int n) verwenden.
  5. Implementieren Sie den Euklidischen Algorithmus zum Finden des größten gemeinsamen Teilers zweier Zahlen.

Floodfill

Aus Wikipedia: Floodfill bzw. Flutfüllung ist ein Begriff aus der Computergrafik. Es ist ein einfacher Algorithmus, um Flächen zusammenhängender Pixel einer Farbe in einem digitalen Bild zu erfassen und mit einer neuen Farbe zu füllen.

Ausgehend von einem Pixel innerhalb der Fläche werden jeweils dessen Nachbarpixel darauf getestet, ob diese Nachbarpixel auch die alte Farbe enthalten. Jedes gefundene Pixel mit der alten Farbe wird dabei sofort durch die neue Farbe ersetzt.
Zwei Varianten des Algorithmus sind gängig:

  1. Es werden jeweils die vier benachbarten Pixel oben, unten, links und rechts vom Ausgangspunkt untersucht.
  2. Es werden jeweils die acht benachbarten Pixel oben, unten, links, rechts, oben-links, oben-rechts, unten-links und unten-rechts vom Ausgangspunkt untersucht.

Legen Sie ein neues Package floodfill an und Erstellen Sie die beiden Klassen Grafik und Logik mit dem unten angegebenen Source-Code (Dank an W. Schermann).

Speichern Sie die folgenden beiden Bilder in einem Ordner images im Ordner des Projektes.

Implementieren Sie in der Logik eine rekursive Funktion zum Füllen eines Bildabschnittes (In 4 Richtungen und alternativ in 8 Richtungen). Rufen Sie die rekursive Funktion aus der Funktion run aus auf. Sie können folgende Funktionen der Grafik-Klasse verwenden.

public Color getColor(int x, int y) //Bildfarbe abfragen
public void setColor(int x, int y, Color c) //Bildfarbe ändern

Der Algorithmus ist hoch-rekursiv. Daher besteht ein hohes Risiko, dass der Algorithmus zu einem Stack-Überlauf führt. (Z.B. beim Hintergrund)

Um die Übung ohne trotzdem komplett testen zu können kann die Stack-Größe in Java verändert werden. In Eclipse kann dies bei den Argumenten der Virtual-Machine in den Run-Konfigurationen eingestellt werden. Mit -Xss5M wird der Stack-Speicher auf 5 Megabyte gesetzt.

Beachten Sie die eventuellen "Fehler" beim Füllen mit dem Algorithmus für 8 benachbarte Pixel.

Labels: , , ,


This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]