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