Chiffre romain (entre 1 et 9999 compris)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 54 882 fois - Téléchargée 28 fois

Contenu du snippet

Le script se limite à une fonction qui convertit un nombre entier décimal en nombre composé exclusivement de chiffres romains... Tout est dans le titre...

Source / Exemple :


<?php

function entier_romain($entier)
{
    $entier = intval($entier);
    if($entier<1 || $entier>9999)return "";
    
    $rom[3][4];
    $rom[3] = array("M", "", "", "");
    $rom[2] = array("C", "CD", "D", "CM");
    $rom[1] = array("X", "XL", "L", "XC");
    $rom[0] = array("I", "IV", "V", "IX");

    $i = 1;
    $n = 0;
    $romain = "";
    
    for($n=0; $n<4; $n++)
    {
    $chiffre = intval(($entier % ($i*10))/$i);
    if($n<3)
    {
        if($chiffre<4)
        {
        while($chiffre>0)
        {
            $romain = $rom[$n][0].$romain;
            $chiffre--;
        }
        }
        elseif($chiffre==4)
        $romain = $rom[$n][1].$romain;
        elseif($chiffre<9)
        {
        while($chiffre>5)
        {
            $romain = $rom[$n][0].$romain;
            $chiffre--;
        }
        $romain = $rom[$n][2].$romain;
        }
        else
        $romain = $rom[$n][3].$romain;
    }
    else
    {
        while($chiffre>0)
        {
        $romain = $rom[$n][0].$romain;
        $chiffre--;
        }
    }
    $i = $i*10;
    }
    return $romain;
}

function romain_entier($romain)
{

  if(!est_romain($romain))return 0;

  $rom[2][7];
  $rom[0] = array("I", "V", "X", "L", "C", "D", "M");
  $rom[1] = array(  1,   5,  10,  50, 100, 500,1000);
  
  $nombre = 0;
  $precedent = 1000;
  
  for($i=0; $i<strlen($romain); $i++)
  {
    for($j=0; $j<7; $j++)
      if($romain[$i]==$rom[0][$j])break;
	$valeur = $rom[1][$j];
	if($valeur>$precedent)$nombre = $nombre - 2*($precedent);
	$nombre = $nombre + $valeur;
	$precedent = $valeur;
  }
  return $nombre;
}

function est_romain($romain)
{
  $rom = array("I", "V", "X", "L", "C", "D", "M");
  
  $precedent = 6;
  
  for($i=0; $i<strlen($romain); $i++)
  {
    for($j=0; $j<7; $j++)
      if($romain[$i]==$rom[$j])break;
	if($j==7) return 0;
	if($j>$precedent)
	  if($j&1==1)
	    if($j-$precedent!=1)return 0;
	  else
	    if($j-$precedent!=1 && $j-$precedent!=2)return 0;
	$precedent = $j;
  }
  return 1;
}

$x = 490;

echo entier_romain($x)."<br>";
echo romain_entier(entier_romain($x))."<br>";

echo "XD : ".est_romain("XD")."<br>";
echo "CDCX : ".est_romain("CDXC")."<br>";

?>

A voir également

Ajouter un commentaire Commentaires
Messages postés
30
Date d'inscription
lundi 21 avril 2003
Statut
Membre
Dernière intervention
10 mars 2007

J'ai ajouté deux autres fonctions, une pour savoir si une chaine est un nombre romain et une autre qui prend en parametre un nombre romain et retourne un entier...

Dri
Messages postés
30
Date d'inscription
lundi 21 avril 2003
Statut
Membre
Dernière intervention
10 mars 2007

Par décimal j'entend base 10 ^^
Parce que les types en php c'est en gros tous des chaines de caracteres... Donc les variables numériques... Qu'elles soient décimale binaire hexa etc... Ca reste toujours du texte... Donc je précise base 10... C'est vrai que c'est un peu con en se relisant...

Dri ^^
Messages postés
55
Date d'inscription
vendredi 25 juillet 2003
Statut
Membre
Dernière intervention
4 décembre 2005

C'est quoi un nombre entier décimal. C'est nouveau ?
Remarque, ca fait longtemps que je suis pas allé en cours de math.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.