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

lettera valore
I 1
V 5
X 10
L 50
C 100
D 500
M 1000

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

InputSorted ascending 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

Edit | Attach | Watch | Print version | History: r6 < r5 < r4 < r3 < r2 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r6 - 2016-03-16 - AndreaSterbini






 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback