• Keine Ergebnisse gefunden

Programmieren II

N/A
N/A
Protected

Academic year: 2022

Aktie "Programmieren II"

Copied!
5
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 26. April 2013

Programmieren II

10. Übungsblatt

Hinweis: Insgesamt werden in diesem Semester fünf Pflichtaufgaben gestellt. Für die richtige und vollständige Lösung einer Pflichtaufgabe erhalten Sie sechs Übungspunkte.

Um die Prüfungsvorleistung bzw. die Studienleistung zu erbringen, müssen Sie mindestens 15 Übungspunkte erreichen. Dabei muss bei jeder Pflichtaufgabe mindestens ein Übungs- punkt erworben werden. Sie sollten die Aufgaben in Zweiergruppen bearbeiten. Nach der Abgabe müssen Sie die Lösung Ihrem Tutor in der Rechnerübung erläutern. Dieses Übungs- blatt enthält die erste Pflichtaufgabe. Ihre Lösung der Pflichtaufgabe dieses Übungsblatts müssen Sie bis spätestens zum 5. Mai 2013 auf der Web-Seite

http://abgabe.yafido.de abgeben.

Halten Sie sich bei der Programmierung an die in der Vorlesung vorgestellten Richtli- nien zur Formatierung von Java-Programmen. Auf der Internetseite zu dieser Veranstal- tung finden Sie eine Zusammenstellung dieser Richtlinien. Kommentieren Sie Ihre Lösung der Pflichtaufgabe. Der Kommentar muss Ihren Namen, Ihre Matrikelnummer und Ih- re Übungsgruppe sowie eine Beschreibung Ihrer Lösung enthalten. Auf der Abgabeseite finden Sie eine Möglichkeit, die Formatierung Ihrer Lösung zu checken.

Aufgabe 58: Als einführendes Beispiel in die Programmierung dynamischer Datentypen wurde in der Vorlesung die Schnittstelle

interface List { boolean isEmpty();

boolean isInList(Element x);

Element firstElement();

int length();

List insert(Element x);

List append(Element x);

List delete(Element x);

List delete();

}

durch verkettete Listen implementiert. Der Implementierung lag die folgende Strukturin- variante zu Grunde:

xn

x1 x2 . . .

L:

Das erste Element L der Liste ist ein „Zeiger“ auf die Liste, d. h., das erste Item-Feld wird nicht genutzt. Der letzte Zeiger ist „null“.

(2)

Die Schnittstelle List wird jetzt um die folgenden Methoden erweitert:

interface List { ...

List add(Element x, int n);

List remove(int n);

Element get(int n);

int firstIndexOf(Element x);

int lastIndexOf(Element x);

}

Die Methode add(Element x, int n) soll das Element x an Position n in die aktuelle Liste einfügen. Die Methoderemove(int n) soll das Element an Position n der aktuellen Liste löschen. Die Methodeget(int n)soll das Element an Positionn der aktuellen Liste liefern. Die Methoden firstIndexOf(Element x) und lastIndexOf(Element x) sollen den ersten bzw. letzten Index des Elements x der aktuellen Liste liefern. Vergleichen Sie hierbei Elemente durch die Methodeequals.

Implementieren Sie die erweiterte Schnittstelle List durch eine verkettete Liste. Die Strukturinvariante Ihrer Implementierung soll analog zur obigen Strukturinvariante sein, aber das erste Item-Feld nutzen. Achten Sie darauf, dass beim Aufruf jeder Methode die Strukturinvariante erhalten bleibt.

Es sind fehlerhafte Aufrufe möglich. Die Methode add(Element x, int n) könnte beispielsweise mit dem Wert 10 für den Parameter n aufgerufen werden, obwohl die Liste nur 2 Elemente enthält. In diesen Fällen soll eine IllegalArgumentException ausgelöst werden.

Kommentieren Sie Ihre Lösung und erzeugen Sie die Dokumentation mit dem Pro- grammjavadoc.

Aufgabe 59: In der Vorlesung wurde die Schnittstelle interface List {

boolean isEmpty();

boolean isInList(Element x);

Element firstElement();

int length();

List insert(Element x);

List append(Element x);

List delete(Element x);

List delete();

}

durch verkettete Listen und durch Felder implementiert. Diese Schnittstelle wird jetzt um die folgenden Methoden erweitert:

interface List { ...

(3)

List deleteAll(Element x);

List deleteLast();

Element maximum();

}

Die Methode insert(Element x, int n) soll das Element x an Position n in die ak- tuelle Liste einfügen. Die Methode swap(int m, int n) soll das m-te mit dem n-ten Element der aktuellen Liste durch Änderung der Verkettung vertauschen. Die Methode deleteAll(Element x) soll alle Elemente der aktuellen Liste entfernen, die den gleichen Inhalt wie der Parameter x besitzen. Die Methode deleteLast() soll das letzte Element der aktuellen Liste löschen. Die Methodemaximum()soll das größte Element der aktuellen Liste liefern.

Implementieren Sie die erweiterte Schnittstelle List. Verwenden Sie dabei statt einer einzelnen Klasse LinkedList die beiden folgenden KlassenNode und LinkedList:

public class LinkedList implements List { protected Node node;

...

}

public class Node {

protected Element item;

protected LinkedList next;

...

}

Lösen Sie die Aufgabe, indem Sie sich zuerst die Strukturinvariante der Implementierung klar machen.

