Klausur Teilgebiet: Programmierung und Programmiersprachen

Werbung
Prof. Dr. Volker Gruhn
26. Juli 2004
Klausur
Teilgebiet: Programmierung und Programmiersprachen
Vor- und Nachname:
Mat.-Nr.:
Hinweise
•
Bevor Sie mit der Bearbeitung der Aufgaben beginnen, müssen Sie auf allen Blättern
Ihren Namen und Ihre Matrikelnummer eintragen. Dafür bekommen Sie zusätzlich fünf
Minuten Zeit.
•
Der Klausurtext enthält ausreichend Platz zur Lösung der Aufgaben. Sie können auch die
Rückseiten der Blätter für Ihre Lösungen nutzen. Sofern Sie zusätzliches Papier
benötigen, wenden Sie sich an die Aufsicht. Die Nutzung eigenen Papiers ist nicht
gestattet.
•
Sollte Ihre Lösung nicht unmittelbar unter oder neben der Aufgabenstellung stehen,
machen Sie bitte einen entsprechenden Hinweis. Streichen Sie diejenigen Teile der von
Ihnen geschriebenen Texte deutlich durch, die nicht in die Bewertung eingehen sollen.
•
Die Klausur ist zusammengeheftet. Die Heftung darf nicht geöffnet werden.
•
Die Aufsicht gibt Ihnen keine Hilfestellung beim Lösen der Aufgaben.
•
Teilnehmer, die eine Einzelklausur über ein Teilgebiet schreiben, müssen zum Bestehen
mindestens 20 Punkte erreichen. Maximal können 50 Punkte erreicht werden.
•
Teilnehmer, die die Gesamtklausur über beide Teilgebiete schreiben, müssen zum
Bestehen in beiden Teilgebieten jeweils mindestens 20 Punkte erreichen. Maximal
können jeweils 50 Punkte erreicht werden.
Viel Erfolg!
Aufgabe
erreichbare Punkte
erreichte
a) b) c) d) e) f) insg.
Punkte
1
1
1
2
2
2
2
3
5
6
3
1
2
3
5
4
3
1
1
5
2
2
Summe
4
2
12
16
1
1
13
5
4
50
Lehrstuhl für Angewandte Telematik / e-Business, Institut für Informatik, Universität Leipzig
Klostergasse 3, D-04109 Leipzig • http://www.lpz-ebusiness.de
Klausur - Teilgebiet: Programmierung und Programmiersprachen
Vor- und Nachname:
Mat.-Nr.:
Aufgabe 1: Objektorientierte Programmierung
a) Erläutern Sie kurz den Unterschied zwischen einer Klasse und einem Objekt.
(1 Punkt)
b) Erläutern Sie kurz den Unterschied zwischen Aggregation und Komposition im
Kontext von objektorientierter Modellierung. (1 Punkt)
26. Juli 2004
Seite 2 von 15
Klausur - Teilgebiet: Programmierung und Programmiersprachen
Vor- und Nachname:
Mat.-Nr.:
c) Erläutern Sie kurz den Unterschied zwischen dem Überladen und Überschreiben
einer Methode. (2 Punkte)
d) Erläutern Sie kurz den Unterschied zwischen abstrakten Klassen und Interfaces.
(2 Punkte)
26. Juli 2004
Seite 3 von 15
Klausur - Teilgebiet: Programmierung und Programmiersprachen
Vor- und Nachname:
Mat.-Nr.:
e) Gegeben sei die folgende Klasse Zahl:
public class Zahl {
public int n;
}
public Zahl(int n) {
this.n = n;
}
Vollziehen Sie die Ausführung des folgenden Java-Programmfragments beim
Aufruf von start() nach. Notieren Sie die erzeugten Ausgaben und erläutern
Sie kurz die Gründe für eventuelle Unterschiede und Gemeinsamkeiten der
ausgegebenen Werte. (4 Punkte)
void calc(int n) {
++n;
System.out.println("1: " + n);
}
void calc(Zahl zahl) {
zahl.n++;
System.out.println("3: " + zahl.n);
}
void start() {
int n = 0;
Zahl zahl = new Zahl(0);
}
calc(n);
System.out.println("2: " + n);
calc(zahl);
System.out.println("4: " + zahl.n);
26. Juli 2004
Seite 4 von 15
Klausur - Teilgebiet: Programmierung und Programmiersprachen
Vor- und Nachname:
Mat.-Nr.:
f) Gegeben sei wieder die Klasse Zahl:
public class Zahl {
public int n;
}
public Zahl(int n) {
this.n = n;
}
Vollziehen Sie die Ausführung des folgenden Java-Programmfragments beim
Aufruf von comp() nach. Notieren Sie die erzeugten Ausgaben und erläutern Sie
sie. (2 Punkte)
void comp() {
Zahl a = new Zahl(1);
Zahl b = new Zahl(1);
Zahl c = b;
if (a == b) System.out.println("a gleich b");
else System.out.println("a ungleich b");
if (b == c) System.out.println("b gleich c");
else System.out.println("b ungleich c");
}
26. Juli 2004
Seite 5 von 15
Klausur - Teilgebiet: Programmierung und Programmiersprachen
Vor- und Nachname:
Mat.-Nr.:
Aufgabe 2: Bäume
a) Geben Sie die formale Definition eines binären Suchbaums an. (2 Punkte)
b) Entfernen Sie die Wurzel aus dem folgenden binären Suchbaum und formen Sie
ihn so um, dass die Suchbaum-Eigenschaft erhalten bleibt. Zeichnen Sie die
Zwischenschritte und das Endergebnis der Umformung auf. (3 Punkte)
5
2
8
1
4
3
26. Juli 2004
6
9
7
Seite 6 von 15
Klausur - Teilgebiet: Programmierung und Programmiersprachen
Vor- und Nachname:
Mat.-Nr.:
c) Ergänzen Sie die folgende Implementierung eines Binärbaums um eine Methode
zaehleKnoten, die die Anzahl der Knoten im Baum liefert. (5 Punkte)
public class Baum {
private int wurzelwert;
private Baum links;
private Baum rechts;
public Baum() {...}
...
}
26. Juli 2004
Seite 7 von 15
Klausur - Teilgebiet: Programmierung und Programmiersprachen
Vor- und Nachname:
Mat.-Nr.:
d) Wir bezeichnen einen Baumknoten, der zwei Unterbäume hat, als 2-Knoten;
einen Baumknoten, der drei Unterbäume hat, als 3-Knoten, etc. Ein 2-3-4-Baum
ist dann ein Baum, der nur 2-, 3- und 4-Knoten enthalten kann und die Bedingung
erfüllt, dass alle Blätter (d.h. alle Knoten ohne Unterbäume) auf der gleichen
Ebene liegen.
Die Tiefe eines Baums sei als die Zahl der Knoten auf dem längsten Pfad von der
Wurzel zu einem Blatt definiert (d.h. der leere Baum hat die Tiefe 0, ein nur aus
der Wurzel bestehender Baum die Tiefe 1, usw.).
Beweisen Sie, dass ein 2-3-4-Baum der Tiefe t höchstens (4t – 1) / 3 Knoten
enthalten kann. (6 Punkte)
26. Juli 2004
Seite 8 von 15
Klausur - Teilgebiet: Programmierung und Programmiersprachen
Vor- und Nachname:
Mat.-Nr.:
Aufgabe 3: Graphen
a) Geben Sie die formale Definition eines gerichteten Graphen an. (1 Punkt)
b) Gegeben sei der folgende Graph G:
1
2
3
4
5
6
Ist G schwach zusammenhängend? Ist G stark zusammenhängend? Begründen
Sie Ihre Aussagen. (2 Punkte)
26. Juli 2004
Seite 9 von 15
Klausur - Teilgebiet: Programmierung und Programmiersprachen
Vor- und Nachname:
Mat.-Nr.:
c) Gegeben sei wieder der Graph G:
1
2
3
4
5
6
Führen Sie einen Breitendurchlauf über G ausgehend von Knoten 1 durch. Geben
Sie für jeden Schritt die Nummer des besuchten Knotens und den Inhalt der
Queue an. (3 Punkte)
Schritt
besuchter
Knoten
Queue
1
2
...
26. Juli 2004
Seite 10 von 15
Klausur - Teilgebiet: Programmierung und Programmiersprachen
Vor- und Nachname:
Mat.-Nr.:
d) Notieren Sie den Java-Coderahmen der Adjazenzlistendarstellung eines
gerichteten, attributierten Graphen (nur Klassen- und Attributdeklarationen, keine
Methoden). (5 Punkte)
26. Juli 2004
Seite 11 von 15
Klausur - Teilgebiet: Programmierung und Programmiersprachen
Vor- und Nachname:
Mat.-Nr.:
e) Geben Sie die formale Definition eines Spannbaums eines zusammenhängenden
ungerichteten Graphen an. (1 Punkt)
f) Zeichnen Sie einen Spannbaum für den folgenden Graphen. (1 Punkt)
26. Juli 2004
1
2
3
4
5
6
7
8
9
Seite 12 von 15
Klausur - Teilgebiet: Programmierung und Programmiersprachen
Vor- und Nachname:
Mat.-Nr.:
Aufgabe 4: Interfaces
Gegeben seien die folgenden Klassen und Interfaces (Kursivdruck symbolisiere
abstrakte Deklaration):
InterfaceA
methode1()
InterfaceB
methode1(int i)
InterfaceC
InterfaceD
methode1()
methode2()
KlasseF
methode3()
methode4()
KlasseE
...
a) Notieren Sie den Java-Coderahmen von KlasseE. Ergänzen Sie dabei die
Signaturen aller Methoden, die in der Klasse implementiert werden müssen.
Nehmen Sie an, dass alle Methoden public sind und den Rückgabetyp void
haben. (3 Punkte)
26. Juli 2004
Seite 13 von 15
Klausur - Teilgebiet: Programmierung und Programmiersprachen
Vor- und Nachname:
Mat.-Nr.:
b) Erläutern Sie kurz, ob ein Namenskonflikt entstehen würde, wenn methode1 in
InterfaceC den Rückgabetyp int hätte. (1 Punkt)
c) Erläutern Sie kurz, ob ein Namenskonflikt entstehen würde, wenn InterfaceC
von InterfaceA erben würde. (1 Punkt)
26. Juli 2004
Seite 14 von 15
Klausur - Teilgebiet: Programmierung und Programmiersprachen
Vor- und Nachname:
Mat.-Nr.:
Aufgabe 5: Ausnahmebehandlung
a) Gegeben sei der folgende Coderahmen der Klasse Stack. Die Methode pop()
liefert den Wert des zuoberst auf dem Stack liegenden Elements oder wirft eine
EmptyStackException, wenn der Stack leer ist.
class Stack {
...
void push(int i) {...}
// Element ablegen
int pop() throws EmptyStackException {...} // Element holen
}
Ergänzen Sie im folgenden Programmfragment eine Ausnahmebehandlung, die
die Endlosschleife beendet und die Meldung „Stack leer“ ausgibt, wenn der Stack
leer ist. (2 Punkte)
void printStack(Stack stack) {
while (true) System.out.println(stack.pop());
}
b) Nennen Sie zwei Vorteile der Ausnahmebehandlung mit Exceptions gegenüber
der Fehlersignalisierung durch besondere Rückgabewerte (im obigen Szenario
z.B. Rückgabe von –1 zur Signalisierung eines leeren Stacks). (2 Punkte)
26. Juli 2004
Seite 15 von 15
Herunterladen