Foros del Web » Programando para Internet » PHP »

Ayuda Romanos a Arabigos

Estas en el tema de Ayuda Romanos a Arabigos en el foro de PHP en Foros del Web. Alguien me puede ayudar a traducir este pseudocodigo a PHP, ya que lo necesito para convertir numeros romanos a arabigos xD. Código: Pseudocódigo Condiciones iniciales: ...
  #1 (permalink)  
Antiguo 03/11/2010, 17:57
Avatar de OWNED91  
Fecha de Ingreso: abril-2010
Ubicación: Guatemala
Mensajes: 34
Antigüedad: 14 años
Puntos: 0
Ayuda Romanos a Arabigos

Alguien me puede ayudar a traducir este pseudocodigo a PHP, ya que lo necesito para convertir numeros romanos a arabigos xD.

Código:
Pseudocódigo


Condiciones iniciales:
Como condición inicial consideraremos que contamos con una función llamada ValorRomano() que nos devuelve el valor numérico de caracteres individuales.
Ejemplo: ValorRomano("I")=1, ValorRomano("V")=5

1. Inicio
2. Previa definición de ValorRomano()
3. Obtener: R como número Romano
4. Resultado = 0
5. Max = Longitud de R
6. Ciclo en i hasta Max - 1
7.      C = Caracter i de R
8.      C2 = Caracter i+1 de R
9.      si ValorRomano(C)< ValorRomano(C2) entonces
10.         Resultado = Resultado - ValorRomano(C)
11.     sino
12.          Resultado = Resultado + ValorRomano(C)
13.     Fin-si
14. Fin-Ciclo
15.     C2 = Caracter Max de R
16. Resultado = Resultado + ValorRomano(C2)
17. Mostrar Resultado
18. Fin
Este es mi codigo que llevo por el momento, disculpen si mi codigo es una basura pero estoy aprendiendo PHP y psss no se mucho xD

Código PHP:
Ver original
  1. function romanoArabigo($numromano){
  2.    
  3.     $romanarab=str_replace("I","1",$numromano);
  4.     $romanarab=str_replace("V","5",$romanarab);
  5.     $romanarab=str_replace("X","10",$romanarab);
  6.     $romanarab=str_replace("L","50",$romanarab);
  7.     $romanarab=str_replace("C","100",$romanarab);
  8.     $romanarab=str_replace("D","500",$romanarab);
  9.     $romanarab=str_replace("M","1000",$romanarab);
  10.    
  11.     $max=(strlen("$numromano"));
  12.    
  13. }

Supuestamente no se si esta bien esa funcion que nos devuelve el valor numerico de los caracteres individuales que seria en el pseudocodigo la funcion de ValorRomano()
  #2 (permalink)  
Antiguo 03/11/2010, 18:07
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Ayuda Romanos a Arabigos

mmm no tuvimos una competencia de esto en el foro???...
en realidad q tienes suerte XD

http://www.forosdelweb.com/f18/codig...omanos-835322/


este fue el mio *o*

function romanNumber($number){
    static$a=array('I','V','X','L','C','D','M');
    for($x='',$v=0;(int)$number;$number/=10){
        $n=++$v*2-1;
        $r=$number%10;
        $x=$r==4||$r==9?$a[$n-1].$a[$r<5?$n:$n+1].$x:
        ($r>4?$a[$n]:'').str_repeat($a[$n-1],$r<4?$r:$r-5).$x;
    }
    return$x;
}
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 03/11/2010, 18:16
Avatar de OWNED91  
Fecha de Ingreso: abril-2010
Ubicación: Guatemala
Mensajes: 34
Antigüedad: 14 años
Puntos: 0
Respuesta: Ayuda Romanos a Arabigos

Cita:
Iniciado por Hidek1 Ver Mensaje
mmm no tuvimos una competencia de esto en el foro???...
en realidad q tienes suerte XD

[url]http://www.forosdelweb.com/f18/codigos-reto-romanos-835322/[/url]


este fue el mio *o*

function romanNumber($number){
* * static$a=array('I','V','X','L','C','D','M');
* * for($x='',$v=0;(int)$number;$number/=10){
* * * * $n=++$v*2-1;
* * * * $r=$number%10;
* * * * $x=$r==4||$r==9?$a[$n-1].$a[$r<5?$n:$n+1].$x:
* * * * ($r>4?$a[$n]:'').str_repeat($a[$n-1],$r<4?$r:$r-5).$x;
* * }
* * return$x;
}
Gracias por el código, pero no he visto arrays por lo cual no lo puedo usar
  #4 (permalink)  
Antiguo 03/11/2010, 18:34
Avatar de ylellan  
Fecha de Ingreso: mayo-2010
Ubicación: en un lugar de Veracruz
Mensajes: 432
Antigüedad: 13 años, 10 meses
Puntos: 36
Respuesta: Ayuda Romanos a Arabigos

corazon pero en el link que te dejo el colaborador ahi hay muchos ejemplos que puedes usar
  #5 (permalink)  