Testen Sie Ihr Programm mit Beispielen der KlasseElement. Vervollständigen Sie dazu die Methoden equals, compareTo und toString:

public class Element implements Comparable<Element> { private int i;

public Element(int i) { this.i = i; } public boolean equals(Object x) { ... } public int compareTo(Element e) { ... } public String toString() { ... }

}

Aufgabe 60: Implementieren Sie die erweiterte Schnittstelle Listaus Aufgabe 59 durch Arrays.

Die vorherigen Aufgaben bieten Ihnen Übungsmöglichkeiten zur Listenimplementierung.

Die Pflichtaufgabe setzt eine Anwendung um.

(4)

Pflichtaufgabe 61: Viele Anwendungsprogramme (Beispiele:LibreOffice Calc,Excel, OpenOffice Calc, . . . ) bieten an, ihre Daten in einer CSV-Datei zu speichern.

Das Dateiformat CSV (comma separated values) ermöglicht es, einfach strukturierte Daten in einer Textdatei zu speichern. Typischerweise steht pro Zeile ein Datensatz. Ein Datensatz besteht aus mehreren Datenfeldern, die durch ein Zeichen, z. B. ein Semikolon, voneinander getrennt werden. Die Anzahl der Datensätze, d. h. der Zeilen, ist dynamisch und steht nicht von vornherein fest. Als Beispiel betrachten wir die Angabe von Adressen in einerCSV-Datei:

Fritz;Mustermann;Schillerstraße 13;30104 Braunschweig;0183 1234567 Charlotte;Musterfrau;Lessingstraße 15;30101 Braunschweig;0143 3456789 Karl;Mustermann;Goethestraße 14;30100 Braunschweig;0173 2345678

...

Dieser Datei geben wir den Namen adressen.csv. Eine Zeile dieser Datei enthält fünf Datenfelder in der folgenden Reihe:

– Vorname, – Nachname,

– Straße und Hausnummer, – Postleitzahl und Ort, – Handynummer.

Schreiben Sie eine Klasse Adresse, deren Objekte die fünf obigen Datenfelder als private Attribute besitzen. DietoString-Methode dieser Klasse soll Adressen wie folgt darstellen:

Charlotte Musterfrau Lessingstraße 15 30101 Braunschweig Handy: 0143 3456789

Schreiben Sie eine Klasse LinkedList, die die Adressen der Datei adressen.csv einliest und in einer verketteten sortierten Liste speichert. Die Ausgabe der Liste soll die Adressen also alphabetisch sortiert ausgeben. Die Sortierung soll nach dem Nachnamen erfolgen. Bei gleichem Nachnamen soll nach dem Vornamen sortiert werden. Falls die Datei nur die drei obigen Adressen enthält, soll die Ausgabe also wie folgt aussehen:

Charlotte Musterfrau Lessingstraße 15 30101 Braunschweig Handy: 0143 3456789 Fritz Mustermann Schillerstraße 13 30104 Braunschweig Handy: 0183 1234567

(5)

Ihre KlasseLinkedList soll die folgende Schnittstelle List implementieren:

public interface List { boolean isEmpty();

int length();

boolean isInList(Adresse x);

Adresse firstAdresse();

List insert(Adresse x);

List delete(Adresse x);

List delete();

}

Die Methodeinsert soll den Parameterxsortiert in die Liste einfügen. Außerdem soll die Klasse LinkedList eine Methode enthalten, die die CSV-Datei einliest. Für die Eingabe sowie für die Verarbeitung von Zeichenketten dürfen Sie Klassen importieren, aber nicht für die Implementierung der sortierten verketteten Liste. Welche Strukturinvariante Sie zur Implementierung der Liste verwenden, bleibt Ihnen überlassen. Die Klasse Adresse soll die Methode compareTo enthalten, die Adressen wie oben beschrieben vergleicht.

Hinweis: Ihre Testdateien adressen.csv sollten mehr als drei Adressen enthalten. Sie können die Dateien mit einem der oben genannten Programme erstellen, indem Sie die Adressen eingeben und alsCSV-Datei speichern. Sie können die CSV-Dateien aber auch mit einem Texteditor erstellen.

Referenzen

ÄHNLICHE DOKUMENTE

[r]

Nach der Hydrolyse wird das nicht um- gesetzte Magnesium abfiltriert, das Filtrat im Vakuum einge- dampft und der R¨uckstand in D 2 O 1 H-NMR-spektroskopisch untersucht sowie mit

where Bücher.ISBN = Buch_Stichwort.ISBN select Bücher.ISBN, Titel, Stichwort (richtig) from Bücher, Buch_Stichwort. where Bücher.ISBN

Vorl V_Bez SWS Semester Studiengang _DB _zwei _erstes Informatik Vorl_Voraus V_Bez Voraussetzung.

Zwischenergebnisse bereits durch ein Commit anderen Transaktionen verfügbar, aber trotzdem bei einem späteren Abbruch wieder rückgängig gemacht. ; Formalisierung von

Crossectional study on the prevalence and economic significance of hydatidosis in slaughtered ruminants at Debrezeit ELFORA export abattoir Oromia region, Eastern Showa

einem Imaginäranteil entsprechende Kompensa- tionsgröße gebildet werden und daß die erste und die zweite Kompensationsgröße zu einer der Aus- gangsgröße der

verfahren in der Methode der kleinsten Q uadrate. Gappi.ller1 in l�cichenherg.. · der ·Bedingungsgleichungen deren G-ewl:chte. Gewichte Eins seien. '''d)ie$e