Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Programmieren II Dr. Werner Struckmann 31. März 2014 Name: Vorname: Matrikelnummer: Anrede: Frau Kennnummer: Herr Studiengang: Bachelor Master Fachrichtung: Informatik Mobilität und Verkehr Elektrotechnik Diplom Frühstudium Wirtschaftsinformatik Psychologie Erasmus Mathematik Physik Maschinenbau ( Mechatronik) Wirtschaftsingenieurwesen ( Bauing E-Technik Maschbau) 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 8 8 8 8 10 28 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 11. April 2014 auf der Web-Seite dieser Veranstaltung. Ihre Klausur können Sie am Mittwoch, den 23. April 2014, von 15:00 bis 17:00 Uhr im Raum 251 des Informatikzentrums einsehen. Aufgabe 1: (Programmverständnis) Gegeben sei die folgende Klasse LinkedList: public class LinkedList { private int item = -1; private LinkedList next; public LinkedList insertElement(int x) { LinkedList l = new LinkedList(); l.item = x; l.next = next; next = l; return this; } public LinkedList insert(int x) { if (next==null || x>=next.item) return insertElement(x); else return next.insert(x); } public String toString() { String s = ""; if (next!=null) { s = s + next.item; if (next.next!=null) s = s + " | " + next; } return s; } public static void main(String[] args) { LinkedList l = new LinkedList(); l.insert(-5); l.insert(5); l.insert(1); l.insert(-3); l.insert(3); l.insert(5); System.out.println(l); } } Wie lautet die Ausgabe des Aufrufs java LinkedList nachdem der Compiler diese Klasse übersetzt hat. 8 Punkte Lösung: –2– Aufgabe 2: (Generizität) Gegeben seien die Methode 01 02 03 04 05 06 07 08 09 10 11 12 public static int max (int[] a, int[] b) { assert a!= null && a.length > 0; assert b!= null && b.length > 0; int x = a[0]; for (int j=1; j<=a.length-1; j++) { if (a[j]>x) x=a[j]; } for (int j=0; j<=b.length-1; j++) { if (b[j]>x) x=b[j]; } return x; } und die Anweisungen 13 14 15 int[] a = {-9,4,-1,6}; int[] b = {9,4,1,5}; int t = max(a,b); a) Schreiben Sie diese Methode als generische Methode, die als Parameter zwei Felder von Elementen eines Typs T erhält. Stellen Sie sicher, dass T die benötigten Operationen besitzt, so dass beim Übersetzen keine Fehlermeldungen oder Warnungen entstehen. Geben Sie nur die Zeilen an, die sich geändert haben. b) Können die Zeilen 13 bis 15 unverändert übernommen werden? Wie müssen diese Zeilen ggf. abgeändert werden? 8 Punkte Lösung: –3– Aufgabe 3: (Klassen, Aufzählungstypen, Annotationen, Pakete, 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. Eine innere Klasse kann auf die Member-Variablen ihrer äußeren Klasse zugreifen. Anonyme Klassen können nicht instanziiert werden. Jede Enum-Klasse implementiert die Schnittstelle Comparable. Annotationen sind vordefiniert und können nicht selbst erstellt werden. Annotationen können annotiert werden. Die Klassen des Pakets java.util werden automatisch importiert. Eine durch protected deklarierte Variable ist in allen Methoden des eigenen Pakets sichtbar. Eine Semaphore kann nur Werte annehmen, die ≥ 1 sind. wahr falsch 8 Punkte Aufgabe 4: (Grafikprogrammierung) Beschreiben Sie kurz die Aufgaben der folgenden Komponentenklassen. JLabel: Darstellung von Texten und Bildern JButton: JCheckBox: JRadioButton: JTextArea: JTextField: JComboBox: JList: JDialog: 8 Punkte –4– Aufgabe 5: (Programmzuverlässigkeit) Gegeben sei die folgende Java-Methode: static int f(int n) { assert n>=1; int i = 1; int s = 3*n+1; assert ... while (i < n) { s = s+2*i; i = i+1; assert ... } assert ... return s; } // Vorbedingung P // Schleifeninvariante Q // Schleifeninvariante Q // Nachbedingung R 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 Lösung: –5– Aufgabe 6: (Datenstrukturen) Gegeben seien die folgenden Klassen Knoten und Suchbaum zur Implementierung binärer Suchbäume: public class Suchbaum { private Knoten wurzel = null; public class Knoten { public int wert; public boolean isEmpty() { return wurzel == null; } public Suchbaum links, rechts; public Knoten(int wert) { this.wert = wert; this.links = new Suchbaum(); this.rechts = new Suchbaum(); } 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); } } public String toString() { if (isEmpty()) return ""; else return wurzel.links+";"+ wurzel.wert+";"+wurzel.rechts; } } Betrachten Sie den folgenden binären Suchbaum: 6 3 2 8 5 7 4 8 7 8 Dieser binäre Suchbaum kann mit der obigen Klasse erzeugt werden. Die Werte 7 und 8 sind mehr als einmal im Suchbaum enthalten. Die Methode insert gestattet also, dass Werte mehrfach im Suchbaum aufgenommen werden. –6– a) Was gibt das folgende Programmfragment aus? Suchbaum t = new Suchbaum(); t.insert(6); t.insert(3); t.insert(8); t.insert(2); t.insert(5); System.out.println(t); b) Zeichnen Sie den Graphen des Baumes aus a) wie im obigen Beispiel. c) Schreiben Sie eine Methode blaetter(), die die Werte der Blätter des Suchbaums absteigend sortiert ausgibt. Für den obigen Suchbaum wäre die Ausgabe also: 8 7 4 2 d) Wie wäre die Ausgabe der Methode blaetter() für die Eingabe des Baumes aus a)? e) Formulieren Sie die Methode void insert(int x) so um, dass der binäre Suchbaum Elemente nicht mehrfach, sondern höchstens einmal aufnimmt. Sie können eigene Hilfsmethoden schreiben, dürfen aber weder Klassen noch Methoden importieren. Durch Ihren Code darf der aktuelle Suchbaum nicht verändert werden. Erläutern Sie Ihren Code. Bitte schreiben Sie Ihre Erläuterung auf diese Seite. Verwenden Sie für Ihren Programmcode bitte die nächste Seite. 28 Punkte Lösung: –7– –8–