Unterlagen und Hilfsmittel sind nicht zugelassen. Kommunikation während der Klausur ist nur mit dem Dozenten erlaubt, der Mißverständnisse und Unklarheiten klären kann. Schrei­ben Sie die Lösungen auf diese Blätter bzw. auf ein numeriertes lee­res Blatt mit Ihrem Namen; kennzeichnen Sie die Aufgabennummer eindeutig. Geben Sie alle Blät­ter (auch die Schmier­blät­ter) ab. Für falsche oder nicht einleuchtende Lösungen be­kommen Sie grund­sätz­lich kei­ne Punk­te. Wenn aber aus Ihren Notizen oder Be­merkungen er­sicht­lich ist, daß Ihr Gedankengang richtig war, kön­nen Sie Teil­punkte 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:6. April 2000, um 10:00 - 11:30 Uhr Raum B 412 (Haus Gauß)

Die Klausurnote (rot) wird abwärts gerundet. Sie ergibt mit der Übungsnote (blau) gemittelt die Endnote (gelb):


Aufgabe 1. (ca. 20 Programmzeilen): Die Methode ungradieren einer Liste aus Ganzzahlelementen sichert, dass nach ihrem Aufruf alle Elemente ungerade Zahlen sind: Sie dividiert jedes Element durch 2 solange wie möglich.

Erweitern Sie nun die Klasse GanzWSReihung aus der Übung um die Methode ungradieren(). Die Datenstruktur der Klasse ist:

public class GanzWSReihung {
	protected int[] inhalt;
	protected int aeltestes, juengstes, anzahl;
	...

Aufgabe 2. Zeichnen Sie das Löschen eines Knotens in einer verkettete Liste nach einem gegebenen Knoten:

public class Liste {
	public class Knoten {
		private Object wert;
		private Knoten verbindung;
	}
	private Knoten anker; ...
	public void loeschen (Knoten nachWelchem) {
		nachWelchem.verbindung = nachWelchem.verbindung.verbindung;
	}

}

Ihre Zeichnung soll den Zustand der Liste vor und nach dem Löschen darstellen, inklusive aller beteiligten Objekte und aller Referenzen. Beschreibenen Sie, was geschieht im Fall, wenn nachWelchem der letzte Knoten der Liste ist.


Aufgabe 3. (4 Programmzeilen): Die folgende rekursive Funktion berechnet den größten gemeinsamten Teiler zweier positiven Ganzzahlen:

int ggt(int ersteZahl, int zweiteZahl) {
	if (ersteZahl > zweiteZahl) return ggt(ersteZahl - zweiteZahl, zweiteZahl);
	else if (ersteZahl < zweiteZahl) return ggt(ersteZahl, zweiteZahl - ersteZahl);
	else return ersteZahl;
}

Beschreiben Sie kurz die Arbeitssweise der Funktion und überprüfen Sie ihre Richtigkeit mit den Zahlen 30 und 18.


Aufgabe 4.: 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      Die Datei iostream.h enthält nicht nur C++-Klassen, sondern auch Objekte

(     )     Falsch      

Grund:                   

(     )     Richtig      Die Knoten-Klasse einer rückwärts verketteten Liste aus Java kann unverändert in C++

(     )     Falsch      benutzt werden.

Grund:                   

(     )     Richtig      Die Anzahl der Elemente in der Listen-Implementierung eines Multibehälters kann

(     )     Falsch      nach der Erzeugung des Multibehälter-Objekts nicht mehr verändert werden.

Grund:                   

(     )     Richtig      In Java kann man Objekte auch ohne new erzeugen.

(     )     Falsch      

Grund:                   

(     )     Richtig      Eine while-Schleife (in Java und in C++) ist garantiert keine Endlosschleife.

(     )     Falsch      

Grund:                   

(     )     Richtig      Bei der Ausführung von cout << "Hallo"; in C++ wird eine Methode aufgerufen.

(     )     Falsch      

Grund:                   

(     )     Richtig      Bei der Ausführung der Vereinbarung Integer i; entsteht ein Objekt

(     )     Falsch      

Grund:                   

(     )     Richtig      Wenn der Java-Vergleich r1 == r2 das Ergebnis true liefert, dann liefert auch die Methode

(     )     Falsch      r1.equals(r2) das Ergebnis true.

Grund:                   

(   0   5   10   15   20   25   30   35   40   )


Aufgabe 5. Beschreiben und zeichnen Sie den Unterschied im Prozess des Übersetzens/Bindens/Ausführens

Zeigen Sie auch die Plattform(un)abhängigkeit. Platzieren Sie die Werkzeuge wie

und die Komponenten des Entwicklungprozesses wie