1. Rahmenbedingungen

  2. Aufgabe 1

  3. Aufgabe 2

  4. Aufgabe 3

  5. Aufgabe 4

  6. Aufgabe 5

  7. Anhang

Klausur PROGRAMMIEREN 3


10.Februar 2004, 14:30h - 16:30h, BCN 202+203

Dozent: Döben-Henisch


MATRIKELNUMMER:__________________

NAME:______________________________________________________


1. Rahmenbedingungen


  1. Die Klausurzeit für PROGR3 beträgt 120 Min. Man darf seinen Platz erst verlassen, wenn der Prüfungsleiter die erfolgreiche Transaktion der Dateien bestätigt hat.

  2. Die Klausur ist unter Benutzung des Rechners zu erbringen.

  3. Eine Datei mit den Aufgaben der Klausur wird zu Beginn der Klausur geladen. Die Aufgaben müssen dann mithilfe der entsprechenden Werkzeuge bearbeitet werden.

  4. Auf dem Arbeitstisch dürfen nur leere Blätter und Schreibgeräte benutzt werden. Alle benutzten Blätter müssen mit Name und Matr.Nummer gekennzeichnet sein. Nicht markierte Blätter benutzte Blätter gelten als Täuschungsversuch.

  5. Jeder Teilnehmer legt fuer die Klausur ein Verzeichnis an mit seinem Namen. Innerhalb dieses Verzeichnisses fuer jede einzelne Aufgabe ein Unterverzeichnis. Im Hauptverzeichnis gibt es mindestens eine mit Openoffice erstellte Datei (NAME.doc). Diese Datei enthält alle Ergebnisse in Form von Texten oder Grafiken in einem einzigen Dokument, vollständig durchnummeriert, dazu Name und Matrikelnummer am Beginn des Dokumentes.

  6. Das aktive Abschreiben wie auch das Zulassen von Abschreiben wird als Täuschungsversuch bewertet.

  7. Teilnehmer an der Klausur müssen sich durch Lichtbildausweis identifizieren.

  8. Es gilt folgende Punktetabelle:

    NOTE

    PUNKTE

    1

    >69

    2

    55-69

    3

    40-54

    4

    25-39

    5

    <25

Die Anrechnung von Übungspunkten erfolgt nach der im Skript angegebenen Formel.

AUFGABE 1: FRAGEN: MAX 15 Pkt; ERREICHTE Pkt: _______________________



Beantworten sie die nachfolgenden Fragen. Pro Frage kann es 1,5 Pkt geben:



  1. Worin unterscheidet sich das objektorientierte Programmieren unter Verwendung der Sprache C++ von einer nicht objektorientierten Programmierweise unter Verwendung der Sprache C?

  2. Welche Rolle können die UML-Diagramme im Rahmen eines objektorientierten Programmierens spielen?

  3. Welche Dateien benötigt man in C++, wenn man eine definierte Klasse lauffähig implementieren will? Welche Aufgabe haben die verschiedenen beteiligten Dateien? (natürlich kann man auch alles in eine Datei schreiben; diesen schlechten Stil wollen wir hier nicht betrachten).

  4. Welche Aufgabe erfüllt ein sogenanntes Anwendungsfalldiagramm ('usecase') im Rahmen des objektorientierten Programmierens? Was sind die wichtigsten grafischen Elemente, um diese Aufgabe realisieren zu können? (Evtl. kleine Skizze)

  5. Welche Aufgabe erfüllt ein sogenanntes Klassendiagramm im Rahmen des objektorientierten Programmierens? Was sind die wichtigsten grafischen Elemente, um diese Aufgabe realisieren zu können? (Evtl. kleine Skizze)

  6. Welche Aufgabe erfüllt ein sogenanntes Sequenzdiagramm im Rahmen des objektorientierten Programmierens? Was sind die wichtigsten grafischen Elemente, um diese Aufgabe realisieren zu können? (Evtl. kleine Skizze)

  7. Welche Aufgabe erfüllt ein sogenanntes Aktivitätsdiagramm im Rahmen des objektorientierten Programmierens? Was sind die wichtigsten grafischen Elemente, um diese Aufgabe realisieren zu können? (Evtl. kleine Skizze)

  8. Wenn man aus UML-Diagrammen vom Typ Klassendiagramm automatisch Quelltext erzeugen lässt, welcher Teil des Kodes lässt sich auf diese Weise AUTOMATISCH erzeugen und welcher Teil lässt sich in der Regel NICHT AUTOMATISCH erzeugen?

  9. Was verstehen sie unter einem Verhaltensmodell? Worin unterscheidet sich ein Verhaltensmodell von einem Designmodell?

  10. Was ist eine Ereignis-Reaktions-Liste? Wozu kann man sie im Rahmen des objektoientierten Programmierens verwenden?





