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 diese Blätter, bzw. auf ein nummeriertes leeres Blatt 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 (was von Ihnen erwartet wird) wurde kursiv gesetzt.
In den letzten 15 Minuten werden keine Fragen mehr beantwortet.Klausurtermin: 6. Juli 2005 ● Rückgabe: 13. Juli 2005 in der Vorlesung
Aufgabe 1: Der Operator += bei einer verketten Liste hat die Aufgabe, einen Knoten (seinen rechten Operand) an einen anderen Knoten (seinen linken Operand) anzuketten. Der linke Operand wird als Ergebnis zurückgegeben, um „Kettenverkettung” (a += b += c) zu ermöglichen.
Schreiben Sie nun die Definition dieses Operators (Methodenkopf und return-Anweisung, nicht aber den Algorithmus im Rumpf) und einen Aufruf mit 3 Knoten (CKnoten a, b, c; … a += b += c;), aber nicht mit Operatorsyntax sondern Methodensyntax.
Schreiben Sie dieselbe Definition und denselben Aufruf auch in C, wo es keine Referenz- (nur Zeiger-) Parameter gibt.
Aufgabe 2: Fälschungsklassen werden benutzt, um reduziertes Verhalten „quick and dirty” zu simulieren. Schreiben Sie nun eine gefälsche Warteschlangenklasse FakeWS, die nur eine Methode iterator() exportiert. Das von ihr gelieferte Iteratorobjekt (mit den Methoden akutellesElement(), naechstesElement() und mehrElemente(), wie in der letzten Übung) soll nacheinander die drei string-Objekte "Technische", "Fachhohschule" und "Berlin" liefern.
Tipp: Die innere Iteratorklasse braucht einen globalen Zähler, der von 0 bis 2 läuft. Dementsprechend holt akutellesElement() holt aus der globalen string-Reihung die Werte.
struct Color { int komp[3]; } // red, green, blue class WarteschlangeR { Color* inhalt; int juengster, aeltester, anzahl }
Aufgabe 4. (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 Eine Java-Referenz
kann nur auf die Halde (heap) zeigen,
( ) Falsch ein C++-Zeiger kann auch auf den Stapel (stack)
zeigen.
Grund:
( ) Richtig Stromoperatoren
für eine Klasse können nur programmiert werden,
( ) Falsch wenn sie für alle Komponenten (Attributen) der
Klasse zur Verfügung stehen.
Grund:
( ) Richtig Java-Programme
werden ausschließlich dynamisch gebunden,
( ) Falsch C++-Programme werden ausschließlich statisch
gebunden
Grund:
( ) Richtig Wenn flache
Gleichheit true
ergibt,
( ) Falsch ergibt die tiefe Gleichheit auch
true.
Grund:
( ) Richtig Der Destruktor
einer C++-Klasse wird nur bei
delete
aufgerufen
( ) Falsch
Grund:
( ) Richtig Ein
Kopierkonstruktor hat immer genau einen Parameter.
( ) Falsch
Grund:
( ) Richtig Mehrfachvererbung
in C++ verursacht Namenskonflikte.
( ) Falsch
Grund:
( ) Richtig Der
%-Operator in
der Implementierung des Ringpuffers sorgt dafür,
( ) Falsch dass ein belegter Platz im Puffer nicht
überschrieben wird.
Grund:
Aufgabe 5.: Die Klasse CRandom hat eine einzige Methode float random(), die beim Aufruf Zufallszahlen zwischen 0 und 1 produziert. Schreiben Sie ein Datenabstraktionsmodul (mit Spezifikation und Rumpf), dessen einzige Funktion int zufall() mit Hilfe dieser Klasse Zufallszahlen zwischen 0 und 1000 produziert.