• Keine Ergebnisse gefunden

Programmieren f¨ur Physiker

N/A
N/A
Protected

Academic year: 2022

Aktie "Programmieren f¨ur Physiker"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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 08

http://comp.physik.uni-karlsruhe.de Bearbeitungszeitraum: bis 09. Juni MMX

Aufgabe XIX: R¨omisch → Arabisch Pflichtaufgabe

Klasse, endlich hat es mit der Rom-Reise geklappt. Aber nun fragt Sie Ihre altphilologische Reisebegleitung st¨andig, ob Sie mal eben die r¨omische Jahreszahl an der oder jener Inschrift umrechnen k¨onnten. Ach, was w¨are es toll, ein Programm daf¨ur zu haben. . .

Na denn. Es gibt sieben r¨omische Zahlzeichen:

r¨omisch M D C L X V I

Wert 1000 500 100 50 10 5 1

Im Wert absteigende oder gleich große Zahlzeichen werden einfach addiert (Bsp. VII≡7). Falls aber ein kleinerer Zahlwert vor einer gr¨oßeren Zahl auftritt, wird die kleinere Zahl subtrahiert (Bsp. IV ≡ 4). Zwei direkt aufeinanderfolgende Subtraktionen kommen in regul¨ar gebildeten Zahlen nicht vor.

Lassen Sie den Benutzer ein char-Feld eingeben. Nach #include <cstring> k¨onnen Sie mit strlen die L¨ange des Zahlentexts ermitteln. Rechnen Sie dann mit oben angegebener Regel (Addition oder Subtraktion der einzelnen Zeichenwerte) die Gesamtzahl aus und geben Sie diese aus. Sie brauchen nicht zu untersuchen, ob die eingegebene r¨omische Zahl einen g¨ultigen re- gul¨aren Aufbau besitzt.

Schreiben und verwenden Sie bitte folgende Funktionen: Eine Funktionchar to upper (char), die ein Buchstaben-Argument als Großbuchstaben zur¨uck gibt. Weiterhin eine Funktion int value of rmchar (char), die von einem einzelnen r¨omischen Zahlzeichen den Wert nach obiger Tabelle ermittelt. Greifen Sie auf die Funktionto upperzur¨uck, so dass Ihr Programm f¨ur Groß- und Kleinbuchstaben funktioniert.

Zusatz (freiwillig): Die umgekehrte Fragestellung: Wie kann man denn eine eingegebene arabische Zahl in die r¨omische Zahldarstellung umrechnen?

Aufgabe 20: Minuten-Sekunden-Struct Pflichtaufgabe Schreiben Sie perstructeinen Datentypminsek, der zur Aufbewahrung von Zeiten mit Minuten- und Sekundenwert dient und dazu zwei int-Variablen verwendet.

Programmieren Sie bitte folgende drei Funktionen, die jeweils minsek Argumente oder R¨uck- gabewerte verwenden: (a) Eingeben einer Zeit, dabei sollen Minuten und Sekunde eingegeben werden. (b) Die Ausgabe in Form Minuten:Sekunden eines derartigen Structs. (c) Die Addition von zwei Zeiten, das Ergebnis soll wieder vom Typminseksein. Ber¨ucksichtigen Sie dabei bitte eventuelle ¨Ubertr¨age der Sekundenvariable zu den Minuten, so dass die Sekundenvariable stets im Intervall [0,59] ist.

Rufen Sie im Hauptprogramm diese Funktionen so auf, dass Ihr Programm zwei eingegebene Zeiten addiert.

(2)

Aufgabe 21: T¨urme von Hanoi freiwillig Das Spiel T¨urme von Hanoi besteht aus n verschieden großen Scheiben und drei Stangen. Zu Beginn liegen alle Scheiben, der Gr¨oße nach sortiert, auf der ersten Stange. Ziel des Spieles ist es, alle Scheiben von der ersten auf eine andere Stange zu versetzen. Dabei sind jedoch folgende Regeln zu beachten: Es darf immer nur eine Scheibe zu einem Zeitpunkt bewegt werden und es darf nie eine gr¨oßere auf eine kleinere Scheibe gelegt werden. Eine Skizze der Ausgangsposition mit 5 Scheiben:

000000000000 111111111111000000000111111111

00000000 00000000 11111111 111111110000000000

11111 11111000000 111111

Stange B Stange C

Stange A

Um ein Gef¨uhl f¨ur die Problemstellung zu erhalten, ist es ratsam, sich zun¨achst die L¨osung f¨ur n= 1,2,3 und evtl.n= 4 zu ¨uberlegen.

Ist Ihnen aufgefallen, dass Sie das Vorgehen f¨ur nScheiben auf die L¨osung f¨ur n−1 Scheiben zur¨uckf¨uhren k¨onnen? Nehmen Sie an, Sie h¨atten ein Verfahren, um die oberstenn−1 Scheiben zu versetzen. Welche Schritte sind dann n¨otig, um den Turm der Gr¨oßen zu versetzen? Dieser L¨osungsweg kann mittels Rekursion in einem Programm umgesetzt werden.

Entwickeln Sie ein Programm, das f¨ur ein einzugebendes n alle einzelnen Scheibenbewegungen ausgibt, die n¨otig sind, um das Problem zu l¨osen.

Zum Knobeln: Selbstbeschreibende Folge

Es gibt genau eine monoton wachsende Folge (an), n= 1,2, . . . von positiven ganzen Zahlen, die folgende Eigenschaft hat: Jede Zahln steht genau an mal in der Folge.

Verdeutlichen Sie sich, dass der Folgenanfang so aussieht:

n 1 2 3 4 5 6 7 8 9 10 11 12

an 1 2 2 3 3 4 4 4 5 5 5 6

Schreiben Sie eine Funktion, die f¨ur ein gegebenes nden Folgenwert an berechnet.

Einige Folgenwerte zu Testzwecken:

n 100 000 1 000 000 10 000 000 100 000 000 1 000 000 000

an 1479 6137 25474 105729 438744

Kann Ihr Programm auch den letzten Wert der Tabelle in weniger als einer Minute berechnen?

Referenzen

ÄHNLICHE DOKUMENTE

F¨ ur sehr kleine ǫ wird eine Unterscheidung nicht mehr funktionieren, da rationale Zahlen im Rechner nicht beliebig genau dargestellt sind.. Gehen Sie in Ihrem Programm

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

F¨ ur sehr kleine ǫ wird eine Unterscheidung nicht mehr funktionieren, da rationale Zahlen im Rechner nicht beliebig genau dargestellt sind.. Gehen Sie in Ihrem Programm

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..

Die Spieler sind abwechselnd am Zug und haben dabei jeweils folgende zwei M¨oglichkeiten: Entweder von genau einem Haufen ihrer Wahl eine beliebige Zahl (≥ 1) an H¨olzchen zu

Aufgabe 21: Quersumme freiwillig Schreiben Sie eine rekursive Funktion, die die Quersumme, also die Summe der Ziffern, einer positiven Zahl berechnet.. Verwenden Sie diese Funktion,

Aufgabe 26: Acht-Damen-Problem Pflichtaufgabe Auf einem Schachbrett sollen acht Damen so platziert werden, dass keine Dame eine andere Dame schlagen kann.. Im Schachspiel bewegen

(a) Beginnen Sie die Berechnung mit nur einem Intervall (N = 1) und verdoppeln Sie die Intervall-Anzahl so oft, bis die relative ¨ Anderung zweier aufeinanderfolgender Berechnungen