Conversion chiffres romains

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Conversion chiffres romains

Message 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
Image
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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:
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

J'suis pas sûr que 40 se code XL.
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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:
Image
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Sympatique ce code :D merci
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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 ;)
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Mazis c'est chelou leur truc au romain alors.
Pourquoi 49 <> IL ???
:?:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Répondre