Foros del Web » Programando para Internet » PHP »

Simplificar Fracciones desde PHP

Estas en el tema de Simplificar Fracciones desde PHP en el foro de PHP en Foros del Web. Bueno, abro este post para preguntar como tendria que hacer para simplificar fracciones tipo 10/20 a 1/2, como lo hace esta web http://www.mathsisfun.com/simplifying-fractions.html ¿alguien sabe ...
  #1 (permalink)  
Antiguo 21/12/2009, 12:18
 
Fecha de Ingreso: enero-2009
Ubicación: Chile
Mensajes: 191
Antigüedad: 15 años, 3 meses
Puntos: 2
Simplificar Fracciones desde PHP

Bueno, abro este post para preguntar como tendria que hacer para simplificar fracciones tipo 10/20 a 1/2, como lo hace esta web
http://www.mathsisfun.com/simplifying-fractions.html

¿alguien sabe como lograrlo desde php?
  #2 (permalink)  
Antiguo 21/12/2009, 12:33
 
Fecha de Ingreso: diciembre-2009
Mensajes: 438
Antigüedad: 14 años, 4 meses
Puntos: 16
Respuesta: Simplificar Fracciones desde PHP

Si no tienes firebug con el firefox deberías usarlo. Con él podrás ver el código javascript que usan en la función go() para realizar la simplificación automáticamente. Si después lo quieres en php simplemente adapta las funciones a php.
  #3 (permalink)  
Antiguo 21/12/2009, 12:35
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años
Puntos: 60
Respuesta: Simplificar Fracciones desde PHP

Independientemente del lenguaje solo es cuestion de matemáticas, busca el algoritmo de Euclides.
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #4 (permalink)  
Antiguo 21/12/2009, 12:41
 
Fecha de Ingreso: enero-2009
Ubicación: Chile
Mensajes: 191
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Simplificar Fracciones desde PHP

demasiado complicado el codigo, nose como hacerlo, alguien sabe si existe algun codigo que ya lo haga en php?
  #5 (permalink)  
Antiguo 21/12/2009, 12:45
 
Fecha de Ingreso: diciembre-2009
Mensajes: 438
Antigüedad: 14 años, 4 meses
Puntos: 16
Respuesta: Simplificar Fracciones desde PHP

Mira el código fuente de la página que nos has pasado. Verás que hay unas funciones dentro de las etiquetas <script> (go, hcf y lcm). Solo debes adaptar el código de las funciones a php.
  #6 (permalink)  
Antiguo 21/12/2009, 12:49
 
Fecha de Ingreso: enero-2009
Ubicación: Chile
Mensajes: 191
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Simplificar Fracciones desde PHP

ya lo sabia, pero ese codigo es complicado, ya que nose javascript, por algo pregunte en el foro de php
  #7 (permalink)  
Antiguo 21/12/2009, 12:53
 
Fecha de Ingreso: enero-2009
Ubicación: Chile
Mensajes: 191
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Simplificar Fracciones desde PHP

Voy a programarlo, a lo que lo termine lo subo, pero lo aré de una forma mas sencilla..

Edito: ya saque el maximo comun divisor de numerador y denominador, alguien sabe ahora alguna function en php para dividrlo hasta que ya no se pueda mas??
  #8 (permalink)  
Antiguo 21/12/2009, 13:17
 
Fecha de Ingreso: enero-2009
Ubicación: Chile
Mensajes: 191
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Simplificar Fracciones desde PHP

Listo, el codigo para simplificar fracciones es este :P

<?php
$numerador = 20;
$denominador = 10;
$mcd = gmp_gcd($numerador, $denominador);
echo $mcd . '<br>';
$arriba = $numerador / $mcd;
$abajo = $denominador / $mcd;

$resultado = $arriba . '/' . $abajo;

echo $resultado; // devuleve 2/1

?>

criticas?
  #9 (permalink)  
Antiguo 21/12/2009, 13:22
 
Fecha de Ingreso: diciembre-2009
Mensajes: 438
Antigüedad: 14 años, 4 meses
Puntos: 16
Respuesta: Simplificar Fracciones desde PHP

Te paso las funciones traducidas a php. Espero no haverme dejado nada para convertir.

Código PHP:
function go($input1$input2) {

    
$hcfval hcf($input1,$input2);
  
    
$answer $hcfval;
    
$ans1 = ($input1/$hcfval);
    
$ans2 = ($input2/$hcfval);
    
    
$ex "The Greatest Common Factor is " hcfval "<br /><br />";
    
    if (
$hcfval == 1) {
        
ex .= "(No reduction possible)";
    } else {
    
        
ex .= "The fraction simplifies like this: ";
        
        
ex .= "<span class=\"frac-large\"><sup>" $input1 "</sup>/<sub>" $input2 "</sub></span>";
        
ex .= " &raquo;&raquo; ";
        
ex .= "<span class=\"frac-large\"><sup>" . ($input1/$hcfval) . "</sup>/<sub>" + ($input2/$hcfval) + "</sub></span>";
    
    }
    echo 
$ex;
  
}

