Klausur »Programmieren II«, WS 2013/2014

Werbung
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–
Herunterladen