Unterlagen und Hilfsmittel sind nicht zugelassen. Kommunikation während der Klausur ist nur mit dem Dozenten erlaubt, der Missverständnisse und Unklarheiten klären kann. Schreiben Sie die Lösungen auf leere nummerierte Blätter mit Ihrem Namen; kennzeichnen Sie die Aufgabennummer eindeutig. Geben Sie alle Blätter (auch die Schmierblätter) ab. Für falsche oder nicht einleuchtende Lösungen bekommen Sie grundsätzlich keine Punkte. Wenn aber aus Ihren Notizen oder Bemerkungen ersichtlich ist, dass Ihr Gedankengang richtig war, können Sie Teilpunkte bekommen. Sie verlieren jedoch diese Möglichkeit, wenn Abschreiben oder Kommunikation während der Klausur nachgewiesen werden kann. Der Kern der Fragen wurde kursiv gesetzt.
In den letzten 15 Minuten werden keine Fragen mehr beantwortet..Klausurtermin: 24. Januar 2001
_______________________________________________________________________________________________
Aufgabe 1: Erweitern Sie die Klasse GanzWS (ähnlich wie Warteschlange in der Übung, jedoch nicht für Object sondern für int) um eine int-Funktionsmethode durchschnitt, die den Durchschnittsbetrag (eine positive Ganzzahl: Summe der Beträge/Anzahl; Betrag == |Wert| >= 0) aller gespeicherten Elemente liefert. Die Datenstruktur der Klasse ist:
class GanzWS { private int[] inhalt; private int juengster, aeltester, anzahl; ...
Aufgabe 2.: Erklären Sie in je einem Satz, wie die Prozesse „Erzeuger“ und „Verbraucher“ (Beispielprogramm MacDonalds aus der Vorlesung) folgende Probleme gelöst werden:
1. Gleichzeitiger Zugriff auf den Puffer soll vermieden werden
2. Der Verbraucher möchte entnehmen, aber der Puffer leer ist
3. Der Erzeuger möchte in den (nicht vollen) Puffer schreiben, aber der letzte Platz im Puffer ist belegt
4. Der Erzeuger soll nicht warten, wenn der Puffer nicht mehr voll ist
Aufgabe 3. (40 Punkte, 15 Min): Kreuzen Sie die richtigen Antworten an und geben Sie Ihre Begründung mit Stichworten dazu. Ohne Begründung gilt Ihre Antwort als falsch.
( ) Richtig
Verbesserungen von bubble sort (wie z.B. shaker sort) verbessern
seine Komplexität nicht
( ) Falsch
Grund:
( ) Richtig
Die Entwurfmuster „Fassade“ ist geeignet, Algorithmen implementierungsunabhängig
( ) Falsch zu formulieren.
Grund:
( ) Richtig
In ein
ObjectOutputStream müssen alle Objekte einer Datenstruktur (z.B. eines
Stapels)
( ) Falsch einzeln mit
writeObject
übertragen werden.
Grund:
( ) Richtig
Es gibt Objekte, die einem
JFrame-Objekt
hinzugefügt werden,
( ) Falsch und doch nicht sichtbar gemacht werden können.
Grund:
( ) Richtig
Von der Wurzel bis zum Blatt eines Binärbaums mit n Elementen führen
( ) Falsch im Durchschnitt n2 Schritte
Grund:
( ) Richtig
Eine Liste rekursiv durchzulaufen braucht genauso viel Zeit und Platz wie
iterativ.
( ) Falsch
Grund:
( ) Richtig
Es ist möglich, dass
r1.equals(r2) true liefert,
( ) Falsch
r1.deepEquals(r2)
(die tiefe Gleichheit) aber
false
Grund:
( ) Richtig
Die Reihungsimplementierung eines Multibehälters ist immer schneller
( ) Falsch als die Implementierung als verkettete Liste.
Grund:
Aufgabe 4: Schreiben Sie ein swing-Applet mit einer Schleife, in der Sie zehn Ziffernknöpfe (wie im Taschenrechner) erzeugen, beschriften (0-9), einem Panel hinzufügen und mit einem (gemeinsamen) Lauscher versehen. Schreiben Sie auch den Lauscher: Der zuletzt gedrückte Knopf soll rot gefärbt werden, alle anderen sollen blau sein.
Anweisungen aus der Musterlösung als Tipp (verwenden Sie aber andere eigene Bezeichner!):
knoepfe[i] = new JButton("" + i); setBackground(Color.blue); knoepfe[ereignis.getActionCommand().charAt(0) - '0'].setBackground(Color.red);
Aufgabe 5.: Zeichnen Sie die Datenstruktur (alle Objekte und alle Referenzen, die darauf zeigen) eines JFrame-Objekts mit zwei Knöpfen (JButton) und einem (gemeinsamen) Lauscher. Schreiben Sie zu den Referenzen ihren Namen, zu den Objekten die Namen ihre Klassen (u.U. ihrer Oberklassen/Schnittstellen) hin. Was ist der Unterschied zu Frame?