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.
Convertisseur chiffre en chiffre Romain.
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
-
- Niveau 1
- Messages : 1
- Enregistré le : ven. 15 mars 2019 11:51
- Status : Hors ligne
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: Convertisseur chiffre en chiffre Romain.
Je te laisse analyser le mécanisme (très simple) et construire la gui
$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
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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- jchd
- AutoIt MVPs (MVP)
- Messages : 2273
- 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.
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é.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: Convertisseur chiffre en chiffre Romain.
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)
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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- jchd
- AutoIt MVPs (MVP)
- Messages : 2273
- 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.
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é.