Bedingungen der Klausur: Es sind keine Unterlagen zugelassen. Schreiben Sie die Lösungen gegebenenfalls auf ein numeriertes leeres Blatt mit Ihrem Namen und Ihrer Matrikelnummer; 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, daß 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. Neben der Punktzahl der einzelnen Aufgaben steht als Orientierung ein geschätzter maximaler Zeitaufwand (insg. 90 Minuten). In den letzten 15 Minuten werden keine Fragen mehr beantwortet.
Aufgabe 1. (40 Punkte, 20 Min): Definieren Sie eine lokale Prozedur (ca. 6 Zeilen) mit einem in-out-Parameter vom Typ TSteuersatz, den Sie aus dem Modul MFinanzen importieren. Rufen Sie darin die Methode Netto aus diesem Modul auf, nachdem über Eingabe aus dem von MFinanzen exportierten Modul MFinanz_EA der Steuersatz eingelesen wurde. Die nötigen Schnittstellen sind:
package MFinanzen is type TSteuersatz is private; procedure Netto (Brutto_Satz: in TSteuersatz; Netto_Satz: out TSteuersatz); -- errechnet Netto aus Brutto package MFinanz_EA is procedure Eingabe (Steuersatz: out TSteuersatz); -- liest Steuersatz ueber eine Eingabemaske ein
Aufgabe 2. (40 Punkte, 20 Min): Sie haben am Anfang des Semesters das Programm Ada_ist_Spitze entwickelt, das sich ähnlich wie das Programm Hallo_Welt verhalten hat. In der Tat geschieht im Initialisierungsteil des Moduls MAda_ist_Spitze nichts mehr, als daß die Methode Feuer aus dem Paket MHallo_faule_Welt mit den drei konstanten String-Parametern "Ada", "ist" und "Spitze" aufgerufen wurde. Schreiben Sie nun die Spezifikation des Pakets MHallo_faule_Welt (ca. 5 Zeilen) auf: Im Manuskript wurden seine Methoden Hallo (parameterlos, Textausgabe von "Hallo") und Feuer (parameterlos, Animation "Hallo Welt!) aufgerufen; in der Probeklausur haben Sie Ihre Oma durch den Aufruf von Feuer mit einem String-Parameter begrüßt.
Aufgabe 3. (30 Punkte, 10 Min): Der private Teil der Paketspezifikation MFarbenmenge definiert den ADT als
type TFarbenmenge is array (TFarbe) of Boolean; -- True wenn Farbe eingetragen
Implementieren Sie nun die Methoden Fuellen (schreibt eine Farbe in eine Menge) und Vorhanden (sagt, ob eine Farbe in einer Menge enthalten ist oder nicht) (ca. 4 Zeilen).
Aufgabe 4. (60 Punkte, 20 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 Mit Hilfe der Methode new können neue Datenobjekte erzeugt werden.
( ) Falsch
Grund:
( ) Richtig Datentypen können von Datenabstraktionsmodulen (wie MEin_Eimer) exportiert werden.
( ) Falsch
Grund:
( ) Richtig Das Auftreten einer Ausnahme kann dem Aufrufer gegenüber verheimlicht werden.
( ) Falsch
Grund:
( ) Richtig Bei einem Aufzählungstyp mit einem Wert führt Succ und Pred immer zum Constraint_Error.
( ) Falsch
Grund:
( ) Richtig Die Zuweisung ist ein infix-Informator.
( ) Falsch
Grund:
( ) Richtig Die Signatur einer lokalen Funktion bestimmt die Ausgaberichtung aller Parameter.
( ) Falsch
Grund:
( ) Richtig Ordnungsoperatoren können nicht umdefiniert werden.
( ) Falsch
Grund:
( ) Richtig Jede kopfgesteuerte Schleife kann mit einer Zählschleife simuliert werden.
( ) Falsch
Grund:
( ) Richtig Der rechte Operand von and then wird errechnet, wenn der linke False ergibt.
( ) Falsch
Grund:
( ) Richtig Abstrakte Datentypen werden immer mit Hilfe von Verbunden und Reihungen
( ) Falsch implementiert.
Grund:
Aufgabe 5. (30 Punkte, 20 Min): Finden Sie die 10 Fehler im folgenden Ada-Programm. Notieren Sie die Zeilennummer und beschreiben Sie den Fehler auf einem Extrablatt: