Exercici 1. Dissenyeu i programeu en C una aplicació de consola que demani a l'usuari un nombre romà i el tradueixi al…
Bucles i disseny iteratiu
Exercici 1. Conversió i validació de nombres romans a decimals
Dissenyeu i programeu en C una aplicació de consola que demani a l'usuari un nombre romà i el tradueixi al seu valor decimal aràbic corresponent, sotmetent l'entrada a comprovacions exhaustives de validesa sintàctica.
El programa ha de complir les següents especificacions:
Taula d'equivalències: establiu els valors de les xifres bàsiques mitjançant constants o directives del preprocessador: I = 1, V = 5, X = 10, L = 50, C = 100, D = 500 i M = 1000.
Entrada de dades: llegiu la seqüència símbol a símbol fins a trobar el salt de línia ('\n'), convertint automàticament cada lletra a majúscula per acceptar indistintament entrades en minúscules.
Validació gramatical estricta:
No es permet la presència de 4 símbols idèntics consecutius (per exemple, IIII o XXXX són incorrectes).
No s'admeten seqüències alternades invàlides del tipus dígit-subtracció-dígit repetit (com IXI).
Els símbols de base 5 (V, L, D) no poden aparèixer repetits consecutivament (com VV, LL, DD) ni ser utilitzats com a elements sostractius davant de valors superiors.
Les úniques combinacions sostractives vàlides són: IV, IX, XL, XC, CD i CM.
L'element que resta no pot aparèixer duplicat prèviament (és a dir, construccions com IIV, IIX, XXL, XXC, CCD o CCM s'han de rebutjar).
Qualsevol altre caràcter que no formi part de la numeració romana clàssica ha de ser considerat erroni.
Tractament d'errors i sortida: davant de qualsevol violació de la sintaxi, el programa ha d'emetre un avís informatiu pel canal d'errors estàndard (stderr) i finalitzar immediatament retornant el codi -1. Si la xifra és correcta, mostrarà per pantalla el resultat final en base deu.
