1. Teil Programmierpraktikum

Werbung
Prof. Dr. R. Schrader
Anna Schulze [[email protected]]
Birgit Engels [[email protected]]
SS 2006
1. Teil Programmierpraktikum
Abgabe Donnerstag, 27.4.2006
Aktuelle Informationen bezüglich des Vorlesungsteils (Skript) sowie des Programmierteils des
Praktikums (Header und Testprogramme) finden sich unter :
http://www.zaik.uni-koeln.de/AFS/teachings/courses/Programmierpraktikum/progprakt.html.de
Von dort können für die C++-Programmierung die folgenden Pakete heruntergeladen werden :
cheader1.tar.gz Enthält die C++-Header Vertex.h, Edge.h, Graph.h, Dijkstra.h, deren Methoden in den
entsprechenden *.cpp-Dateien zu implementieren sind, sowie ein primitives Makefile. Private Methoden können in den Klassen natürlich ergänzt werden.
ctests1.tar.gz Enthält eine Test-Datei für Dijkstras Algorithmus, basierend auf den oben genannten Klassen, sowie einige Text-Dateien in festem Format aus denen Beispielgraphen geparst werden
sollen (siehe Klassen Graph, Dijkstra).
Das Format der Dateien ist (zunächst) wie folgt aufgebaut:
• Alle Zeilen, die mit einer Raute ( # ) beginnen sollen als Kommentarzeilen behandelt
( d.h. ignoriert werden ). Entsprechende Zeilen werden in der folgenden Aufzählung
nicht berücksichtigt.
• Die 1. Zeile enhält ausschliesslich die Anzahl der Knoten des Graphen.
• Die 2. Zeile enhält ausschliesslich die Anzahl der Kanten des Graphen.
• Die folgenden Zeilen enhalten je eine Kante, wobei durch einzelne Leerzeichen getrennt jeweils die IDs des Start- und Ziel- Knotens und das Kantengewicht gelistet
sind.
• Die vorletzte Zeile enhält ausschliesslich die ID des Start-Knotens.
• Die letzte Zeile enhält ausschliesslich die ID des Ziel-Knotens.
Für die Programmierung in Java sind die C++-Header der vorgegebenen Klassen in Java-Klassen
mit leeren Methoden-Köpfen umgewandelt worden und stehen im Paket jclasstemplates.tar.gz zusammen mit einer Testklasse und den oben erläuterten Text-Dateien zur Verfügung.
Beide Pakete enthalten eine README-Datei mit einer kleinen FAQ-Sammlung, die mit weiteren
auftretenden Fragen/Antworten ergänzt werden wird. Bitte wenden !
Hinweis: Für alle Teile des Programmierpraktikums gilt, dass eine ausreichende und sinnvolle
Kommentierung des Codes notwendig ist. In Extremfällen kann sich aufgrund mangelnder Kommentare die Bewertung eines Aufgabenteils verschlechtern.
Aufgabe 1: (Datenstrukturen) Implementieren Sie die Datenstrukturen Vertex, Edge und Graph
zu den entsprechenden Header/Klassen-Dateien. Um später die Projektstruktur und Test-Dateien
nutzen zu können, müssen die öffentlichen Methoden, insbesondere get-/set-Methoden der Klassen
implementiert sein.
Hinweis : Die vorgegebene Klassenstruktur soll als Leitfaden für die Programmieraufgaben genutzt werden. In begründeten Einzelfällen ist eine Abweichung von vorgegebenen Methoden möglich.
Dabei muss allerdings die volle geforderte Funktionalität erfüllt sein !
Aufgabe 2: (Dijkstra) Implementieren Sie Dijkstra’s Algorithmus unter Verwendung der Datenstrukturen aus Aufgabe 1. Zur Bestimmung des Knotens mit minimaler (vorläufiger) Distanz kann
zunächst eine lineare Suchmethode ( linmin() ) verwendet werden.
Tip: Die bereits betrachteten Knoten werden während des Algorithmus in einer separaten Menge
verwaltet. Die Zugehörigkeit eines Knotens zu dieser Menge kann als Flag ([get—set]Marker())
im Knoten selbst gespeichert werden.
Der von Dijkstra’s Algorithmus gefundene kürzeste Weg soll in selbserklärendem Format (d.h.
mit ein wenig Text wie Knoten x, Knoten y, usw.) in eine (Text-)Datei geschrieben werden (siehe
writeOutput() in der Klasse Dijkstra).
Herunterladen