Nuevamente recurro a los expertos en php por si pueden echarme una manita. Por que la teoría no me entra tan bien como la practica. Ahora he de convertir nº romanos a arabigos ó decimales. Para ello renombro cada caracter romano con 'str_replace' con su valor decimal. Hasta aqui Bien. El problema es que no se como sumar cada caracter romano renombrado para que me de el resultado correcto. Os dejo el code: <?php
El caso es que lo he repasao, que se yo cuantas veces, pero no me entero. ¿Podias ponerle comentario a las lineas del code de Hidek1; osea este: 1. <?php 2. function romanNumber($number){ 3. $a=array('I','V','X','L','C','D','M'); 4. for($x='',$v=0;(int)$number;$number/=10){ 5. $n=++$v*2-1; 6. $r=$number%10; 7. $x=$r==4||$r==9?$a[$n-1].$a[$r<5?$n:$n+1].$x: 8. ($r>4?$a[$n]:'').str_repeat($a[$n-1],$r<4?$r:$r-5).$x; 9. } 10. return$x; 11. } 12.
La verdad es que parece que es el mejor, o el que mas currado esta; pero la verdad, no tengo ni idea de como lo hace, ya que hay funciones y cosas que no habia oido en la vida; y al fin y al cabo lo que se pretende en esos casos de concursos es dar el lenguaje mas alto de PHP; yo te aconsejo que lo uses sin saber lo que hace, o que uses el de: "silvanha" que se entiende bastante bien.
Hombre victor, yo trato de aprehender, sino me voy a llevar toda la vida copiando y pegando sin entender nada. De modo que si alguien me lo pudiera comentar, se lo agradecería.
No te preocupes, entiendo que lo quieres entender, y lo necesites comentado; pero como te digo, el de Hidek1, usa un codigo PHP desde mi punto de vista bastante avanzado, y yo no lo se, x ello no puedo comentartelo xk no lo entiendo!jejeje
Estoy como loco ¿Podriais echarle un vistazo a este code aver en que estoy equivocado? <?php if (!isset ($_POST ["romano"]) && empty ($_POST ["romano"]) or isset ($_POST ["romano"])) { echo "<br/><p>Introduce un nº romano<br/></p>"; } if (isset ($_POST ["romano"]) && !empty ($_POST ["romano"])){ $romano = $_POST["romano"];
$caracteres=array("I"=>1,"V"=>5,"X"=>10,"L"=>50,"C"=>100,"D"=>500,"M"=>1000); $caracterAnte=1001; $mideRomano=strlen($romano); for($i=0; $i<$mideRomano; $i++) { $caracter=substr($romano,$i,1); $caracter=$caracteres($caracterNue); $numero=$numero+$caracter; if ($caracterAnte<$caracter) { echo "Este es su valor decimal " .$numero=($numero+$caracter)-(2*$caracterAnte); }
Y luego caracterAnte y caracterNue no se para que los usas.
El form está, disculpa por no ponerlo. Este es el error que me da a mi Fatal error: Function name must be a string in C:\wamp\www\PHP\tema04_Ej3.php on line 52 La linea 52 es: $caracter=$caracteres($caracterNue); Aqui está el fallo y no lo veo. El $caracterAnte, lo pongo como nº maximo. Y el $caracterNue, se supone que debe ser el caracter siguinte de $i. Ya dudo de todo.
Bueno por fin lo he solucionao. De modo que lo voy a postear por si le sirve a alguien <?php if (!isset ($_POST ["romano"]) && empty ($_POST ["romano"])) { echo "<br/><p>Introduce un nº romano<br/></p>"; } else { $romano = $_POST["romano"]; $caracteres=array("I"=>1,"V"=>5,"X"=>10,"L"=>50,"C"=>100,"D"=>500,"M"=>1000); $caracterAnte=1001; $mideRomano=strlen($romano); for($i=0; $i<$mideRomano; $i++) { $caracter=substr($romano,$i,1); $caracter=$caracteres[$caracter]; $numero=$numero+$caracter; if ($caracterAnte<$caracter) { $numero=$numero-2*$caracterAnte; } $caracterAnte=$caracter; } echo "El numero es: ".$numero; }