Klausur Informatik 1 WS 07/08 Aufgabe 1 2 3 4 Max. Punkte 30 30 30 30 Punkte Gesamtpunkte: Note: Bearbeitungszeit 120 Minuten Keine Hilfsmittel Tragen Sie als erstes Ihren vollständigen Namen und Ihre Matrikelnummer ein. Name: Matrikelnummer: Fragen Sie bei Unklarheiten in der Aufgabenstellung sofort nach. Tragen Sie Ihre Lösungen nur in diese Aufgabenblätter ein und verwenden Sie auch die Rückseite (mit Bezug zur Teilaufgabe). Sollte der Platz nicht ausreichen, so erhalten Sie weitere Blätter. Geben Sie alle Aufgabenblätter ab. Falls Sie die Heftung der Klausur entfernen, dann schreiben Sie bitte auf jedes einzelne Blatt Ihren Namen und Matrikelnummer. Verwenden Sie keine Bleistifte und keine rote Farbe. Halten Sie Ihren Studentenausweis zur Kontrolle bereit. 1
Hochschule Karlsruhe Klausur Informatik I Prof. Dr. Christian Pape 2 1. Aufgabe UML Eine Schiffsteuerungssoftware soll in Teilen entworfen werden. Sie sind primär für das Ankern also das Festmachen des Schiffes mit Hilfe von Ankern zuständig. a) UML-Klassendiagramm (15 Punkte) Geben Sie für folgenden Sachverhalt ein vollständiges UML-Klassendiagramm an. Beachten Sie dabei die Java-Namenskonventionen aus der Vorlesung und das Geheimnisprinzip. Ein Schiff besitzt mindestens einen Anker, der fallen gelassen und wieder gehievt werden kann. Zur Steuerung des Ankers werden die Geschwindigkeit in Knoten und die Fahrtrichtung (vorwärts/rückwärts) des Schiffes benötigt. Für einen Anker muss bekannt sein, ob er schon fallengelassen wurde oder nicht. Durch Ziehen an der Ankerkette eines Ankers kann man feststellen, ob ein Anker fest im Untergrund verankert ist oder nicht. Als Notmaßnahme beim Ankern, muss die Steuerungssoftware einzelne Schiffsschrauben individuell stoppen können.
Hochschule Karlsruhe Klausur Informatik I Prof. Dr. Christian Pape 3 b) UML-Aktivitätsdiagramm (15 Punkte) Beschreiben Sie folgenden Ablauf des Ankerns mit einem UML-Aktivitätsdiagramm. Verwenden Sie keine UML-Abkürzungen. Beim Ankern muss das Schiff zuerst rückwärts in Strömungsrichtung fahren. Die Geschwindigkeit des Schiffs wird solange verringern, bis das Schiff höchstens ein Knoten schnell ist. Dann wird der Anker fallengelassen. Das Schiff muss solange rückwärts weiterfahren, bis der Anker sich eingegraben hat. Während des Ankerns muss eine Ankerwache vorhanden sein: das Ankern darf erst beginnen, wenn die Ankerwache aufgestellt wurde. Die Ankerwache darf erst wieder aufgelöst werden, wenn das Ankern erfolgreich beendet wurde.
Hochschule Karlsruhe Klausur Informatik I Prof. Dr. Christian Pape 4 2. Aufgabe Java a) Ausdrücke (6 Punkte) Welchen Wert haben folgenden Ausdrücke? Ausdruck 1 + 2 / 3 * 4 1 / 2 == 3 / 4 1 == 2 && 3!= 4 1 < 2 ((int) (1.2 * 1.3)) * 2.0 Wert b) Datentypen (3 Punkte) Welchen Datentyp haben folgende Ausdrücke? Ausdruck 1 + 5.0 / 7f - 10L 128 + ((byte) 56) Datentyp c) Abstrakte Datentypen (15 Punkte) Implementieren Sie folgenden abstrakten Datentyp eines Punktes (x, y) im zwei-dimensionalen Raum mit kartesischen Koordinaten. Ihre Implementierung muß einen Konstruktor besitzen, mit dem ein Punkt (x, y) erzeugt werden kann. Der euklidische Abstand zweier Punkte (x 1, y 1 ) und (x 2, y 2 ) ist definiert als (x 1 x 2 ) 2 + (y 1 y 2 ) 2 Hinweis: Math.sqrt(double) berechnet die Quadratwurzel eines double-wertes. public interface Punkt { public double getx ( ) ; public double gety ( ) ; } / Gibt den e u k l i d i s c h e n Abstand zum gegebenen punkt zurueck. / public double getabstand ( Punkt punkt ) ;
Hochschule Karlsruhe Klausur Informatik I Prof. Dr. Christian Pape 5
Hochschule Karlsruhe Klausur Informatik I Prof. Dr. Christian Pape 6 d) JUnit (6 Punkte) Implementieren Sie eine JUnit-Testmethode, die überprüft, ob die Implementierung Ihrer Methode für die Punkten (1, 5) und (4, 1) den korrekten Abstand 5 berechnet. Beachten Sie, dass mit Gleitkommazahlen gerechnet wird.
Hochschule Karlsruhe Klausur Informatik I Prof. Dr. Christian Pape 7 3. Aufgabe Rekursion Betrachten Sie folgende rekursiv definierte Funktion f(n) := a) f Auswerten (4 Punkte) { 1, für n = 1 f(n 1) + 2n 1, für n > 1 Geben Sie die Funktionswerte f(n) für n = 1, 2, 3, 4 an. n f(n) 1 2 3 4 b) Rekursionstyp (2 Punkte) Um welche Art von Rekursions handelt es sich bei f(n)?
Hochschule Karlsruhe Klausur Informatik I Prof. Dr. Christian Pape 8 c) f rekursiv implementieren (13 Punkte) Implementieren Sie eine rekursive Java-Funktion, die f berechnet (es dürfen keine Schleifen verwendet werden).
Hochschule Karlsruhe Klausur Informatik I Prof. Dr. Christian Pape 9 d) Rekurrenzgleichung (3 Punkte) Geben Sie die Rekurrenzgleichung T (n) ihrer Implementierung für den Zeitaufwand im schlimmsten Fall an. e) Zeitaufwand (2 Punkte) Geben Sie den Zeitaufwand Ihrer Implementierung möglichst genau im O-Kalkül an. f) f nicht rekursiv implementieren (8 Punkte) Implementieren Sie eine nicht-rekursive Java-Funktion, die f berechnet.
Hochschule Karlsruhe Klausur Informatik I Prof. Dr. Christian Pape 10 4. Aufgabe Algorithmen a) Mergesort (6 Punkte) Sortieren Sie folgende Zahlenfolge mit rekursivem Mergesort. Geben Sie dabei immer nur jeweils das Ergebnis eines Verschmelzungschrittes an. Verwenden Sie immer eine neue Zeile pro Verschmelzungsschritt. Sie brauchen nur die geänderten Zahlen eintragen. 9 7 2 5 3 2 1 4 b) Mergesort (3 Punkte) Geben Sie den Speicheraufwand von Mergesort im schlimmsten Fall möglichst genau im O-Kalkül an.
Hochschule Karlsruhe Klausur Informatik I Prof. Dr. Christian Pape 11 c) Potenzen rekursiv berechnen (18 Punkte) Die n-te Potenz eines double-werts a soll rekursiv mit einem Halbierungsverfahren berechnet werden, so dass der Zeitaufwand O(log 2 n) nicht überschreitet. Betrachten Sie folgendes Beispiel, als Hinweis für eine Entwurfsidee: a 7 = a a 3 a 3 Implementieren Sie einen derartigen Algorithmus in Java.
Hochschule Karlsruhe Klausur Informatik I Prof. Dr. Christian Pape 12 d) Speicheraufwand (3 Punkte) Geben Sie im O-Kalkül den Speicheraufwand Ihrer Implementierung aus Teilaufgabe c) möglichst genau an.