Enseignement > Programmation orientée objet > Java > Travaux dirigés > TD n°2 - Chiffres romains  

1 Enoncé

On cherche à écrire un programme pour convertir un nombre entier positif en chiffres romains, et réciproquement.
On rappelle la valeur des chiffres romains :
I=1 V=5 X=10 L=50 C=100 D=500 M=1000

On rappelle aussi les règles d’écriture des nombres en chiffres romains :
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.

2 Démarche

Vu que la solution du problème n’est pas immédiate, on va essayer de progresser par étapes.
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

  • utilisera cette structure de données
  • possédera la méthode écrite au § 2.3
  • aura un constructeur ChiffreRomain (int n)qui convertira un nombre décimal en chiffre romain en utilisant la méthode du § 2.3

4 Conversion inverse

Proposer une solution pour la conversion inverse

Voir la solution