Klausur PR19 WS 92/93

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:

  1. procedure Haeufigkeitszaehlung is
  2. subtype TBuchstaben is new Character range 'a' .. 'z';
  3. type TAnzahl is array (Natural) of TBuchstaben;
  4. Zeichen: Character;
  5. Anzahl: TAnzahl := (others => 0);
  6. begin Text_IO.Put ("Bitte Text eingeben, mit 0 schließen: ");
  7. while
  8. Text_IO.Get (Zeichen);
  9. when Zeichen = "0" exit;
  10. if 'a' <= Zeichen <='z' then Anzahl (Zeichen) := Anzahl (Zeichen) + 1; end if;
  11. end loop;
  12. Text_IO.Put ("Haeufigkeiten von Buchstaben:");
  13. for Zeichen in TBuchstaben loop
  14. Text_IO.Put (Zeichen); Text_IO.Put_Line (Anzahl (Zeichen));
  15. end Haeufigkeitszaehlung;