Römische Zahlen, GdI 3

Werbung
Prof. Frederik Armknecht
Sascha Müller
Daniel Mäurer
Grundlagen der Informatik 3
Wintersemester 09/10
Praktikum 1
Römische Zahlen
In den kommenden übungen und Vorlesungseinheiten lernen Sie die MIPS Assemblersprache kennen. Verwenden Sie für die Umsetzung der Praktikumsaufgaben die MARS IDE.
Download und Infos unter:
http://courses.missouristate.edu/KenVollmar/MARS/index.htm
Auf den Poolrechnern ist MARS bereits installiert. Sie können ihn mit dem Kommando
mars starten.
Römische Zahlen
Das auf den römischen Ziffern beruhende Zahlensystem stellt natürliche Zahlen in einem
Additionssystem zur Basis 10 mit der Hilfsbasis 5 dar.
I
1
V
5
X
10
L
50
C
100
D
500
M
1000
Die Ziffern werden additiv in zehner und fünfer Blöcken gereiht. Nach der ursprünglichen
Version können also maximal vier gleiche Zeichen hintereinander stehen. Die Zeichen sind
der entsprechenden grösse nach absteigend sortiert.
Beispiel: XXXXII = 42
Im Laufe der Zeit übernahm man aus anderen Zahlensystemen eine verkürzte Schreibweise, die sogenannte Subtraktionsregel. Nach ihr kann das nächst kleinere ZehnerpotenzZeichen (I, X, C, M) vor einem Zeichen stehen, was so viel bedeuted wie eine Subtraktion
des kleineren vom grösseren Wert. Fünfer Blöcke dürfen nicht vorangestellt werden.
Beispiel:
IV = 4 (statt IIII)
IX = 9 (statt VIIII)
XL = 40 (statt XXXX)
XC = 90 (statt LXXXX)
Es ist nicht zulässig, mehr als ein einziges Zeichen subtraktiv zu verwenden (z.B. IIX statt
VIII für 8, XXC statt LXXX für 80) Es ist nicht zulässig einem Zeichen auch seinem drittoder viertgrösseren Zeichen subtraktiv voranzustellen, also IL statt XLIX für 49, IC statt
XCIX für 99 oder XM statt CMXC für 990 zu schreiben.
Aufgabenstellung
a) Schreiben sie ein MIPS Programm, das alle mit der Subtraktionsregel darstellbaren
römischen Zahlen mit den den Ziffern I, V, X, L, C, D, M ins Zehnersystem mit arabischen Ziffern umwandelt. Überprüfen Sie zuerst, ob die Eingabe gültig ist und geben
1
Römische Zahlen
GdI 3, WS 09/10
ggf eine Fehlermeldung als Ausgabe. Die grösste Zahl ist demnach:
MMMDCCCLXXXVIII = 3888.
Verwenden Sie den vorgegebenen Programmrahmen ”toRoman.asm” und vervollständigen Sie Diesen.
b) Schreiben Sie ein MIPS Programm ”toDecimal.asm”, dass die natürlichen Zahlen bis
3888 in römischer Darstellung nach Subtraktionsschreibweise konvertiert. Überprüfen sie auch hier, ob die eingegebene Zahl gültig ist.
Die Ein und Ausgabe soll (wie im Rahmenprogramm) mit Syscalls erfolgen. Eine ausführliche Dokumentation zu Syscalls finden Sie unter:
http://courses.missouristate.edu/KenVollmar/MARS/Help/MarsHelpIntro.html
Tipps zur Vorgehensweise Entwickeln oder suchen sie einen einfachen Algorithmus für
die Transformationen der Zahlensysteme. Skizzieren Sie den Algorithmus in C oder Pseudocode und übertragen ihn zeilenweise in MIPS Code.
Überprüfen sie die Richtigkeit ihrer Programme indem sie beide hintereinander ausführen
und den resultierenden String mit der Eingabe vergleichen.
Einreichen und Testieren
Finaler Abgabetermin ist der 15.11.2009 um 23:59 Uhr. Die Abgabe erfolgt durch einen der
Gruppenteilnehmer im Moodle.
http://moodle.tu-darmstadt.de/
Als Login benötigen sie ihre TU-ID. Vermerken sie bitte sowohl in ihrem Quellcode als auch
im Kommentarfeld bei der Abgabe sämtliche Gruppenteilnehmer einschliesslich Matrikelnummer. Die Ergebnisse werden vom jeweiligen Tutor für jeden Gruppenteilnehmer ins
Webreg eingetragen (nicht im Moodle).
Ihre Abgabe sollte umfassen:
• toRoman.asm
• toDecimal.asm
Machen sie mit Ihrem Tutor einen Termin für das Testat aus. Nutzen Sie für weitere Fragen
das Fachschaftsforum und die Sprechstunden.
Viel Erfolg!
2
Römische Zahlen
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
#
#
#
#
GdI 3, WS 09/10
wandelt die eingegebene Dezimalzahl in eine roemische Zahl um
Gruppenmitglieder :
Donald Duck - 12345678
< - - - - - - - - - - - - - - - - - - - - - - - - - HIER IHRE GRUPPE
.data
Aufforderung : .asciiz " Bitte geben sie eine Dezimalzahl zwischen
1 und 3888 ein : "
# < - - - - - - - - - - - - - - - - - - - - - - - - - HIER IHRE DATEN
.text
start :
# print aufforderung
li $v0 , 4
la $a0 , Aufforderung
syscall
# lese Zahl ein
li $v0 , 5
syscall
# setzte Parameter
add $a0 , $v0 , $zero
# < - - - - - - - - - - - - - - - - - - - - - - - - HIER IHR CODE !
li
$v0 , 10
syscall
# Programm beenden
3
Herunterladen