Programmieren f¨ ur Physiker
Institut f¨ur Theoretische Physik
Interfakultatives Institut f¨ur Anwendungen der Informatik
Dr. S. Gieseke, Dr. A. Mildenberger SS 2010 – Blatt 04
http://comp.physik.uni-karlsruhe.de Bearbeitungszeitraum: bis 12. Mai 2010
Aufgabe 10: Zahlenraten Pflichtaufgabe
In einem kleinen Spiel soll eine im Rechner erzeugte, geheime Zufallszahl zwischen 1 und 20 erraten werden. In jeder Spielrunde gibt hierbei der Spieler einen Tipp ab. Falls die Zahl noch nicht erraten wurde, teilt das Programm mit, ob der Tipp zu groß oder zu klein war. Falls die richtige Zahl getippt wurde, soll das Programm eine Gratulation und die Anzahl der ben¨otigten Versuche ausgeben und das Spiel zu Ende sein.
Hinweis: Eine Zufallszahlzim Bereich [1,20] erhalten Sie, indem Sie im Kopf des Programmes
#include <cstdlib> einf¨ugen und dann die Zeilen srand((unsigned int)time(0)) ; und int z = rand()%20 + 1 ;verwenden. Die erste Zeile versetzt den Zufallszahlengeneratorrand in einen
”zuf¨alligen“ Ausgangszustand.
Zusatzfragen (freiwillig): (a) Welche Strategie f¨uhrt i.A. am Schnellsten zum Ziel? (b) K¨onnen Sie Ihr Programm so erweitern, dass zus¨atzlich mitgeteilt wird, falls
”unsinnige Tipps“ eingegeben werden? Gemeint sind damit Tipps, die bereits durch vorherige Ausk¨unfte ausgeschlossen werden k¨onnen.
Aufgabe 11: Ergebnistabelle Pflichtaufgabe
Die Datei/home/ck10/daten/a11-progwett.d (alternativ auch von der Webseite erh¨altlich) ent- h¨alt die Ergebnisse eines Programmierwettbewerbs. Kopieren Sie die Datei zun¨achst in das Verzeichnis, in dem Sie diese Aufgabe bearbeiten.
Die Datei hat folgenden Inhalt: In 7 Zeilen stehen jeweils zun¨achst eine Teilnehmernummer und dann nacheinander die Punktzahl des Teilnehmers in 10 verschiedenen Aufgaben. Alle Eintr¨age sind ganzzahlig.
Entwickeln Sie ein Programm, das die Datei in ein zweidimensionales Feld einliest. Ermitteln Sie dann die Gesamtpunktzahl f¨ur jeden Teilnehmer und den besten Teilnehmer. Geben Sie nun die Ergebnisse in Form einer Tabelle aus, dabei soll pro Teilnehmer in einer Zeile die Teilneh- mernummer, die Einzelpunktzahlen und die Gesamtpunktzahl stehen. Ferner soll die Zeile des besten Teilnehmers am Ende den Eintrag
”Champion“ erhalten.
Wie verh¨alt sich Ihr Programm, wenn die beste Punktzahl von mehr als einem Teilnehmer er- zielt wurde? Ver¨andern Sie hierzu die Ergebnistabelle derart, dass zweimal die beste Punktzahl auftritt. Falls Ihr Programm nun nicht zweimal die
”Champion“-Meldung ausgibt, modifizieren Sie Ihr Programm bitte entsprechend.
Aufgabe 12: M¨unzr¨uckgabe freiwillig In einem Land existieren M¨unzen mit den Werten: 1, 3, 8, 20, 50, 100 und 250 Cent. Die Aufgabe eines M¨unzautomaten ist es, einen einzugebenden Betrag mit relativ wenig M¨unzen auszube- zahlen.
Programmieren Sie diesen Automaten. Im Programm soll zu Beginn die Anzahl der M¨unzwerte und ein Feld mit den M¨unzwerten explizit definiert werden. Nach der Eingabe eines Betrags durch den Benutzer soll ausgerechnet und ausgegeben werden, welche M¨unze wie h¨aufig aus- zuzahlen ist. ¨Uberlegen Sie sich ein Verfahren, mit dem Sie nach M¨oglichkeit die Anzahl der M¨unzen gering halten.
Es bietet sich an, die M¨unzwerte in einem Feld zu speichern.