Foros del Web » Programando para Internet » PHP »

numero romano

Estas en el tema de numero romano en el foro de PHP en Foros del Web. buenas, alguien sabe si existe una funcion que te convierta un numero a la tabla romana,,,, :...
  #1 (permalink)  
Antiguo 29/08/2005, 00:03
Avatar de hadesinfer  
Fecha de Ingreso: mayo-2005
Mensajes: 43
Antigüedad: 19 años, 6 meses
Puntos: 0
numero romano

buenas, alguien sabe si existe una funcion que te convierta un numero a la tabla romana,,,, :
  #2 (permalink)  
Antiguo 29/08/2005, 06:18
 
Fecha de Ingreso: octubre-2004
Mensajes: 751
Antigüedad: 20 años, 1 mes
Puntos: 4
Bastaba con buscar "numeros romasnos php" en google. Como verás sale primero una página que sale el código para pasar de números romanos a decimales.

www.programatium.com/php/php/conversion2.htm

Después sale una que tiene el código para pasar de decimales a romanos:

http://www.webtaller.com/construccio...nos_en_php.php

Por si acaso no te funcionara el código de la segunda página (que creo que es el que te interesa) es el siguiente:

Código PHP:
<?
function decimal_romano($numero)
{
$numero=floor($numero);
if(
$numero<0)
{
$var="-";
$numero=abs($numero);
}
# Definición de arrays
$numerosromanos=array(1000,500,100,50,10,5,1);
$numeroletrasromanas=array("M"=>1000,"D"=>500,"C"=>100,"L"=>
50,"X"=>10,"V"=>5,"I"=>1);
$letrasromanas=array_keys($numeroletrasromanas);

while(
$numero)
{
for(
$pos=0;$pos<=6;$pos++)
{
$dividendo=$numero/$numerosromanos[$pos];
if(
$dividendo>=1)
{
$var.=str_repeat($letrasromanas[$pos],floor($dividendo));
$numero-=floor($dividendo)*$numerosromanos[$pos];
}
}
}
$numcambios=1;
while(
$numcambios)
{
$numcambios=0;
for(
$inicio=0;$inicio<strlen($var);$inicio++)
{
$parcial=substr($var,$inicio,1);
if(
$parcial==$parcialfinal&&$parcial!="M")
{
$apariencia++;
}else{
$parcialfinal=$parcial;
$apariencia=1;
}
# Caso en que encuentre cuatro carácteres seguidos iguales.
if($apariencia==4)
{
$primeraletra=substr($var,$inicio-4,1);
$letra=$parcial;
$sum=$primernumero+$letternumero*4;
$pos=busqueda($letra,$letrasromanas);
if(
$letrasromanas[$pos-1]==$primeraletra)
{
$cadenaant=$primeraletra.str_repeat($letra,4);
$cadenanueva=$letra.$letrasromanas[$pos-2];
}else{
$cadenaant=str_repeat($letra,4);
$cadenanueva=$letra.$letrasromanas[$pos-1];
}
$numcambios++;
$var=str_replace($cadenaant,$cadenanueva,$var);
}
} }
return 
$var;
}

function 
busqueda($cadenanueva,$array)
{
foreach(
$array as $contenido)
{
if(
$contenido==$cadenanueva)
{
return 
$pos;
}
$pos++;
} }
?>
Y el de la primera (de romanos a decimales):
Código PHP:
/* ------------------------------------------------------- */
/* -- FUNCIÓN QUE CONVIERTE NUMEROS ROMANOS A DECIMALES -- */
/* --------- http://www.lawebdelprogramador.com ---------- */
/* --------------------------------------------------------*/

function romano_decimal($var)
{
$var=strtoupper($var);
$var=ereg_replace("[^IVXLCDM]","",$var);
# Definición de variables
$numeroletrasromanas=array("M"=>1000,"D"=>500,"C"=>100,"L"=>
50,"X"=>10,"V"=>5,"I"=>1);
$parcialfinal=1001;
for(
$inicio=0;$inicio<strlen($var);$inicio++)
{
$parcial=substr($var,$inicio,1);
$parcial=$numeroletrasromanas[$parcial];
if(
$parcial<=$parcialfinal)
{
$suma.="+$parcial";
}else{
$suma.="+".($parcial-(2*$parcialfinal));
}
$parcialfinal=$parcial;
}
eval(
"\$suma=$suma;");
return 
$suma;

Espero que te sirva.
Saludos,
__________________
sergiold
  #3 (permalink)  
Antiguo 29/08/2005, 07:19
Avatar de hadesinfer  
Fecha de Ingreso: mayo-2005
Mensajes: 43
Antigüedad: 19 años, 6 meses
Puntos: 0
gracias lo probare...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:12.