[algorithme]

Fermé
ilyas - 12 mars 2005 à 20:35
 pascal - 13 mars 2005 à 00:52
bonjour
j'aimerai bien savoir la solution d'un exercice:
algorithme modulaire qui reçoit un nombre entier et retourne son equivalent en chiffre romain sachant que l'equivalent de:
1000: M
500: D
100: C
50: L
10: X
5:V
1:I
exemple:l'équivalent de 3767 est MMMDCCLXVIII
et merci infiniment
A voir également:

1 réponse

Salut,
je crois que tu as mis un I de trop ! :-))
bon pour l'algo c'est assez simple.

tu divise le nombre à traduire par la plus grande valeur (3767/1000=3,767)
de ce resultat tu ne garde que l'entier (3).
tu affiche le symbole qui correspond à la plus grande valeur autant de fois que l'indique l'entier. (Mx3=MMM)
tu multiplie l'entier par la plus grande valeur(3x1000=3000)
puis tu soustrait le resultat obtenu du nombre à traduire (3767-3000=767
tu recommence avec la plus grande valeur suivante :

tu divise le nombre à traduire par la plus grande valeur (767/500=1,53)
de ce resultat tu ne garde que l'entier (1).
tu affiche le symbole qui correspond à la plus grande valeur autant de fois que l'indique l'entier. (1xD=D on affiche donc MMMD)
tu multiplie l'entier par la plus grande valeur(1x500=500)
puis tu soustrait le resultat obtenu du nombre à traduire (767-500=267

et tu recommence ....

resultat affiché :

MMMDCCLXVII

voici le programme Liberty BASIC correspondant:


dim a$(7,2)
a$(1,1)="1000":a$(1,2)="M"
a$(2,1)="500":a$(2,2)="D"
a$(3,1)="100":a$(3,2)="C"
a$(4,1)="50":a$(4,2)="L"
a$(5,1)="10":a$(5,2)="X"
a$(6,1)="5":a$(6,2)="V"
a$(7,1)="1":a$(7,2)="I"

[new]
input "quel est le nombre à traduire ";nbre
for i=1 to 7
a=val(a$(i,1))
n=int(nbre/a)
if n>0 then
for u=1 to n
resultat$=resultat$+a$(i,2)
next u
nbre=nbre-(n*a)
end if
next i
print resultat$
print
goto [new]

plus d'info sur : http://lbasic.atomysk.com/forum/viewtopic.php?p=1037#1037

@++

pascal
0