Homework 1: conversione da numeri romani a interi
Scrivete il programma ASM MIPS che:
- legge una stringa lunga al massimo 30 caratteri (da console con la syscall 8)
- calcola il corrispondente numero intero
- stampa il valore calcolato
- termina l'esecuzione
ATTENZIONE: NON STAMPATE ALCUN MESSAGGIO O ALTRO TESTO A PARTE IL VALORE CALCOLATO
Vi ricordo che i
numeri romani
sono composti dalle lettere
maiuscole
Le lettere
I, X, C, M possono ripetersi consecutivamente fino a 3 volte, mentre
V, L, D solo una volta, i valori si sommano tranne quando un valore più piccolo (solo se
I, X, C) precede uno maggiore, in tal caso il valore più piccolo si sottrae, per cui per realizzare i numeri 4, 9, 40, 49, 90, 99 eccetera si usano le combinazioni:
lettera |
valore |
IV |
4 |
IX |
9 |
XL |
40 |
XLIV |
44 |
XLIX |
49 |
XC |
90 |
XCIV |
94 |
XCIX |
99 |
Eccetera
Ovvero nella conversione da romano a intero il valore corrispondente ad un carattere:
- ha peso positivo (va sommato) se è seguito da caratteri di peso minore o uguale o è finita la stringa
- ha peso negativo (va sottratto) se è seguito da un carattere di peso maggiore
NOTE:
- i codici ascii dei caratteri li potete trovare facilmente (http://www.asciitable.com/
)
- per leggere un testo si usa la syscall 8, che vuole come argomenti:
- $a0 l'indirizzo di un blocco di memoria in cui copiare i caratteri inseriti in tastiera
- $a1 la dimensione in bytes del blocco
- la stringa letta finisce con un byte che ha valore 0 (zero) oppure '\n' (newline = 10)
Esempi
Input |
Output |
Calcolo |
CDXCIX |
499 |
-100 +500 -10 +100 -1 +10 |
CM |
900 |
-100 +1000 |
CMXCIX |
999 |
-100 +1000 -10 +100 -1 +10 |
MMMCMXCIX |
3999 |
+1000 +1000 +1000 -100 +1000 -10 +100 -1 +10 |
MMMDCCCLXXXVIII |
3888 |
+1000 +1000 +1000 +500 +100 +100 +100 +50 +10 +10 +10 +5 +1 +1 +1 |
ASSUMETE CHE I VALORI USATI PER I TEST SARANNO SEMPRE CORRETTI (non c'è bisogno di controllare la validità dell'input)
Consegna del programma
Per consegnare il programma:
- dovete essere iscritti a twiki
- usare la pagina di consegna oppure se non funziona mandatemeli per email
- Non copiate o il compito verrà annullato ad entrambi
- Scadenza della consegna: mercoledì 16 marzo ore 24
Trovate una serie di esempi di input ed i risultati dei test eseguiti finora sulla
pagina dei test
--
AndreaSterbini - 05 Mar 2016