par
lilin » 22 oct. 2015, 12:26
je n'ai pas de message d'erreur, apparemment le if reste dans la 1ère partie et la somme n'est pas faite,
si je rentre IV il ne passe pas par le else et affiche 1510.
Si je rentre XV en romain il m'affiche 105100 il ne fait pas la somme.
voici l'original du script:
Dans mon script j'ai supprimé la 1ere partie "conversion chiffres arabes en romains".
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>conversion</title>
</head>
<body>
<?php
// Retourne la valeur romaine d'un chiffre décimal.
function decEnRom($num)
{
// Vérification de l'entier
$n = intval($num);
$res = '';
// Declaration du tableau
$tabDecEnRom = array('M' => 1000, 'CM' => 900, 'D' => 500, 'CD' => 400,
'C' => 100, 'XC' => 90, 'L' => 50, 'XL' => 40,
'X' => 10, 'IX' => 9, 'V' => 5, 'IV' => 4, 'I' => 1);
// Boucle de convertion
foreach ($tabDecEnRom as $romain => $valeur)
{
$trouver = intval($n / $valeur);
$res .= str_repeat($romain, $trouver);
$n = $n % $valeur;
}
// Nombre convertis
return $res;
}
// Retourne la valeur decimale d'un chiffre romain.
function romEnDec($num)
{
$somme = 0;
for ( $i = 0; $i < strlen($num) - 1; $i++ )
{
if ( valeur($num{$i}) >= valeur($num{$i + 1}))
{
somme += valeur($num{$i});
}
else
{
somme -= valeur($num{$i});
}
}
somme = somme + valeur($num{$i});
}
// Retourne la valeur d'un caractère romain.
function valeur($n)
{
switch($n)
{
Case "I": echo "1"
Case "V": echo "5"
Case "X": echo "10"
Case "L": echo "50"
Case "C": echo "100"
Case "D": echo "500"
Case "M": echo "1000"
}
}
// Récupération des variables.
$arabe = $_GET['arabe'];
$romain = $_GET['romain'];
// Traitement de la variable et message d'erreur possible.
if( 1 => $arabe || 4999 <= $arabe)
{
echo "<p>Votre nombre n'est pas compris entre 1 et 4999.</p>";
}
else
{
// Utilisation des variables.
if (isset($_GET['->']))
{
echo " le nombre arabe convertis est : ";
echo decEnRom($arabe);
}
elseif (isset($_GET['<-']))
{
echo " le nombre romain convertis est : ";
echo romEnDec($romain);
}
else
{
echo "Erreur !";
}
}
?>
</body>
</html>
je n'ai pas de message d'erreur, apparemment le if reste dans la 1ère partie et la somme n'est pas faite,
si je rentre IV il ne passe pas par le else et affiche 1510.
Si je rentre XV en romain il m'affiche 105100 il ne fait pas la somme.
voici l'original du script:
Dans mon script j'ai supprimé la 1ere partie "conversion chiffres arabes en romains".
[php]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>conversion</title>
</head>
<body>
<?php
// Retourne la valeur romaine d'un chiffre décimal.
function decEnRom($num)
{
// Vérification de l'entier
$n = intval($num);
$res = '';
// Declaration du tableau
$tabDecEnRom = array('M' => 1000, 'CM' => 900, 'D' => 500, 'CD' => 400,
'C' => 100, 'XC' => 90, 'L' => 50, 'XL' => 40,
'X' => 10, 'IX' => 9, 'V' => 5, 'IV' => 4, 'I' => 1);
// Boucle de convertion
foreach ($tabDecEnRom as $romain => $valeur)
{
$trouver = intval($n / $valeur);
$res .= str_repeat($romain, $trouver);
$n = $n % $valeur;
}
// Nombre convertis
return $res;
}
// Retourne la valeur decimale d'un chiffre romain.
function romEnDec($num)
{
$somme = 0;
for ( $i = 0; $i < strlen($num) - 1; $i++ )
{
if ( valeur($num{$i}) >= valeur($num{$i + 1}))
{
somme += valeur($num{$i});
}
else
{
somme -= valeur($num{$i});
}
}
somme = somme + valeur($num{$i});
}
// Retourne la valeur d'un caractère romain.
function valeur($n)
{
switch($n)
{
Case "I": echo "1"
Case "V": echo "5"
Case "X": echo "10"
Case "L": echo "50"
Case "C": echo "100"
Case "D": echo "500"
Case "M": echo "1000"
}
}
// Récupération des variables.
$arabe = $_GET['arabe'];
$romain = $_GET['romain'];
// Traitement de la variable et message d'erreur possible.
if( 1 => $arabe || 4999 <= $arabe)
{
echo "<p>Votre nombre n'est pas compris entre 1 et 4999.</p>";
}
else
{
// Utilisation des variables.
if (isset($_GET['->']))
{
echo " le nombre arabe convertis est : ";
echo decEnRom($arabe);
}
elseif (isset($_GET['<-']))
{
echo " le nombre romain convertis est : ";
echo romEnDec($romain);
}
else
{
echo "Erreur !";
}
}
?>
</body>
</html>[/php]