Page 1 sur 1

Convertisseur chiffre en chiffre Romain.

Posté : ven. 15 mars 2019 13:04
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.

Re: Convertisseur chiffre en chiffre Romain.

Posté : ven. 15 mars 2019 21:51
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

Re: Convertisseur chiffre en chiffre Romain.

Posté : ven. 15 mars 2019 22:44
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

Re: Convertisseur chiffre en chiffre Romain.

Posté : sam. 16 mars 2019 09:56
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)

Re: Convertisseur chiffre en chiffre Romain.

Posté : sam. 16 mars 2019 14:28
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.