AUFGABE 2: MODELLIERUNG: MAX 20 Pkt; ERREICHTE Pkt: _______________________

Diese Modellierungaufgabe besteht aus mehreren Teilaufgaben. Für alle zu erstellenden Diagramme benutzen sie das Werkzeug umbrello und exportieren die erzeugten Diagramme als Bilder im PNG-Format. Diese Bilder fügen Sie dann in ihr Dokument ein.

Ausgangspunkt der Modellierungsaufgabe ist die Existenz eines der berühmtesten Papiertheatermuseums weltweit in Hanau (URL: http://www.invisius.de/d/ptheute/museen.htm )

Papiertheater Seix

Papiertheater Scholz




Dort ist u.a. zu lesen:

"In Europa existieren zwei Museen, die sich ausschließlich mit dem Papiertheater beschäftigen - in Hanau in Deutschland und im schwedischen Nyköping.

Daneben gibt es einige Museen, die dem Papiertheater eine eigene Abteilung gewidmet haben.

Papiertheater heute:

Heute beschäftigen sich Menschen in ganz Europa, in Amerika und sogar in Afrika mit dem Papiertheater. In den letzten Jahren entstanden zahlreiche Festivals in Deutschland, Frankreich und England, die Museen holten Teile Ihrer umfangreichen Bestände wieder aus den Kellern und präsentieren sie, und seit einigen Jahren gibt es in Deutschland sogar einen Verein - ein Forum für Papiertheater. Auch im Internet finden Sie inzwischen vielfältiges Material zum Papiertheater und seinen Spielern."



Im Prinzip besteht ein Papiertheater aus einem Sichtfenster, das den Blick frei gibt auf eine Bühne, deren Inhalt durch Figuren, Gegenständen und Landschaften gefüllt werden kann. Eine Raumwirkung entsteht dadurch, dass die Papierobjekte beweglich auf Schienen montiert sind, die hintereinander angeordnet sind. Diese optischen Eindrücke werden durch Sprecher, Musik und Spezialeffekte zusätzlich unterstützt. Natürlich liegt es nahe, ein Papiertheater im Computer zu simulieren, in erster Linie, um Drehbuchschreiber zu unterstützen. Ansätze dazu soll die folgende Aufgabe bieten.



Aufgabe 2.1: Use Case/Ereignis-Reaktions-Liste: MAX Pkt: 5 : Erreichte Punkt: ____

Erstellen sie ein Anwendungsfalldiagramm für die Situation, dass ein Drehbuchautor einen Editor für ein Papiertheather-Simulator zur Verfügung gestellt bekommen soll. Zentral muss er ein Drehbuch erstellen können, das aus Handlungslinien besteht. Handlungslinien werden von Akteuren besetzt. Diese können zu verschiedenen Zeitpunkten aktiviert werden, indem Sie auf der Bühne auftreten müssen. Akteure werden z.B. begleitet von Gegenständen, Landschaften, Musik und Beleuchtung. Akteure reden und handeln. Der Editor muss die Möglichkeit geben, entsprechende Angaben im Drehbuch abzulegen. Neben der Erstellung des Drehbuchs will ein Autor auch testen können, wie das bisher festgelegte Drehbuch 'wirkt', d.h. er will auch 'Testläufe' machen können, indem der Editor vom EDIT-Modus ind den PLAY-Modus wechselt. In diesem Modus simuliert der Computer Bühnenbilder mit Akteuren, die reden und handeln.



Aufgabe 2.2: Klassendiagramm: MAX Pkt: 5 : Erreichte Punkt: ____

Nachdem Sie ein Anwendungsdiagramm erstellt haben, identifizieren sie, welche Klassen als Basis für die Realisierung der identifizierten Aufgaben dienen können. Beachten sie, dass sie nur ein Verhaltensmodell der Klassen identifizieren sollen, d.h. welche Interaktionen zwischen den Klassen und dem Benutzer (= Drehbuchautor) stattfinden soll, nicht, wie dies realisiert werden soll. Erzeugen sie mit umbrello aus ihren Klassen automatisch Quellkode.



Aufgabe 2.3: Sequenzdiagramme: MAX Pkt: 5 : Erreichte Punkt: ____

Ergänzen Sie das Klassendiagramm um ein Sequenzdiagramm, in dem die zeitliche Abfolge der verschiedenen Aktionen des Benutzers und der beteiligten Klassen dargestellt werden.



Aufgabe 2.4: Aktivitätsdiagramm: MAX Pkt: 5 : Erreichte Punkt: ____

Wenn sie unterschiedliche Klassen zur Verfügung gestellt haben, dann wollen sie diese auch benutzen. Dies geschieht in der Regel im Rahmen eines Usage-Programms. Beschreiben sie die Struktur ihres Usage-Programms für den Papiertheater-Editor durch ein Aktivitätsdiagramm.





AUFGABE 3: FLEX: MAX 10 Pkt; ERREICHTE Pkt: _______________________

Spätestens aus der Vorlesung Rechnerarchitektur kennen Sie die logischen Wahrheitsfunktionen UND ('+'), ODER ('!') und NICHT ('-'), mit denen z.B. das Verhalten von Schaltungen beschrieben werden kann (Siehe Wahrheitswerttabellen im Anhang). Im Folgenden wird angenommen, dass aussagenlofische Variablen als Ketten von Grossbuchstaben in Postfix-Schreibweise geschrieben werden. Ausserdem wird der Wahrheitswert WAHR (= '1') bzw FALSCH (= '0') direkt an die Variable angehängt, z.B.:



A0 B1 + /* A=FALSCH UND B=WAHR */

AA1 BB0 ! /*AA=WAHR ODER BB=FALSCH */

AA0- B1 + /* NICHT AA=FALSCH UND B=WAHR */

AA0- B1 + A1 ! /* NICHT AA=FALSCH UND B=WAHR ODER A=WAHR */



Schreiben Sie ein flex-Programm, das in solchen aussagenlogischen Aussagen die Variablen mit Wahrheitswert und die Operatoren erkennen kann. Benutzen sie dazu den folgenden Rahmen, um ein 'stand alone' flex-Programm zu schreiben:

/* al1.l

* Scanner for propositional statements

*/

%{

#include ......

%}

........

%%

.... RULES.....

%%

int main( ... ) { .......

yylex();

}







AUFGABE 4: BISON mit FLEX: MAX 20 Pkt; ERREICHTE Pkt: _______________________

Schreiben Sie ein bison-Programm, das das zuvor entwickelte flex-Programm als Scanner benutzt. Das Programm soll die Anordnung der aussagenlogische Variablen und Operatoren erkennt und den korrekten Wahrheitswert der gesamten Formel erkennen, z.B.:

A0 B1 + /* A=FALSCH UND B=WAHR ergibt FALSCH */

AA1 BB0 ! /*AA=WAHR ODER BB=FALSCH ergibt WAHR */

AA0- B1 + /* NICHT AA=FALSCH UND B=WAHR ergibt WAHR */

AA0- B1 + A1 ! /* NICHT AA=FALSCH UND B=WAHR ODER A=WAHR ergibt WAHR */

Bei der Programmierung können Sie das folgende Schema benutzen:

/***************************

* bison-al.y

* uses flex-al.l as scanner

* bison -d bison-al.y

* flex flex-al.l

* gcc -o al bison-al.tab.c lex.yy.c -lfl -lm

***************************/

%{ /* PROLOGUE */

#include <math.h>

#include <stdio.h>

#include "bison-al.tab.h"

%}

/* BISON DECLARATIONS */

%token ...

%% /* BISON RULES */

........................

%%

/* A simple main-function -----------------------------------------------*/

int

main (void)

{

return yyparse ();

}

/* A simple error-function -----------------------------------------------*/

void yyerror (const char *s) /* called by yyparse on error */

{ printf ("%s\n", s); }



AUFGABE 5: MEALY-AUTOMAT: MAX 15 Pkt; ERREICHTE Pkt: _______________________

In dem Verzeichnis MEALY finden Sie die folgenden Dateien:

Makefile.mealy

Makefile

mealy.hpp

Klassendefinition

mealy.cpp

Implementierung der Klasse

mealy_usage.cpp

Usage-Datei

test1.mealy

mealy-Programm



Mit dem Befehl make -f Makefile.mealy können Sie daraus die ausführbare Datei mealy_sim erzeugen. Diese Dateien realisieren einen Mealy-Simulator (siehe auch Bild im Anhang). Die Datei test1.mealy enthält ein mealy-Programm zur Umwandlung von Dezimalziffern in Kleinbuchstaben.

{2} <--- Endzustände

<1,0,0,1>

<1,1,a,1>

<1,2,b,1>

<1,3,c,1>

<1,4,d,1>

<1,5,e,1>

<1,6,f,1>

<1,7,g,1>

<1,8,h,1>

<1,9,i,1>

<1,_,_,2>



Die zu lösenden Aufgaben lauten nun wie folgt:

Aufgabe 5.1: Aktivitätsdiagramm: MAX Pkt: 8 : Erreichte Punkt: ____

Analysieren Sie das Programm usage_mealy.cpp und erstellen sie ein Aktivitätdiagramm mit dem Werkzeug umbrello. Nennen Sie es mealy_activity1. Ändern Sie dieses Aktivitätsdiagramm so ab, dass Sie zwei Mealyautomaten m1 und m2 einführen, so dass der Output von m1 zum Input für m2 wird. Nennen Sie das neue Aktivitätdiagramm mealy_activity2. Exportieren Sie die Diagramme im PNG-Format und fügen Sie die PNG-Bilder in ihr Dokument ein.

Aufgabe 5.2: Eigenes Mealyprogramm: MAX Pkt: 2 : Erreichte Punkt: ____

Erstellen Sie analog zu dem Mealyprogramm test1.mealy mit einem Editor ein Programm test2.mealy, das die Zeichen {0,a,b, ..., i} in römische Ziffern {0,i,ii, ..., ix} verwandelt.

Aufgabe 5.3: Änderung des Usage-Programms: MAX Pkt: 5 : Erreichte Punkt: ____

Verändern sie das Usage-Programm nun entsprechend dem Aktivitätsdiagramm so, dass der Output des Mealyautomaten m1 direkt zum Input des mealy-Automaten m2 wird. Im Endergebnis übersetzen ihre beiden Automaten dann Dezimalziffern {0,1, ..., 9} zuerst in Kleinbuchstaben {0,a, ..., i} und diese dann in römische Ziffern {0,i, ..., ix}. Nennen Sie das neue usage-Programm usage_mealy2.cpp.

6. ANHANG


BILD: Dateien bei der Verwendung von flex und bison




BILD: Kommunikation zwischen flex, bison, der Usage-Datei und dem Keyboard



WAHRHEITSWERTTABELLEN ZU DEN (AUSSAGEN-)LOGISCHEN OPERATOREN UND ('+'), ODER ('!'), NICHT ('-')

A

B

UND ('+')

1

1

1

1

0

0

0

1

0

0

0

0




A

B

ODER ('!')

1

1

1

1

0

1

0

1

1

0

0

0




A

NICHT ('-')

1

0

0

1





SKIZZE ZU DEN WICHTIGSTEN EIGENSCHAFTEN EINES MEALY-SIMULATORS



KLAUSUR PROGRAMMIEREN3 - 10.Febr.2004 - 10//10