Prof. Franz Schweiggert Abteilung Angewandte
Informationsverarbeitung 27. April 2005
Christian Ehrhardt Blatt 3
Unix-basierte Implementierung kleiner Datenbanken (SS 2005)
Abgabetermin 02.05.2005
Schreibt ein Shell-Skript, das als Kommandozeilenargumente
eine oder mehrere römische Zahlen bekommt. Jede dieser
römischen Zahlen soll in eine arabische Zahl umgerechnet und dann
in Primfaktoren zerlegt werden. Die Primfaktoren selbst sollen nicht
wieder als römische Zahlen geschrieben werden.
Zur Erinnerung hier nochmal einige Hinweise zu den römischen Zahlen:
- Die römischen Zahlen verwenden (ausschließlich) die folgenden Zahlzeichen:
Zahlzeichen |
M |
D |
C |
L |
X |
V |
I |
Wert |
1000 |
500 |
100 |
50 |
10 |
5 |
1 |
- Die Zahlzeichen ``D'', ``L'' und ``V'' kommen in einer Zahl
höchstens einmal vor.
- Eine römische Zahl besteht aus einer Folge dieser Zahlzeichen.
- Der Wert einer Zahl ergibt sich als Summer der Werte aller beteiligten
Zahlzeichen.
- Ausnahme: Steht ein Zahlzeichen mit einem niedrigeren Wert
unmittelbar vor einem Zahlzeichen mit höherem Wert, so wird der
Wert des niedrigeren Zahlzeichens subtrahiert und nicht addiert.
- Für diese Ausnahme sind nur die folgenden drei Fälle erlaubt und
jeder davon höchstens ein einziges Mal pro Zahl:
- ``C'' steht vor ``D'' oder ``M'' und es folgt kein
weiteres ``D'' oder ``M''.
- ``X'' steht vor ``C'' oder ``L'' und es folgt kein weiteres
``C'', ``L'', ``M'' oder ``D''.
- ``I'' steht vor ``X'' oder ``V'' und es folgen höchstens
noch ``I''s.
- Streicht man die Zahlzeichen, die subtrahiert werden, dann sind die
verbleibenden Zahlzeichen absteigend nach ihrem Wert geordnet,
d.h. zuerst kommen alle ``M''s, dann alle ``D''s usw.
- Euer Programm soll römische Zahlen, die nicht der obigen Beschreibung
entsprechen nicht akzeptieren. Dazu hilft es möglicherweise, einen
passenden regulären Ausdruck zu formulieren.
- ``Echte'' römische Zahlen haben noch weitere Einschränkungen,
lassen aber je nach Variante auch Dinge zu, die oben verboten werden.
- Funktionen können eventuell hilfreich sein. Allerdings liefern
Funktionen in der Shell genau wie Programme keinen echten
Rückgabewert sondern nur einen Exitstatus. Funkionen können aber
Ausgabe erzeugen, die zusammen mit der Kommandosubstitution
ähnlich wie ein Rückgabewert funktionieren kann.
- Das Kommando egrep regexp sucht in seiner Standardeingabe nach
Teilen, die dem regulären Ausdruck regexp entsprechen. Der
Exitstatus zeigt an, ob die Suche erfolgreich war.
Christian Ehrhardt
2005-04-27