[algorithme]

ilyas -  
 pascal -
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

1 réponse

  1. pascal
     
    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