Page 1 sur 1

Conversion chiffres romains

Publié : ven. 26/août/2005 13:32
par Flype
pour énumérer des chapitres, des sommaires ou autres voici une procédure pour convertir un nombre entier en chiffres romains.

Code : Tout sélectionner

;- Conversion d'un entier en chiffres romains

Procedure.s RomVal(n.l)
  
  roms.s = "1000,M;900,CM;500,D;400,CD;100,C;90,XC;50,L;40,XL;10,X;9,IX;5,V;4,IV;1,I"
  
  For i = 1 To 13
    
    a.s = StringField(roms,i,";")
    b.l = Val(StringField(a,1,","))
    
    While n >= b
      res.s + StringField(a,2,",")
      n - b
    Wend
    
  Next
  
  ProcedureReturn res
  
EndProcedure

;- Exemples d'utilisation

Debug RomVal(1998)
Debug RomVal(2005)

For i = 1 To 1200
  Debug RomVal(i)
Next

Publié : ven. 26/août/2005 13:55
par Dr. Dri

Code : Tout sélectionner

Debug RomVal(490)
j'obtiens pas XD donc ca l'air de très bien marcher tout ca ^^
il manque un test pour empécher les négatifs et les nombres >= 10000

Dri :10:

Publié : ven. 26/août/2005 14:17
par lionel_om
J'suis pas sûr que 40 se code XL.

Publié : ven. 26/août/2005 14:52
par Flype
petite maj pour mr dri:

Code : Tout sélectionner

;-
;- Objet :        Conversion d'un nombre entier en chiffres romains
;- Utilisation :  String.s = IntToRom(Integer.l)
;- Pré-Requis :   Integer doit être compris entre 1 et 10000
;-

Procedure.s IntToRom(n.l)
  
  If (n<1) Or (n>10000)
    ProcedureReturn "n/a"
  EndIf
  
  num.s = "1000,900,500,400,100,90,50,40,10,9,5,4,1"
  rom.s = "M,CM,D,CD,C,XC,L,XL,X,IX,V,IV,I"
  
  For i = 1 To 13
    a = Val(StringField(num,i,","))
    While n >= a
      res.s + StringField(rom,i,",")
      n - a
    Wend
  Next
  
  ProcedureReturn res
  
EndProcedure

;- Exemples d'utilisation

Debug IntToRom(-45)
Debug IntToRom(1998)
Debug IntToRom(2005)
Debug IntToRom(10004)
Debug "----"
For i = 1900 To 2005
  Debug Str(i) + " = " + IntToRom(i)
Next
@lionel_om
et pourtant si ! de la meme maniere que tu écris 9 comme ca : IX
si vous avez des doutes il existe pléthore de sites web pour valider mon p'tit algo. genre ici : http://www.alaide.com/outils_convertromain.php

Voili voilou :twisted:

Publié : ven. 26/août/2005 15:46
par Anonyme2
Salut Flype, content de te lire :D , tu te fais rare

Merci pour le code, j'ai déjà été ennuyé par ces chiffres romains

Publié : ven. 26/août/2005 15:57
par Oliv
Sympatique ce code :D merci

Publié : ven. 26/août/2005 16:31
par Dr. Dri
lionel_om a écrit :J'suis pas sûr que 40 se code XL.
je confirme ^^
c'est d'ailleurs pour ca ke j'ai vérifié 490 et pas 50 ^^

Dri ;)

Publié : ven. 26/août/2005 16:45
par lionel_om
Mazis c'est chelou leur truc au romain alors.
Pourquoi 49 <> IL ???
:?: