Convertisseur chiffre en chiffre Romain.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Mavrick084
Niveau 1
Niveau 1
Messages : 1
Enregistré le : ven. 15 mars 2019 11:51
Status : Hors ligne

Convertisseur chiffre en chiffre Romain.

#1

Message par Mavrick084 »

Bonjour, j'aimerai créer un convertisseur en chiffre Romain.
Exemple je tape 10 je clic sur Convertir et le résultat s'affiche X

Pourriez-vous m'indiquer un exemple de comment procéder ou me montrer la voie ?
Merci.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Convertisseur chiffre en chiffre Romain.

#2

Message par mikell »

Je te laisse analyser le mécanisme (très simple) et construire la gui :wink:

$x = 1958
Msgbox(0,"", _convert($x) )

Func _convert($n)
   If $n < 1 or $n > 3999 Then Return "invalide"
   Local $a = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
   Local $r = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]
   $s = ""
   For $i = 0 to 12
      While $n >= $a[$i]
          $n -= $a[$i]
          $s &= $r[$i]
      Wend
      If $n = 0 Then Exitloop
   Next
   Return $s
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: Convertisseur chiffre en chiffre Romain.

#3

Message par jchd »

J'avais ça sous le code (le même vu de profil), mais que je n'avais pas limité à seulement 3 M (donc 3999).

Code : Tout sélectionner

Local $n
For $i = 1 To 100
	$n = Random(1, 9999, 1)
	ConsoleWrite($n & @TAB & _IntToRoman($n) & @LF)
Next

Func _IntToRoman($iIn)
	Local Static $aRomanDigits = [[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']]
	Local $sOut, $v
	If $iIn < 0 Or $iIn > 9999 Then Return SetError(1, 0, $sOut)
	For $i = 0 To UBound($aRomanDigits) - 1
		$v = Floor($iIn / $aRomanDigits[$i][0])
		If $v Then
			$sOut &= _StringRepeat($aRomanDigits[$i][1], $v)
			$iIn -= $v * $aRomanDigits[$i][0]
		EndIf
	Next
	Return $sOut
EndFunc
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Convertisseur chiffre en chiffre Romain.

#4

Message par mikell »

Mon code n'est qu'une transcription en AutoIt d'un javascript trouvé kekpart sur le net (et qui contenait cette limite)
Mais en fait c'est à 4999 qu'il faudrait limiter pour garder une notation correcte, au-delà il existe une notation particulière avec des caractères spéciaux, et à 1 dans l'autre sens (les romains ne connaissaient pas le zéro)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: Convertisseur chiffre en chiffre Romain.

#5

Message par jchd »

En laissant à part les multiples extensions qui ont été utilisées ou considérées et comme il n'y a pas de consensus sur le choix entre elles, on reste deans les symboles basiques. On peut cependant aller au-delà de 4999 du fait que le nombre de M n'est pas limité à 3 ou 4. Certes, pour représenter 43597 ça devient totalement débile. Pour zéro je renvoie une chaîne vide, ce qui n'est pas vraiment incorrect.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre