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
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
|
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Praktikum 4</title>
</head>
<body>
<table BORDER CELLSPACING=0 WIDTH="100%" >
<caption> </caption>
<tr>
<td WIDTH="25%" BGCOLOR="#EFEFDE">FH Darmstadt
<br>FB Informatik
<br>Prof.Dr. H.P.Weber</td>
<td>
<center><font size="+3">Programmieren I </font>
<br><font size=+3>Praktikum</font></center>
</td>
<td WIDTH="25%" BGCOLOR="#EFEFDE">
<center><font size=+4>4</font></center>
</td>
</tr>
</table>
<br>
<table border WIDTH="100%" >
<tr VALIGN=TOP>
<td>Ziel:</td><td>
Sie sollen die Verwendung von Arrays, Funktionen und Rekursion üben sowie
grundlegende Sortierverfahren kennen.
</td>
</tr>
</table>
<br>
<table BORDER CELLSPACING=0 WIDTH="100%" >
<tr>
<td>
<h3>
<b>1 Analyse von Craps</b></h3>
<ul>
<li>
Schreiben Sie ein Programm, das 1000000-mal das W�rfelspiel Craps simuliert.
Ihr Programm soll folgende Fragen beantworten:</li>
<ul>
<li>
Wieviele Spiele werden gewonnen beim ersten Wurf, beim zweiten Wurf,
...(usw)..., beim 20.
Wurf und nach dem 20.Wurf?</li>
<li>
Wieviele Spiele werden verloren beim ersten Wurf, beim zweiten Wurf,
...(usw)..., beim 20.
Wurf und nach dem 20.Wurf?</li>
<li>
Wie gro� sind die Chancen Craps zu gewinnen? (Sie sollten herausfinden, dass
Craps eines der fairsten in Spielkasinos gespielten Spiele ist. Was bedeutet
diese Aussage?)</li>
<li>
Wie lang dauert ein Craps-Spiel im Durchschnitt?</li>
<li>
Erh�hen sich die Gewinnchancen mit der Dauer eines Craps-Spieles?</li>
</ul>
</ul>
</td>
</tr>
</table>
<br>
<table BORDER="1" CELLSPACING=0 WIDTH="100%" >
<tr>
<td>
<h3>
<b>2 Sortierverfahren 'Direkte Auswahl (Selection Sort)' und
'Direktes Einf�gen </b>
<b>(Insertion Sort)' </b></h3>
<ul>
<li>
Das Sortierverfahren 'Direkte Auswahl' durchsucht ein unsortiertes Array nach dem kleinsten
Element in dem Array. Danach wird das kleinste Element mit dem ersten Element
des Arrays ausgetauscht. Dieser Prozess wird f�r das unsortierte Teilarray, das mit dem
zweiten Element des Arrays beginnt, wiederholt. Jeder derartige Durchlauf durch
das Array bewirkt, dass ein weiteres Element an die Stelle kommt, an die es
geh�rt. Sobald das unsortierte Teilarray nur noch ein Element enth�lt, ist das Array
sortiert.</li>
<li>
Schreiben Sie eine iterative Funktion <b><font face="Courier New">selectionSort</font></b>
f�r diesen Algorithmus.</li>
<li>
Das Sortierverfahren 'Direktes Einf�gen' fasst das erste Element eines
unsortierten Arrays als bereits sortiertes Teilarray auf, in das sukzessive die
weiteren Elemente eingef�gt werden. Bei diesem Einf�geprozess muss das immer
gr��er werdende Teilarray zu jedem Zeitpunkt sortiert bleiben. Jedes weitere
Element muss also an die richtige Stelle eingef�gt werden. Damit dies m�glich
ist, m�ssen alle Elemente, die gr��er sind als das Einf�geelement, jeweils
um einen Platz verschoben werden. Sobald das sortierte Teilarray alle Elemente enth�lt, ist das Array
sortiert.</li>
<li>
Schreiben Sie eine iterative Funktion <b><font face="Courier New">insertionSort</font></b>
f�r diesen Algorithmus.</li>
</ul>
</td>
</tr>
</table>
<br>
<table BORDER CELLSPACING=0 WIDTH="100%" >
<tr>
<td>
<h3><b>3 Verteilung der Augenzahlen bei W�rfen mit vielen
W�rfeln </b></h3>
<ul>
<li>
Entwickeln Sie ein Programm, das es dem Benutzer ermöglicht, W�rfe mit mehreren Würfeln zu simulieren. Das Simulationsergebnis
ist dann eine Gesamt-Augenzahl, die sich als Summe der Augenzahlen der
einzelnen Würfel ergibt. Werden viele dieser Würfe mit mehreren
Würfeln durchgeführt, ergibt sich eine Häufigkeitsverteilung
für die Gesamt-Augenzahlen. Diese Häufigkeitsverteilung soll
im Konsolenfenster in Form einer Tabelle und als einfache Übersichtsgraphik
ausgegeben werden.</li>
<li>
Zu Beginn sollen vom Benutzer folgende Eingaben abgefragt werden:</li>
<ul>
<li>
Die Zahl der Würfel, die er bei einem Wurf werfen möchte.</li>
<li>
Die Zahl der Würfe, die er mit der gewählten Anzahl von Würfeln
durchführen möchte.</li>
</ul>
<li>
Die Häufigkeitsverteilung für die erzielten Gesamt-Augenzahlen
soll auf zwei verschiedene Arten dargestellt werden:</li>
<ul>
<li>
Tabellarische Darstellung als Gegenüberstellung von erzielter Augenzahl
und zugehöriger Häufigkeit. Dabei sollen sowohl die Absolutwerte
der Häufigkeit als auch normierte Werte, die sich bei Division der
Absolutwerte durch die Gesamtzahl der Würfe ergeben, ausgegeben werden.</li>
<li>
Graphische Darstellung als ein einfaches (um 90 Grad gekipptes) Säulendiagramm
(z.B. entsprechende Anzahl von *).</li>
</ul>
<li>
Strukturieren Sie Ihr Programm mit Hilfe von geeignet gewählten Funktionen
für einzelne Teilaufgaben. </li>
</ul>
</td>
</tr>
</table>
<br>
<TABLE BORDER CELLSPACING=0 width="100%">
<tr>
<td>
<b><h3>4 Galton-Brett (fakultativ)</h3></b>
Entwickeln Sie ein Programm, das ein "Galton-Brett" und dessen Benutzung simuliert. Das
Simulationsergebnis soll im Konsolenfenster in Form von Zahlenkolonnen und als einfache �bersichtsgraphik ausgegeben werden.
<br><h4>Funktionsprinzip des Galton-Bretts</h4>
<TABLE>
<TBODY>
<TR vAlign=top>
<TD>
<p class="MsoNormal">Mit Hilfe eines Galton-Bretts (nach Sir Francis
Galton, 1822-1911) lassen sich wichtige Verteilungen aus der
Statistik experimentell erzeugen. Dabei laufen auf einem geneigt
aufgestellten Nagelbrett Kugeln durch die Nagelreihen. In Sammelbeh�ltern am Fu� des Nagelbretts werden die
Kugeln aufgefangen. Sind die N�gel im Brett so angeordnet, da�
der Abstand zweier nebeneinander liegender N�gel durch den dar�berliegenden
Nagel genau halbiert wird, so ist als Verteilung der Kugeln in den
Sammelbeh�ltern die Normalverteilung (Gau�sche Glockenkurve) zu
erwarten.</TD>
<TD width=250 bgcolor="#EFEFDE">
<div style="mso-element:frame;mso-element-frame-hspace:7.05pt;mso-element-wrap:
auto;mso-element-anchor-vertical:paragraph;mso-element-anchor-horizontal:page;
mso-element-left:368.95pt;mso-element-top:2.05pt;mso-height-rule:exactly">
<p class="MsoNormal"><img src="index.1.gif" v:shapes="_x0000_i1025" width="192" height="138">
</div>
</TD></TR></TBODY></TABLE>
<h4>Darstellung des Simulationsergebnisses</h4>
<p class="MsoNormal">Das Ergebnis der Simulation soll durch Angabe der
Anzahl von Kugeln, die in 25 Sammelbeh�ltern jeweils aufgefangen werden,
ausgegeben werden (Funktion <b><font face="Courier New">textOutput</font></b>).
Dabei sollen sowohl die Absolutwerte als auch normierte Werte, die sich
bei Division der Absolutwerte durch die Gesamtanzahl der Kugeln ergeben,
ausgegeben werden. Zus�tzlich soll durch eine Funktion <b>
<font face="Courier New">graphicalOutput</font></b><i> </i>ein
einfaches (um 90 Grad gekipptes) S�ulendiagramm (z.B. entsprechende
Anzahl von <span style="font-family:Courier">*</span><span style="mso-bidi-font-family:Arial">)
im Konsolenfenster ausgegeben werden k�nnen.<o:p>
</o:p>
</span></p>
<p class="MsoNormal">Die Bedienung des Programms erfolgt im
Konsolenfenster durch Angabe der gew�nschten Anzahl von Kugeln und der
gew�nschten Darstellungsart des Ergebnisses. Wenn Sie wollen, k�nnen Sie
nat�rlich auch die Anzahl der Sammelbeh�lter nicht auf genau 25
beschr�nken, sondern vom Benutzer des Programms vorgeben lassen.</p>
<div style="border:none;border-top:solid windowtext .75pt;padding:1.0pt 0cm 0cm 0cm">
<h4>Implementierungshinweis</h4>
</div>
<TABLE>
<TBODY>
<TR vAlign=top>
<TD><p class="MsoNormal" style="tab-stops:134.7pt">Es ist Zufall, ob eine
Kugel an einem Nagel nach links oder rechts rollt. Deshalb sollen
Zufallszahlen, die die Funktion
<span style="font-family:"Letter Gothic"; font-weight:700">
<font face="Courier New">rand</font></span><span style="font-family:"Letter Gothic""> </span>liefert, verwendet werden. Bedenken Sie, dass an jedem Nagel (d.h. auf
jeder Ebene) nur eine Entscheidung (links oder rechts) zu
treffen ist. Mit jeder Ebene, die die Kugel passiert, wird dadurch die
Menge der noch erreichbaren Sammelbeh�lter sukzessive eingeschr�nkt.
Dieses Verhalten soll in eine <b> rekursive</b> Funktion abgebildet werden.</p>
</TD>
<TD width=250 bgcolor="#EFEFDE">
<div style="mso-element:frame;mso-element-frame-hspace:7.05pt;mso-element-wrap:
auto;mso-element-anchor-vertical:paragraph;mso-element-anchor-horizontal:page;
mso-element-left:368.95pt;mso-element-top:2.05pt;mso-height-rule:exactly">
<p class="MsoNormal">
<img src="index.2.gif" v:shapes="_x0000_i1025" width="192" height="143">
</div>
</TD></TR></TBODY></TABLE>
</td>
</tr>
</TABLE>
</body>
</html>
|