1 Enoncé On cherche à écrire un programme pour convertir un nombre entier positif en chiffres romains, et réciproquement. On rappelle aussi les règles d’écriture des nombres en chiffres romains : 2 Démarche Vu que la solution du problème n’est pas immédiate, on va essayer de progresser par étapes.
On rappelle la valeur des chiffres romains :
I=1 V=5 X=10 L=50 C=100 D=500 M=1000
On écrit les symboles du plus grand au plus petit (il peut y avoir plusieurs M, plusieurs C, plusieurs X, plusieurs I), et leur valeur s’ajoute. Par exemple, 172 s’ecrit CLXXII.
Si on se trouve avec quatre symboles identiques à la suite, on utilise à la place la notation soustractive : un symbole placé avant un symbole plus grand se retranche à lui. Par exemple, 199 s’écrit CXCIX.
Notons que nous ne chercherons qu’à traiter des nombres compris entre 1 et 3999 (les Romains ne connaissaient pas le zéro, et écrivaient rarement des nombres dépassant quelques milliers).
2.1 Nombres de 1 à 9
Ecrire une méthode static String unitesArabeToRomain (int unite)
qui retourne grace à la structure switch...case les chiffres romains correspondant à un chiffre arabe (de 1 à 9)
2.2 Dizaines et centaines
De manière similaire écrire les méthodes
static String dizaineArabeToRomain (int dizaine) et
static String centaineArabeToRomain (int centaine)
2.3 Généralisation
Remarquer les similitudes entre les 3 méthodes.
Ne pourrait-on pas remplaçer les chiffres romains écrits "en dur" dans ces méthodes par le contenu de cases d'un tableau correctement constitué ?
Essayer de généraliser ces méthodes en une seule méthode
static String puissance10ArabeToRomain (int valeur, int puissace10)
Exemples :
puissance10ArabeToRomain (3, 0) -> III
puissance10ArabeToRomain (3, 1) -> XXX
puissance10ArabeToRomain (3, 2) -> CCC
puissance10ArabeToRomain (3, 4) -> MMM
puissance10ArabeToRomain (9, 0) -> IX
puissance10ArabeToRomain (9, 1) -> XC
...
3 Classe ChiffreRomain
Avec quelle structurede données peut-on mémoriser un chiffre romain ?
Ecrire une classe ChiffreRomain qui
4 Conversion inverse
Proposer une solution pour la conversion inverse