MATH_RomainVersArabe [Utilitaires]
Par Olivier Deschanels (Math4D v2)
Nouvelle recherche
Si (Faux)
` MATH_RomainVersArabe [Olivier Deschanels 27/2/3]
` Elément du projet Vitruve (c) 1991
` ---------------------------------------------
` Conversion d'une chaine de chiffre romain en un entier
` Note : les entiers suffisent car les romains ne traitaient pas de grands nombre
` ---------------------------------------------
` MATH_RomainVersArabe (Chaine) -> entier
` ---------------------------------------------
` MATHERROR
` 0 -> Pas d'erreur
`-1 -> Nombre impossible en chiffre romain
` ---------------------------------------------
`
Fin de si
C_ALPHA(80;$1)
C_ENTIER($0;$resultat)
`initialisation
$reste:=$1
$resultat:=0
MATHERROR:=0
`calcul
Repeter
Au cas ou
: ($reste²1³="M")
$resultat:=$resultat+1000
$reste:=Sous chaine($reste;2)
: ($reste²1³="D")
$resultat:=$resultat+500
$reste:=Sous chaine($reste;2)
: ($reste²1³="C")
Au cas ou
: (Longueur($reste)=1)
$resultat:=$resultat+100
$reste:=""
: ($reste²2³="M")
$resultat:=$resultat+900
$reste:=Sous chaine($reste;3)
: ($reste²2³="D")
$resultat:=$resultat+400
$reste:=Sous chaine($reste;3)
Sinon
$resultat:=$resultat+100
$reste:=Sous chaine($reste;2)
Fin de cas
: ($reste²1³="L")
$resultat:=$resultat+50
$reste:=Sous chaine($reste;2)
: ($reste²1³="X")
Au cas ou
: (Longueur($reste)=1)
$resultat:=$resultat+10
$reste:=""
: ($reste²2³="C")
$resultat:=$resultat+90
$reste:=Sous chaine($reste;3)
: ($reste²2³="L")
$resultat:=$resultat+40
$reste:=Sous chaine($reste;3)
Sinon
$resultat:=$resultat+10
$reste:=Sous chaine($reste;2)
Fin de cas
: ($reste²1³="V")
$resultat:=$resultat+5
$reste:=Sous chaine($reste;2)
: ($reste²1³="I")
Au cas ou
: (Longueur($reste)=1)
$resultat:=$resultat+1
$reste:=""
: ($reste²2³="X")
$resultat:=$resultat+9
$reste:=Sous chaine($reste;3)
: ($reste²2³="V")
$resultat:=$resultat+4
$reste:=Sous chaine($reste;3)
Sinon
$resultat:=$resultat+1
$reste:=Sous chaine($reste;2)
Fin de cas
Sinon
MATHERROR:=-1 `CE NOMBRE N'EST PAS POSSIBLE
$reste:=""
$resultat:=0
Fin de cas
Jusque ($reste="")
$0:=$resultat