Ce programme fait suite à une remarque d'EBArtSoft au sujet de cette "diabolique" écriture romaine... Je vous propose donc ici un petit programme destiné à convertir en chiffres arabes un nombre donné sous forme de chiffres romains. Je précise que la fonction inverse (transformer des chiffres arabes en chiffres romains) n'est pas programmée.
Comment fonctionne l'écriture romaine ?
Ce n'est pas une notation positionnelle comme l'écriture arabe. Elle utilise des symboles (je n'ai retenu que I = 1, V = 5, X = 10, L = 50, C = 100, D = 500 et M = 1000, mais il existait des notations pour de plus grandes valeurs) qui se combinent de deux manières :
1. Juxtaposition simple : par exemple XII = 10 + 1 + 1 = 12 sachant que la règle usuelle est : au plus trois (quelquefois quatre) symboles identiques juxtaposés. Par exemple "III" est acceptable, mais pas "IIIII". Pour ma part, je pourrais vous justifier cela avec une remarque qui n'est pas forcément la bonne : essayer d'aligner des bâtonnets et cherchez à partir de quelle quantité vous ne pouvez plus dire d'un coup d'oeil combien il y en a... la réponse est 4.
2. Juxtaposition par retranchement : dans XL, L est le symbole de plus forte valeur, et pourtant il est PRECEDE du symbole X. Dans ce cas, il faut effectuer L - X = 50 - 10 = 40. On remarquera qu'il y a AU PLUS un seul symbole de moindre valeur. Il est en effet inutile de noter XXL puisque XXL = XXX qui est une écriture correcte.
Voilà donc pour l'idée générale. La programmation ne pose aucune difficulté. Je n'ai pas cherché à soigner le visuel. Le code en revanche est assez largement commenté. Dernière précision, je m'arrête au symbole mille (M) car il me semble que l'utilisation qui est faite de l'écriture romaine ne justifie pas de s'attaquer aux grands nombres... Là encore, c'est très personnel !
J'ai choisi Débutant car c'est très facile (concepts et programmation), et la rubrique Maths parce qu'il est question de nombres... mais alors il ne s'agit que de mathématiques légères ;-)
Source / Exemple :
'Voir le fichier zip
Conclusion :
Comme d'habitude, si quelqu'un a une erreur à rapporter, ou quelque chose à dire, il ne faut pas hésiter.
Ces chiffre sont internationnal !!!!
et pour les afficher en arabe il faut changer la langue en arabe !!!!
Cordialement.
L'utilisation de iCompt et l'effet de bord sur cette variable entre FConvRomAr() et FCalc() est franchement une abomination, sachant qu'en plus (ajouter l'insulte à l'offense) iCompt est un indice de boucle! Un indice de boucle ne devrait être utilisé que pour compter, on ne doit en toute rigueur pas s'en servir pour autre chose. Mais alors le faire modifier par une fonction extérieure :-( Une solution toute simple est de passer un paramètre Byref de plus à FCalc.
Note: l'emploi systématique de Byval et Byref devant les noms de variables dans les subs et fonctions est conseillé, car ceci permet de montrer l'intention du programmeur. Ca contribue à une meilleur lisibilité du code.
A part ça, bonne idée en soi, même si l'implémentation me laisse dubitatif.
Merci beaucoup
@Siadli
D'habitude j'évite de poster quand il y a déjà une source sur le sujet, sauf si la mienne apporte du nouveau. Or là je n'ai pas pris cette précaution, et c'est la raison pour laquelle je tiens à indiquer que si ma source fait redondance, elle devient inutile et ne présente plus d'intérêt sur VBFr (pour des choses aussi simples, on ne peut d'ailleurs même pas parler "d'approches différentes"...)
@EBArtSoft
Merci pour ton commentaire et bonne chance pour tes manips ;-)
Cordialement,
Cacophrène
Merci Cacophrene et à bientôt
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.