Conversion chiffres romains

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Conversion chiffres romains

Re: Conversion chiffres romains

par rmangin » 04 oct. 2018, 20:28

dans ta fonction valeur, remplaces echo par return, enlève les guillemets et ça va tout changer :D

Re: Conversion chiffres romains

par lilin » 23 oct. 2015, 06:32

Bonjour,

La fonction valeur retourne bien des chiffres puisqu'elle me les affiche.

Mon problème c'est surtout le "if (valeur($romain{$i}) >= valeur($romain{$i+1}))" qui ne fonctionne pas,
et "$somme += valeur($romain{$i});".

lilin.

Re: Conversion chiffres romains

par or 1 » 22 oct. 2015, 19:22

il faut que la fonction valeur retourne des nombres et pas des chaines.

Re: Conversion chiffres romains

par lilin » 22 oct. 2015, 19:05

Bonsoir,

Le 2èm script est l'original, qui effectivement a pas mal d'erreurs.
Mon script se trouve au dessus (le premier), j'ai effectivement rajouté le $ devant somme , mis des return dans la function valeur($n) et modifié quelque noms de variables.
Je n'ai aucun message d'erreur ni warning.

Re: Conversion chiffres romains

par Ryle » 22 oct. 2015, 13:21

Bonjour,

Dans ta fonction romEnDec($num), il ya plusieurs endroit ou ta variable $somme n'est pas préfixé par un $. PHP considère alors qu'il s'agit d'une constante "SOMME" qu'il ne connait pas, au lieu de la variable $somme qu'il doit incrémenter / décrémenter.

Tu dois d'ailleurs avoir des warning à l'écran ou dans les logs...

Re: Conversion chiffres romains

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&apos;est pas compris entre 1 et 4999.</p>";
			}
			else
			{	
				// Utilisation des variables.
				if (isset($_GET['->']))
				{ 
					echo " le nombre arabe convertis est&nbsp;: ";
					echo decEnRom($arabe);
				}
				elseif (isset($_GET['<-']))
				{ 
					echo " le nombre romain convertis est&nbsp;: ";
					echo romEnDec($romain);
				}
				else
				{
					echo "Erreur !";
				}
			}
		
		?>
		
	</body>

</html>

Re: Conversion chiffres romains

par @rthur » 22 oct. 2015, 10:48

Bonjour lilin et bienvenue sur PHPfrance !
Je débute en php, je me fais la main sur des listing télécharger, en ce moment j’essaie de modifier
un listing de conversion de chiffres romains en arabes, mais j' ai quelques problème.
Quels problèmes rencontres-tu ?
As tu un message d'erreur ?
Qu'as-tu essayé ?

Conversion chiffres romains

par lilin » 22 oct. 2015, 09:31

Bonjour

Je débute en php, je me fais la main sur des listing télécharger, en ce moment j’essaie de modifier
un listing de conversion de chiffres romains en arabes, mais j' ai quelques problème.
Si quelqu'un a une idée je suis preneur et l'en remercie d'avance.

Voici mon listing:
Saisie HTML:
<!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>
		
		<h1>Conversion de nombre arabe en nombre romain</h1>
		
		<form action="traitement.php" method="GET"> 
			<input type="submit" value="ok"/>
			Nombre romain&nbsp;: <input type="text" name="romain" /></p>
			
	</body>

</html>

Partie 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	
		
			// Récupération des variables.
			$romain = $_GET['romain'];
			
					echo " le nombre romain $romain convertis est&nbsp";
					echo romEnDec($romain), "<br />";	
					
					
			// Retourne la valeur decimale d'un chiffre romain.
			function romEnDec($num) 
			{		
				$n=0;
				$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});
					}
				}
						
				return $somme;
			}
			
			// Retourne la valeur d'un caractère romain.
			function valeur($n)
			{	
				switch($n)
				{
			        Case "I": echo "1";return;
			        Case "V": echo "5";return;
			        Case "X": echo "10";return;
			        Case "L": echo "50";return;
			        Case "C": echo "100";return;
			        Case "D": echo "500";return;
			        Case "M": echo "1000";return;
				}
			}				
?>
		
	</body>

</html>
Lilin