Convertir des chiffres romains en chiffres arabes

Soyez le premier à donner votre avis sur cette source.

Vue 59 069 fois - Téléchargée 1 664 fois

Description

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.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_NICK123
Messages postés
29
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
22 juin 2009

hi,
Ces chiffre sont internationnal !!!!
et pour les afficher en arabe il faut changer la langue en arabe !!!!

Cordialement.
jean_marc_n2
Messages postés
170
Date d'inscription
jeudi 11 décembre 2003
Statut
Membre
Dernière intervention
24 janvier 2009

Hello,

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.
zouzoudu76
Messages postés
1
Date d'inscription
dimanche 26 février 2006
Statut
Membre
Dernière intervention
31 mars 2006

Salut, je viens de lire le programme je suis pas tres forte en vba, j'aimerai traduire ton prog en C, quelqu'un pourrai m'expliquer ce que fais cette ligne de commande "Mid(sRom, iCompt + 1, 1)" et comment je pourrais le traduire en C.
Merci beaucoup
Cacophrene
Messages postés
263
Date d'inscription
lundi 29 mars 2004
Statut
Membre
Dernière intervention
4 mars 2008
1
Salut à tous !

@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
cs_EBArtSoft
Messages postés
4531
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
8
A bah bravo... je suis obligé d'admettre le bien fondé de cette source. En plus tu explique le fonctionnement de cet algorithme "tribal" ! lol (je vais pouvoir faire des manipulation de bits en notation romaine coool ! lol)

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.