1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="H.P.Weber">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<title>Praktikum 1</title></head>
<body>
<table border="1" cellspacing="0" width="100%">
<caption> </caption>
<tbody><tr>
<td bgcolor="#efefde" width="25%">FH Darmstadt
<br>FB Informatik
<br>Prof.Dr. H.P.Weber</td>
<td>
<center><font size="+3">Programmieren II</font>
<br><font size="+3">Praktikum</font></center>
</td>
<td bgcolor="#efefde" width="25%">
<center><font size="+4">1</font></center>
</td>
</tr>
</tbody></table>
<br>
<table border="1" width="100%">
<tbody><tr valign="top">
<td>Ziel:</td><td>
Sie sollen die in Programmieren I erlernten Sprachelemente von C++
(insbesondere Klassendefinition und �berladen von Operatoren) anwenden k�nnen.
</td>
</tr>
</tbody></table>
<br>
<br>
<table border="1" cellspacing="0" width="100%">
<tbody><tr valign="top">
<td>
<h3><b>1 MasterMind-Spiel</b></h3>
Realisieren Sie eine objektorientierte Version des in den 70er-Jahren
des letzten Jahrhunderts beliebten Spieles
<i>MasterMind</i>.
<ul>
<li>
In der Version f�r diese Aufgabe 'denkt sich' der Computer eine
vierstellige Zahl aus den Ziffern 1 bis 6 (Methode <b><font face="Courier New">
makeDigitsToGuess</font></b> im Klassendiagramm unten). Der Mensch r�t sie. Jeden
Rateversuch bewertet der Computer, indem er angibt, wieviele Ziffern an der richtigen Stelle
genannt worden sind (<b><font face="Courier New">locationRight</font></b>) und wieviele sonst noch richtig genannt wurden, ohne
an der richtigen Stelle zu stehen (<b><font face="Courier New">locationWrong</font></b>).
</li>
<li>
Nehmen wir einmal an, der Computer hat sich die Zahl 1434 ausgedacht.
Ein Dialog k�nnte dann so aussehen:
<br>Mensch r�t: <font color="#3366ff">3654 </font>Computer-Antwort:
<font color="#3366ff">1
an der richtigen Stelle; sonst 1 richtig</font>
<br>Mensch r�t: <font color="#3366ff">4444 </font>Computer-Antwort:
<font color="#3366ff">2
an der richtigen Stelle; sonst 0 richtig</font>
</li>
<li>
Neben der Standardvariante, bei der der Computer eine zu ratende Zahl
vorgibt, soll auch ein Testmodus m�glich sein, bei dem vom Tester
eine beliebige vierstellige Zahl aus den Ziffern 1 bis 6 eingegeben werden
kann, die dann zu 'raten' ist.
�berlegen Sie sich <u>vor</u> der Realisierung Ihrer L�sung
eine Reihe von Testf�llen mit den zugeh�rigen Computer-Antworten.
Welche F�lle sind besonders kritisch? Ber�cksichtigen Sie bei
der Implementierung Ihrer L�sung auch diese kritischen Testf�lle.
</li>
</ul>
</td>
</tr>
<tr>
<td>
<ul>
<li>
Realisieren Sie anhand des folgenden Klassendiagramms eine Klasse
<font face="Courier New"><b>MastermindDigits</b></font>, die die oben geschilderten
Anforderungen erf�llt (achten Sie dabei auch auf m�glichst weitgehende
'<b><font face="Courier New">const</font></b>-correctness').</li>
<li>
Der (Konvertierungs-)Konstruktor erzeugt
ein dynamisches int-Array <b><font face="Courier New">digits</font></b>, dessen Elemente die einzelnen Ziffern der
vierstelligen int-Zahl enthalten. Er �bernimmt diese int-Zahl als Parameter und
speichert die einzelnen Ziffern der Zahl in die Elemente von <b><font face="Courier New">digits</font></b>.</li>
<li>
Realisieren Sie au�erdem die drei weiteren
Methoden/Operatoren, die Bestandteil jeder Klasse sein sollten, deren Objekte
Zeiger auf dynamisch zugewiesenen Speicher enthalten. (Sie sind im
Klassendiagramm unten nicht aufgef�hrt!) Dies sollen aber die
einzigen Erg�nzungen der �ffentlichen Schnittstelle sein.<br>
</li>
<li>
Schreiben Sie ein <b>Anwendungsprogramm</b>, das den oben beschriebenen
Spielablauf und den Testmodus als Konsolenanwendung realisiert. Das Anwendungsprogramm
soll mit nur einem <font face="Courier New"><b>MastermindDigits</b></font>-Objekt
arbeiten, von dem aus die Methoden der Klasse aufgerufen werden. Die
Nutzereingabe und der Vergleich soll daher mit int-Zahlen und den entsprechenden
Typ-Konvertierungen der <font face="Courier New"><b>MastermindDigits</b></font>-Klasse
arbeiten.</li>
</ul>
</td>
</tr>
<tr>
<td height="240" width="579">
<table align="center" bgcolor="#efefde" border="1" cols="1">
<tbody><tr>
<td>
<center><b><font face="Courier New">MastermindDigits</font></b></center>
</td>
</tr>
<tr>
<td><b><font face="Courier New">-digits: int*</font></b></td>
</tr>
<tr>
<td>
<b><font face="Courier New">
+MastermindDigits(int)<br>
+makeDigitsToGuess(): void<br>
+locationRight(MastermindDigits&): int<br>
+locationWrong(MastermindDigits): int<br>
+operator int()
</font></b> </td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
<br>
<br>
<br>
<br>
<table border="1" cellspacing="0" width="100%">
<tbody><tr>
<td>
<h3>
<b>2 L�sungsalgorithmus f�r MasterMind-Spiel (fakultativ)</b></h3>
<table width="100%">
<tbody><tr valign="top">
<td><font color="#000000">In Aufgabe 1 wird das Mastermind-Spiel in der
Form realisiert, dass ein menschlicher Benutzer eine vom Computer ausgedachte
Zahl r�t. Jetzt soll der Computer eine Zahl raten, die sich der menschliche
Benutzer ausgedacht hat.
<ul>
<li>
Versehen Sie Ihre L�sung mit
einer Konsolen-Ausgabe und -Eingabe, �ber die ihr Programm seinen Tip ausgibt
und ein menschlicher Gegenspieler die Zahl der Ziffern an der richtigen
Stelle und die sonst noch richtigen Ziffern eingeben kann.
</li>
<li>
Wieviele Versuche ben�tigt Ihr Programm im Mittel, um eine Zahl zu raten?
Um Ihre L�sung besser testen zu k�nnen, lassen Sie den Computer auch die Rolle
des Benutzers �bernehmen: Er denkt sich eine Zahl aus, die er dann zu erraten
versucht. Bestimmen Sie, wieviele Versuche hierbei im Mittel bei z.B. 10000
Spielen gebraucht werden und wieviele Versuche ihr Programm dabei maximal
braucht.</li>
<li>
Anzustreben ist eine L�sung, die jedes Spiel gewinnt, d.h. mit maximal acht
Versuchen wird jede Zahl (mit vier Ziffern aus sechs m�glichen) ermittelt, die sich der
menschliche Gegenspieler (oder der Rechner selbst) ausdenkt.
</li>
</ul>
</font>
</td></tr></tbody></table>
<br>
</td></tr></tbody></table></body></html>
|