summaryrefslogtreecommitdiffstats
path: root/Bachelor/Prog2/Prakt5/Aufg2/uebklaus.htm
diff options
context:
space:
mode:
authorSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
committerSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
commit33613a85afc4b1481367fbe92a17ee59c240250b (patch)
tree670b842326116b376b505ec2263878912fca97e2 /Bachelor/Prog2/Prakt5/Aufg2/uebklaus.htm
downloadStudium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz
Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2
add new repoHEADmaster
Diffstat (limited to 'Bachelor/Prog2/Prakt5/Aufg2/uebklaus.htm')
-rw-r--r--Bachelor/Prog2/Prakt5/Aufg2/uebklaus.htm209
1 files changed, 209 insertions, 0 deletions
diff --git a/Bachelor/Prog2/Prakt5/Aufg2/uebklaus.htm b/Bachelor/Prog2/Prakt5/Aufg2/uebklaus.htm
new file mode 100644
index 0000000..691d811
--- /dev/null
+++ b/Bachelor/Prog2/Prakt5/Aufg2/uebklaus.htm
@@ -0,0 +1,209 @@
+<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="Author" content="Hans-Peter Weber">
+ <meta name="GENERATOR" content="Microsoft FrontPage 4.0"><title>Praktikum 5.2</title><!-- saved from url=(0079)http://www.fbi.fh-darmstadt.de/~erbs/Lehrveranstaltungen/Pg2KoSI/Pr6/index.html --></head>
+
+<body>
+&nbsp;
+<table border="1" width="100%">
+<tbody><tr>
+<td bgcolor="#efefde" width="25%">FH Darmstadt&nbsp;
+<br>FB Informatik
+<p>Prof.Dr.H.P.Weber</p></td>
+
+<td>
+<center><font size="+3">Programmieren II</font>
+<br><font size="+3">Übungsklausur</font></center>
+</td>
+
+<td bgcolor="#efefde" width="25%">
+<center>
+<p><font size="6">&nbsp;&nbsp;&nbsp; </font><font size="5">Juni 2005</font></p>
+</center>
+</td>
+</tr>
+</tbody></table>
+
+<table border="1" cols="3" height="60" width="100%">
+<tbody><tr>
+<td width="50%">Name:</td>
+
+<td width="30%">MatNr.:</td>
+
+<td width="20%">USER:</td>
+</tr>
+</tbody></table>
+
+<table>
+<tbody><tr valign="top">
+<td>Wesentliches Element vieler rundenbasierter Strategiespiele ist das Konzept der 'Stadt'
+(Town): Vom
+Spieler angelegte Objekte vom Typ Town sind für die Produktion sowohl von
+Einheiten (wird hier nicht weiter betrachtet) als auch von Ressourcen wie Geld, Forschung, Luxusgüter
+(darum soll es im folgenden gehen) zuständig. <br>
+&nbsp;</td>
+</tr>
+</tbody></table>
+
+<table bgcolor="#efefde" width="100%">
+<tbody><tr>
+<td>Anforderungen für die Noten ausreichend und befriedigend:</td>
+</tr>
+</tbody></table>
+
+<p>Realisieren Sie die Klasse <tt><b>Town</b></tt> zusammen mit einem Anwendungsprogramm zum
+Testen. Hierbei soll folgendes gelten:</p>
+<ul>
+<li>
+Attribute von <tt><b>Town</b></tt>-Objekten sind <tt><b>name</b></tt> (Name der Stadt), <tt><b>size</b></tt> (Größe der Stadt),
+<tt><b>money</b></tt> (Geldmenge, die jede Runde produziert wird), <tt><b>research</b></tt>
+(Forschungsergebnisse, die jede Runde produziert werden), <tt><b>luxuryGoods</b></tt>
+(Luxusgüter, die jede Runde produziert werden). <tt><b>name</b></tt> ist vom Typ <tt><b>string</b></tt> und wird
+vom Konstruktor aus dem Anwendungsprogramm übernommen, alle anderen Attribute
+sind vom Typ <tt><b>int</b></tt> und werden bei der Erzeugung einer Stadt mit dem Wert 1
+initialisiert.</li>
+<li>
+Die Methode <tt><b>grow</b></tt> erhöht alle Attribute eines <tt><b>Town</b></tt>-Objektes (außer <tt><b>name</b></tt>) um den
+Wert 1.</li>
+<li>
+Der überladene <tt><b>operator&lt;&lt;</b></tt> gibt als erstes den Namen der Stadt und dann die aktuellen
+Werte aller anderen Attribute in einer geeigneten Formatierung aus.</li>
+<li>
+Das Anwendungsprogramm soll dem Benutzer ein Menü mit den vier Alternativen</li>
+<ul>
+<li>
+Neue Stadt
+</li>
+<li>
+Nächste Runde
+</li>
+<li>
+Alle Städte anzeigen
+</li>
+<li>
+Spiel beenden</li>
+</ul>
+anbieten. <br>
+<ul>
+<li>
+Wenn der Benutzer 'Neue Stadt' auswählt, soll er nach einem Namen gefragt werden
+und, nachdem dieser eingelesen wurde, ein <tt><b>Town-Objekt</b></tt> mit diesem Namen erzeugt werden. Dieses Objekt soll in eine
+verkettete Liste <tt><b>allTowns</b></tt> eingefügt werden.
+</li>
+<li>
+Wenn der Benutzer 'Nächste Runde' auswählt, soll ein Rundenzähler inkrementiert
+werden. Alle drei Runden wird die <tt><b>grow</b></tt>-Methode für alle Städte in der Liste
+aufgerufen.
+</li>
+<li>
+Wenn der Benutzer 'Alle Städte anzeigen' auswählt, sollen alle
+Städte in der Liste <b>in alphabetischer Reihenfolge</b> (Sortierung nach
+ASCII-Code reicht aus) der Namen der Städte ausgegeben werden.</li>
+</ul>
+
+<li>Hinweis: Es ist erlaubt und sinnvoll, für die verkettete Liste <tt><b>std::list</b></tt> aus
+der STL zu benutzen.</li>
+</ul>
+
+<table bgcolor="#efefde" width="100%">
+<tbody><tr>
+<td>Anforderungen für die Note gut:</td>
+</tr>
+</tbody></table>
+
+<p>Die Leistungsfähigkeit eines <tt><b>Town</b></tt>-Objektes wird neben seiner Größe vor allem
+von den in der Stadt vorhandenen Gebäuden unterschiedlicher Art bestimmt.
+Realisieren Sie eine einfache Vererbungshierarchie für die Gebäude, die eine
+Stadt haben kann. Hierbei gilt folgendes:</p>
+
+<ul>
+<li>
+Basisklasse ist die abstrakte Klasse <tt><b>Building</b></tt>. Sie enthält die rein virtuelle
+Methode <tt><b>improveTown</b></tt>, über die die Ressourcenproduktion der Stadt
+durch Gebäude verbessert werden kann. Außerdem enthält sie als Attribut eine
+Referenz auf <tt><b>Town</b></tt>, die vom Konstruktor auf diejenige Stadt gesetzt wird, zu der
+das jeweilige Gebäude gehört.</li>
+<li>
+Von <tt><b>Building</b></tt> abgeleitet sind die Klassen <tt><b>MoneyBuilding</b></tt> (mit dem <tt><b>int</b></tt>-Attribut
+<tt><b>moneyAdder</b></tt>) und <tt><b>ResearchBuilding</b></tt> (mit dem <b> <tt>
+double</tt></b>-Attribut <tt><b>researchFactor</b></tt>).</li>
+<li>
+Von <tt><b>MoneyBuilding</b></tt> abgeleitet sind die Klassen <tt><b>Marketplace</b></tt> und <tt><b>Bank</b></tt>. Bei der
+Erzeugung eines <tt><b>Marketplace</b></tt>-Objekts wird sein <tt><b>moneyAdder</b></tt>
+auf den Wert 5
+gesetzt, bei der Erzeugung eines <tt><b>Bank</b></tt>-Objekts wird sein <tt><b>moneyAdder</b></tt> auf den Wert
+10 gesetzt.</li>
+<li>
+Von <tt><b>ResearchBuilding</b></tt> abgeleitet sind die Klassen <tt><b>Library</b></tt> und <tt><b>University</b></tt>. Bei der
+Erzeugung eines <tt><b>Library</b></tt>-Objekts wird sein <tt><b>researchFactor</b></tt> auf den Wert
+1.3 gesetzt,
+bei der Erzeugung eines <tt><b>University</b></tt>-Objekts wird sein <tt><b>researchFactor</b></tt> auf den Wert
+1.5 gesetzt.</li>
+<li>
+Die Methode <tt><b>improveTown</b></tt> soll für <tt><b>Marketplace</b></tt> und <tt><b>Bank</b></tt> die entsprechenden
+<tt><b>moneyAdder</b></tt>-Werte zum Attribut <tt><b>money</b></tt> der Stadt addieren. Im Fall von <tt><b>Library</b></tt> und
+<tt><b>University</b></tt> sollen die <tt><b>researchFactor</b></tt>-Werte mit dem Attribut <tt><b>research</b></tt> der Stadt
+multipliziert werden.</li>
+<li>
+Ergänzen Sie in der <tt><b>Town</b></tt>-Klasse als Attribut eine verkettete Liste von <tt><b>Building*</b></tt>-Zeigern.&nbsp;</li>
+<li>
+Ergänzen Sie im Benutzer-Menü einen Punkt</li>
+<ul>
+<li>
+Neues Gebäude für vorhandene Stadt</li>
+</ul>
+wo dem Benutzer eine Auflistung der möglichen Gebäude zur Auswahl angezeigt wird.
+Nachdem ein Gebäude ausgewählt wurde, soll nach dem Namen der Stadt gefragt
+werden, zu der das Gebäude hinzugefügt wird. Das Gebäude-Objekt wird dann
+dynamisch erzeugt und in die <tt><b>Building*</b></tt>-Liste der betreffenden
+Stadt eingefügt. Hierfür soll die <tt><b>Town</b></tt>-Klasse um eine Methode <tt><b>insertBuilding</b></tt>
+ergänzt werden.
+<li>Damit die vorhandenen Gebäude die Ressourcenerzeugung in einer Stadt
+beeinflussen, wird die Methode <tt><b>grow</b></tt> ergänzt: Sie soll nach der
+oben angesprochenen Inkrementierung der Attribute einer Stadt die <tt><b>Building*</b></tt>-Liste
+der Stadt durchgehen und für jedes vorhandene Gebäude <b> <tt>improveTown</tt></b> aufrufen.</li>
+</ul>
+
+<table bgcolor="#efefde" width="100%">
+<tbody><tr>
+<td>Anforderungen für die Note sehr gut:</td>
+</tr>
+</tbody></table>
+
+<p>Der Benutzer soll die Möglichkeit haben, den Spielstand zu einem beliebigen
+Zeitpunkt abzuspeichern und vorher gespeicherte Spielstände wieder zu laden. Dabei gilt folgendes:</p>
+
+<ul>
+<li>
+Ergänzen Sie im Benutzer-Menü die Punkte</li>
+<ul>
+<li>
+Spiel speichern</li>
+<li>
+Spiel laden</li>
+</ul>
+Hierbei soll der Benutzer jeweils aufgefordert werden, den Namen der Datei
+anzugeben, in die der Spielstand gespeichert bzw. aus der der Spielstand geladen
+werden soll.
+<li>
+Beim Speichern eines Spiels sollen <b>alle</b> Informationen, die den aktuellen
+Spielstand kennzeichnen, in einer Textdatei abgelegt werden. Dazu gehört auch,
+dass in einer geeigneten Form für jede Stadt festgehalten wird, welche Gebäude
+sie besitzt. Nutzen Sie hierzu die Möglichkeiten der Typinformationen zur
+Laufzeit (RTTI), indem Sie z.B. <tt><b>typeid</b></tt> einsetzen.</li>
+</ul>
+
+<table bgcolor="#efefde" width="100%">
+<tbody><tr>
+<td>Note:</td>
+</tr>
+</tbody></table>
+
+<table border="1" height="50" width="100%">
+<tbody><tr valign="top">
+<td>&nbsp;</td>
+</tr>
+</tbody></table>
+
+</body></html> \ No newline at end of file