Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Programmieren II Dr. Werner Struckmann 16. August 2013 Name: Vorname: Matrikelnummer: Kennnummer: Anrede: Frau Herr Studiengang: Bachelor Master Diplom Frühstudium Erasmus Fachrichtung: Informatik Wirtschaftsinformatik Physik Mathematik Mobilität und Verkehr Mechatronik Maschinenbau Psychologie Finanz- und Wirtschaftsmathematik IST Sonstige: Die Bearbeitungszeit beträgt 120 Minuten. Die Klausur besteht aus 6 Aufgaben. Sie haben die Klausur bestanden, wenn Sie mindestens 35 von 70 möglichen Punkten erreicht haben. Aufgabe 1 2 3 4 5 6 Σ max. Punkte 10 8 8 8 10 26 70 Punkte Note: Bitte prägen Sie sich Ihre Kennnummer gut ein. Aus Datenschutzgründen wird das Klausurergebnis nur unter dieser Kennnummer bekannt gegeben. Aus den gleichen Gründen können Ergebnisse weder telefonisch noch per E-Mail mitgeteilt werden. Die Ergebnisse der Klausur erfahren Sie ab dem 30. August 2013 auf der Web-Seite dieser Veranstaltung. Ihre Klausur können Sie am Donnerstag, den 5. September 2013, von 09:00 bis 11:00 Uhr und von 14:00 bis 16:00 Uhr im Raum 251 des Informatikzentrums einsehen.
Aufgabe 1: (Programmverständnis) Das folgende Programm benutzt eine zirkuläre Liste. class Node { int val; Node next; Node (int val) { this.val = val; class Josephus { public static void main(string[] args) { int n = 12, m = 7; Node t = new Node(5), x = t; for (int i = n+1; i >= 0; i=i-2) { x = (x.next = new Node(i-2)); System.out.print(x.val); // (*) x.next = t.next; while (x!= x.next) { for (int i = 0; i <= m; i++) x = x.next; System.out.print(";" + x.val); x.next = x.next.next; System.out.println(); System.out.println("Gewinner ist Nr. "+x.val+"."); a) Welche Elemente besitzt die Liste bei der Ausführung von (*)? Geben Sie die Listenelemente in der Reihenfolge an, wie sie eingefügt wurden. b) Was gibt das Programm aus? 10 Punkte 2
Aufgabe 2: (Klassen, Aufzählungstypen, Pakete, Annotationen, Parallelprogrammierung) Bitte kreuzen Sie an. Für jede richtige Antwort erhalten Sie einen Punkt, für jede falsche Antwort wird ein Punkt abgezogen. Kein Kreuz bzw. zwei Kreuze bedeuten 0 Punkte. Die minimale Gesamtpunktzahl für diese Aufgabe beträgt 0 Punkte. Alle Fragen dieser Aufgabe beziehen sich auf Java. wahr falsch Eine innere Klasse kann nicht auf die Membervariablen der äußeren Klasse zugreifen. Jede Enum-Klasse implementiert die Schnittstelle Comparable. Enum-Werte können mit equals auf Gleichheit getestet werden. Jede Klasse gehört zu genau einem Paket. Klassen des Defaults-Pakets können ohne eine explizite import-anweisung verwendet werden. Annotationen beginnen mit dem Zeichen @. Annotationen können annotiert werden. Eine Semaphore kann nur Werte annehmen, die größer als 0 sind. 8 Punkte Aufgabe 3: (Grafikprogrammierung) a) Nennen Sie zwei Möglichkeiten, wie ein Applet ausgeführt werden kann: b) Geben Sie Aufrufe von Methoden an, durch die ein Fenster geschlossen werden kann ohne das Programm zu beenden: c) Nennen Sie zwei Swing-Widgetklassen zur Darstellung von Auswahllisten: d) Nennen Sie zwei mögliche Darstellungen der Farbe Weiß : 8 Punkte 3
Aufgabe 4: (Fehlerkorrektur, Generizität) Gegeben seien die generische Methode 01 public static <T extends Comparable<? extends T>> T sort(t[] a) { 02 for (int j=1; j<a.length; j++) { 03 T k = a[j]; 04 int i = j-1; 05 while (i>=0 && a[i].compareto(k)<0) { 06 a[i+1] = a[i]; 07 i--; 08 09 a[i+1] = k; 10 11 return a[length-1]; 12 und die beiden Anweisungen 13 char[] x = { g, j, z, f ; 14 System.out.println(sort(x)); Die Methode sort soll das Parameterfeld a aufsteigend sortieren und das maximale Element des Parameterfeldes als Rückgabe liefern. a) Die Programmzeilen 01 bis 14 enthalten Fehler. Markieren Sie die Fehler im Programmtext. b) Geben Sie die korrigierten Zeilen an. Die Methode sort soll generisch bleiben. Achtung: Für Programmstellen, die nicht zu einem Fehler führen, aber als fehlerhaft gekennzeichnet sind, werden Punkte abgezogen. 8 Punkte 4
Aufgabe 5: (Programmzuverlässigkeit) Gegeben sei die folgende Java-Methode: static int f(int m, int n) { assert m>=0; // Vorbedingung P int i = m-1, x = 0; assert... // Schleifeninvariante Q while (i >= 0) { x = x-2*i+n; i = i-1; assert... // Schleifeninvariante Q assert... // Nachbedingung R return x; a) Welchen Wert berechnet diese Methode? Formulieren Sie eine entsprechende Nachbedingung R. b) Geben Sie eine geeignete Schleifeninvariante Q an, mit deren Hilfe die partielle Korrektheit der Methode bezüglich P und R nachgewiesen werden kann. Sie brauchen den Nachweis nicht zu führen. c) Formulieren Sie Q und R als Java-Ausdrücke, sodass diese in den obigen assert-anweisungen verwendet werden können. 10 Punkte 5
Aufgabe 6: (Datenstrukturen) Gegeben seien die folgenden Klassen Knoten und Suchbaum zur Implementierung binärer Suchbäume: public class Knoten { public int wert; public Suchbaum links, rechts; public Knoten(int wert) { this.wert = wert; this.links = new Suchbaum(); this.rechts = new Suchbaum(); public class Suchbaum { private Knoten wurzel = null; public boolean isempty() { return wurzel == null; public void insert(int x) { if (isempty()) wurzel = new Knoten(x); else if (x < wurzel.wert) wurzel.links.insert(x); else wurzel.rechts.insert(x); Betrachten Sie den folgenden binären Suchbaum: 7 public String tostring() { if (isempty()) return "!"; else return wurzel.rechts+"_"+ wurzel.wert+wurzel.links; 3 9 2 5 8 9 6 8 Die Werte 8 und 9 sind mehr als einmal im Suchbaum enthalten. Die Werte des Suchbaums sind also nicht alle verschieden. Dieser Baum enthält 7 verschiedene Werte: 2, 3, 5, 6, 7, 8, 9. 6
a) Was gibt das folgende Programmfragment aus? Suchbaum t = new Suchbaum(); t.insert(7); t.insert(1); t.insert(3); t.insert(0); t.insert(1); System.out.println(t); b) Zeichnen Sie den Graphen des Baumes aus a) wie im obigen Beispiel. c) Schreiben Sie eine Methode boolean verschieden(), die genau dann den Wert false liefert, falls mindestens eine Zahl mindestens zweimal im aktuellen Suchbaum enthalten ist. Einführendes Beispiel: Rückgabe false. d) Schreiben Sie eine Methode int anzahl(), die die Anzahl der verschiedenen Werte des aktuellen Suchbaumes zurückgibt. Einführendes Beispiel: Rückgabe 7. Erläutern Sie Ihre Methoden. Sie können eigene Hilfsmethoden schreiben, dürfen aber weder Klassen noch Methoden importieren. Durch Ihre Methoden darf der aktuelle Suchbaum nicht verändert werden. 26 Punkte 7