function 
hcf($text1,$text2){
  
$gcd=1;
  if (
$text1>$text2) {$text1=$text1+$text2$text2=$text1-$text2$text1=$text1-$text2;}
  if ((
$text2==(round($text2/$text1))*$text1)) {$gcd=$text1}else {
   for (
$i round(text1/2) ; $i 1$i=$i-1) {
    if ((
$text1==(round($text1/$i))*$i))
     if ((
$text2==(round($text2/$i))*$i)) {$gcd=$i$i=-1;}
   }
  }
  return 
$gcd;
}

function 
lcm($t1,$t2){
  
$cm=1;
  
$f=hcf($t1,$t2);
  
$cm=$t1*$t2/$f;
  return 
$cm;


Debes llamar a la función "go" pasándole como parámetros las dos partes de la fracción. Ejemplo:

Fracción -> 2/4
Llamada a la función -> go(2, 4);

Espero que te sirva y que funcione correctamente. Ya informarás.
  #10 (permalink)  
Antiguo 21/12/2009, 13:23
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 3 meses
Puntos: 19
Respuesta: Simplificar Fracciones desde PHP

http://www.phpclasses.org/browse/file/23350.html
  #11 (permalink)  
Antiguo 21/12/2009, 13:26
 
Fecha de Ingreso: diciembre-2009
Mensajes: 438
Antigüedad: 14 años, 4 meses
Puntos: 16
Respuesta: Simplificar Fracciones desde PHP

No puedo comprobar tu código porque creo que me falta activar alguna libreria para usar la función gmp_gcd() . ¿Sabes cual es?

¿Has probado la función con una fracción que no se pueda simplificar a ver qué resultado da? Porque si funciona es muuuucho más simple que las que te he pasado.
  #12 (permalink)  
Antiguo 21/12/2009, 13:32
Avatar de CdG
CdG
 
Fecha de Ingreso: marzo-2008
Mensajes: 114
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: Simplificar Fracciones desde PHP

Cita:
Iniciado por Osdiwe Ver Mensaje
No puedo comprobar tu código porque creo que me falta activar alguna libreria para usar la función gmp_gcd() . ¿Sabes cual es?

¿Has probado la función con una fracción que no se pueda simplificar a ver qué resultado da? Porque si funciona es muuuucho más simple que las que te he pasado.
Código PHP:
<?php
function gmp_gcd($a$b)
{
    if (
$a == || $b == 0)
        return 
absmax(abs($a), abs($b)) );
       
    
$r $a $b;
    return (
$r != 0) ?
        
gmp_gcd($b$r) :
        
abs($b);
}
$numerador 20;
$denominador 10;
$mcd gmp_gcd($numerador$denominador);
echo 
$mcd '<br>';
$arriba $numerador $mcd;
$abajo $denominador $mcd;

$resultado $arriba '/' $abajo;

echo 
$resultado// devuleve 2/1
  #13 (permalink)  
Antiguo 21/12/2009, 14:23
 
Fecha de Ingreso: enero-2009
Ubicación: Chile
Mensajes: 191
Antigüedad: 15 años, 3 meses
Puntos: 2
Respuesta: Simplificar Fracciones desde PHP

Para que mas confuciones, con este codigo ya es posible:

Código PHP:
<?php
$numerador 
20;
$denominador 10;
$mcd gmp_gcd($numerador$denominador);
echo 
$mcd '<br>';
$arriba $numerador $mcd;
$abajo $denominador $mcd;

$resultado $arriba '/' $abajo;

echo 
$resultado// devuleve 2/1

?>
igual gracia por las ayudas
  #14 (permalink)  
Antiguo 21/12/2009, 16:21
 
Fecha de Ingreso: diciembre-2009
Mensajes: 438
Antigüedad: 14 años, 4 meses
Puntos: 16
Respuesta: Simplificar Fracciones desde PHP

¿Pero has comprobado que pasa si le das una fracción no simplificable?
  #15 (permalink)  
Antiguo 18/04/2014, 17:22
Avatar de diegosloop  
Fecha de Ingreso: junio-2013
Ubicación: Resistencia - Chaco
Mensajes: 3
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Simplificar Fracciones desde PHP

el algoritmo está bien, pero imprimir por pantalla 2 / 1 no...

Lo que se debería mostrar es la fracción simplificada: es decir, 2.

Por otra parte si tu respuesta es 5 / 4, lo que se debería mostrar es 1 1/4

Espero que puedas resolver la manera... Saludos!
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 16:06.