summaryrefslogtreecommitdiffstats
path: root/Bachelor/Prog2/Prakt1/index.htm
blob: 4f896eb62f4a917b2b9cb7f4d7e84c5f6aca4333 (plain)
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>

&nbsp;

<table border="1" cellspacing="0" width="100%">

<caption>&nbsp;</caption>



<tbody><tr>

<td bgcolor="#efefde" width="25%">FH Darmstadt&nbsp;

<br>FB Informatik&nbsp;

<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&nbsp;&nbsp;&nbsp; MasterMind-Spiel</b></h3>

Realisieren Sie eine objektorientierte Version des in den 70er-Jahren

des letzten Jahrhunderts beliebten Spieles

<i>MasterMind</i>.&nbsp;

<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:&nbsp;

<br>Mensch r�t:&nbsp; <font color="#3366ff">3654&nbsp; </font>Computer-Antwort:

<font color="#3366ff">1

an der richtigen Stelle; sonst 1 richtig</font>

<br>Mensch r�t:&nbsp; <font color="#3366ff">4444&nbsp; </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&amp;): 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&nbsp;&nbsp;&nbsp; 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&nbsp; 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>&nbsp;

</td></tr></tbody></table></body></html>