Antiguo 03/11/2010, 18:39
Avatar de OWNED91  
Fecha de Ingreso: abril-2010
Ubicación: Guatemala
Mensajes: 34
Antigüedad: 14 años
Puntos: 0
Respuesta: Ayuda Romanos a Arabigos

Cita:
Iniciado por ylellan Ver Mensaje
corazon pero en el link que te dejo el colaborador ahi hay muchos ejemplos que puedes usar
Pero todos tienen arrays y ademas estos convierten de arabigos a romanos.
Yo quiero que cuando ingrese por ejemplo "X" este me de en pantala "10", porque de arabigos a romanos ya lo hice con switch-case jejeje, pero de romanos a arabigos no me sale o ya no me da la cabeza
  #6 (permalink)  
Antiguo 03/11/2010, 21:01
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Ayuda Romanos a Arabigos

en el tema que te citaron hay codigo para hacer ambos casos ya que algunos de los que participaron lo hicieron para ambos casos verifica a ver, y bueno nose si es que no te lo permiten pero para hacerlo creo que con array es mas sencillo, de echo en mi caso me costo haciendolo con array imagina sino ubiera podido hacerlo asi que te permiten usar?? o que sabes usar??
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #7 (permalink)  
Antiguo 04/11/2010, 17:26
Avatar de OWNED91  
Fecha de Ingreso: abril-2010
Ubicación: Guatemala
Mensajes: 34
Antigüedad: 14 años
Puntos: 0
Respuesta: Ayuda Romanos a Arabigos

Gracias a todos por la ayuda, pero ya lo logre hacer, dejo la funcion por si a alguien mas le pueda servir saludos :)
El programa tiene un limite hasta el numero arabigo 3999, que en romano es a MMMCMXCIX

Código PHP:
Ver original
  1. function romanoArabigo($number){
  2.     $number=strtoupper($number);
  3.             $comparei=(substr_count($number,"IIII"));
  4.             $comparev=(substr_count($number,"VVVV"));
  5.             $comparex=(substr_count($number,"XXXX"));
  6.             $comparel=(substr_count($number,"LLLL"));
  7.             $comparec=(substr_count($number,"CCCC"));
  8.             $compared=(substr_count($number,"DDDD"));
  9.             $comparem=(substr_count($number,"MMMM"));
  10.             if($comparei>=1 || $comparev>=1 || $comparex>=1 || $comparel>=1 || $comparec>=1 || $compared>=1 || $comparem>=1){
  11.               echo("Recuerde no puede introducir el mismo caracter mas de 3 veces seguidas");  
  12.             }else{
  13.             $tam=strlen($number)-1;
  14.             $number=strtoupper($number);
  15.             $numresult=0;
  16.             $roman="";
  17.             $ctr=1;
  18.             $vartemp="";
  19.            
  20.              
  21.                 while($cont<=$tam){
  22.                 $roman=substr($number, $cont, 1);
  23.                 switch ($roman)
  24.                 {
  25.                     case "I":{
  26.                     $conti++;
  27.                     $ctr=1;
  28.                     $vartemp=substr($number, $cont+1, 1);
  29.                     if((strcmp($vartemp, "V")==0)||(strcmp($vartemp, "X")==0)){
  30.                     $conti--;
  31.                         $conti+=3;
  32.                              $numresult=$numresult-1;
  33.                             }
  34.                             else
  35.                             {
  36.                                 $numresult=$numresult+1;
  37.                             }
  38.                     break;}
  39.                     case "V":{
  40.                         $contv++; $numresult+=5; $ctr=1;
  41.                         break;}
  42.                     case "X":{
  43.                         $ctr=1;
  44.                         $contx++;
  45.                     $vartemp=substr($number, $cont+1, 1);
  46.                     if((strcmp($vartemp, "L")==0)||(strcmp($vartemp, "C")==0)){
  47.                         $contx--;
  48.                             $contx+=3;
  49.                                 $numresult=$numresult-10;
  50.                             }
  51.                             else
  52.                             {
  53.                                 $numresult=$numresult+10;
  54.                             }
  55.                     break;}
  56.                     case "L":{
  57.                         $contl++; $numresult+=50; $ctr=1;
  58.                         break;}
  59.                     case "C":{
  60.                         $ctr=1;
  61.                         $contc++;
  62.                     $vartemp=substr($number, $cont+1, 1);
  63.                     if((strcmp($vartemp, "D")==0)||(strcmp($vartemp, "M")==0)){
  64.                         $contc--;
  65.                         $contc+=3;
  66.                         $numresult=$numresult-100;
  67.                             }
  68.                             else
  69.                             {
  70.                                 $numresult=$numresult+100;
  71.                             }
  72.                     break;}
  73.                     case "D":{
  74.                         $contd++; $numresult+=500;
  75.                          break;}
  76.                     case "M":{
  77.                     $contm++;
  78.                     $numresult=$numresult+1000;
  79.                     break;}
  80.                     default:{
  81.                         break;
  82.                         }
  83.                 }
  84.                 $cont++;
  85.                 }
  86.                
  87.                 echo("El Numero Romano que ingreso en arabigo es : ".$numresult."<br>");
  88. }
  89. }

Etiquetas: Ninguno
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:36.