Nachklausur Pr21 WS '00/'01


Name: _____________________________________________                                                Matrikel-Nr.: __________

Platznummer: ______  (vom Betreuer einzeln vergeben)                                       erster (   ) zweiter (   ) letzter (   ) Versuch

Pseudonym: __________________ (wenn Sie möchten, dass Ihr Klausurergebnis im Internet veröffentlicht wird)

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. Schrei­ben Sie die Lösungen auf leere nummerierte Blätter mit Ihrem Namen; kennzeichnen Sie die Aufgabennummer eindeutig. Geben Sie alle Blätter (auch die Schmier­blät­ter) ab. Für falsche oder nicht einleuchtende Lösungen be­kommen Sie grund­sätzlich kei­ne Punk­te. Wenn aber aus Ihren Notizen oder Be­merkungen er­sicht­lich ist, dass Ihr Gedankengang richtig war, kön­nen Sie Teilpunkte bekommen. Sie ver­lie­ren jedoch diese Möglichkeit, wenn Abschreiben oder Kommu­ni­ka­ti­on wäh­rend der Klau­­sur nachgewiesen werden kann. Der Kern der Fragen wurde kursiv gesetzt. Bei manchen Aufgaben steht als Orientierungder Anzahl der Programmzeilen in der Musterlösung. In den letzten 15 Minuten werden keine Fragen mehr beant­wor­tet..

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 Stich­worten 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 Taschenrech­ner) 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?