![]() |
Computerorientierte Mathematik |
![]() |
Inhalt ![]()
![]() |
- 1. und 2. Programmieraufgabe - Version Stand 03. Mai 2002. Änderungen gegenüber älteren Versionen sind rot gekennzeichnet. Aufgrund des doch sehr grossen Umfangs haben wir uns entschlossen, die ersten beiden Programmieraufgaben etwas umzuformulieren und die Abgabefristen entsprechend zu verlängern.
Der erste Teil (Programm 1) ist bis Montag, den 06.Mai 2002
vorzuführen. Erster Teil (Programm 1)Alle, die die bisherige Aufgabe noch nicht abgegeben haben halten sich bitte an die folgende Aufgabe. Alle anderen müssten jedoch für die zweite Aufgabe jedoch einige Schritte des Folgenden nachholen. VorbereitungenGeorg hatte bereits einige Emails herumgeschickt mit ein paar Einstellungen, die ihr in eurem Account machen solltet. Hier nochmal die Zusammenfassung: In Java gibt es das Konzept der Packages, um etwas mehr Klarheit in dem Programmtext zu schaffen. Damit ihr auch etwas davon habt muss aber noch etwas getan werden:
Packages
Kopiert zunächst die Packages in euren Bereich: Oberfläche
Ihr braucht keine eigene Oberfläche schreiben, wir geben Euch
eine vor.
Kopiert dazu zunächst die Dateien
ContainerApplication.java
und
ContainerUtilities.java
in euer Verzeichnis Falls ihr die Version vor dem 03. Mai kopiert habt, kommentiert in der ContainerAppplication bitte zunächst die Zeile 370 aus: iterator = new ConstForwardFilterIterator(iterator, p); In der späteren Version braucht das nicht getan werden, da dort noch mehr Klassen dynamisch (zur Laufzeit) geladen werden.
Auf alle Fälle müsst ihr aber in ContainerUtilities alle Aufgabe
Nun schreibt ihr Eure Listen-Klasse (plus Iterator), z.B. im selben
Verzeichnis. Implementiert dazu die Schnittstellen
Schreibt nun folgende Comparatoren (
Die Comparatoren sollen jeweils eine
Nun könnt ihr mit Hilfe der Comparatoren den
MergeSort-Algorithmus schreiben. Dieser soll das Interface
Zum einfachen Testen von eurem MergeSort schreibt eine
Nun sollt ihr noch BucketSort für Listen von Strings schreiben.
Dieser Algorithmus soll auch wieder
Ihr werdet sicherlich mit der String s = "Hallo"; char c=s.charAt(0); int i = (int)(c- `A`); // i hat Wert 7 char d = s.charAt(1); int j= (int)(d-'a'); // j hat Wert 0
Hinweis: es gilt ContainerApplicationWenn ihr nun alles übersetzt habt (javac *.java ),
dann könnt ihr euren code testen, indem ihr
java ContainerApplication DoubleLinkedList ccc.array.ConstContainerArray -s MergeSort ccc.util.QuickSort ccc.util.SelectionSort -o StringComparator StringUpperComparator StringBackComparator StringBackUpperComparator(alles in einer Zeile, Namen der Klassen evtl. anpassen) eintippt. All die Klassen, die ihr angebt, werden dann dynamisch eingebunden und sind in der Application verwendbar. Ihr könnt zusätzlich die Option -e angeben, dann werden evtl. Exceptions auf der Console ausgegeben, was das Debuggen eures Codes erleichtert. Bedenkt, dass alle Exceptions, die auftreten entweder an eurem Programm-Code oder an Inkompatibilitäten der Klassen und Algorithmen liegt. Zweiter Teil (Programm 2)Wenn ihr Aufgabe 1 wie oben beschrieben erledigt habt, könnt ihr direkt weiter machen, so wie auf dem Aufgabenblatt. ContainerUtilities
Wir haben euch für die Klasse gefilterte IteratorenOftmals ist man nicht daran interessiert, etwas mit allen Elementen eines Containers zu machen, sondern nur mit einigen bestimmten. Um sich die Auswahl der Elemente zu erleichtern, schreibt man dann einen sogenannten FilterIterator, der in geeigneter Weise die Eigenschaften der gesuchten Elemente kennt (ein sogenanntes Prädikat), und dann nur auf solchen Elementen stehen bleibt, die dieses Prädikat erfüllen. Um sich dabei Arbeit zu sparen, schreibt man einfach eine sogenannte Iterator-Wrapper-Klasse (to wrap = engl. umhüllen), die einen beliebigen Iterator und ein Prädikat erhält. Wenn man nun vorwärts gehen will, so bewegt diese Wrapper-Klasse den eigentlichen Iterator so lange vorwärts, bis er auf einem Element steht, das das Prädikat erfüllt.
Schreibt zunächst eine Klasse
Schreibt nun eine Klasse /** * Constructor. * Constructs a wrapper for a given Iterator with a given filter. */ ConstForwardFilterIterator (ConstForwardIterator iter, Predicate filt){ it = iter; filter = filt; if ((! it.isAtEnd()) && ! filter.hasProperty(it.getData())) increment(); }
Ausserdem soll euer Filteriterator auch das Interface
TestenIn der älteren Version der Test-Applikation: Entfernt zunächst die oben eingefügten Kommentare aus Zeile 370 in der ContainerApplication. Compiliert sie neu. Nun könnt ihr die Anwendung wie oben ausführen, gebt aber als zusätzliche Parameter an: -i ConstForwardFilterIterator -f UpperCasePredicate Zur ErinnerungBekanntlich kann man in einem kurzen Programm (Methode) weniger Fehler machen als in einem langen. Ersetzt nicht einen Fehler durch ständiges hinzufügen von weiten Zeilen durch zehn Fehler. Vergesst die | |||||||||||||||||||||||
![]() |
|