Generar una ecuacion "exacta"

miriamgomez Seguir

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
3 Dic 2013
Mensajes
10
Hola:

Trato de generar una ecuacion que tenga como resultado un numero entero:
<?php
$a = rand(1,9);
$b = rand(1,9);
$c = rand(1,9);

$array = array('+', '-');
$total = count($array) - 1;
$select = rand(0, $total);
if ($array[$select] == "+")
{$x = ($c - $b)/$a;
}

else
{$x = ($c + $b)/$a;}
$var = $x;
if(filter_var($var, FILTER_VALIDATE_INT) === false){
echo 'Valor decimal';
}else{
echo 'Valor entero';
}
?>
<?php echo $a ?>x <?php echo $array[$select] ?> <?php echo $b ?> = <?php echo $c ?><br />
<?php echo $x ?>

Pero mi duda es como hacer que si la comprobación da numero entero, se muestre la ecuación, pero si es numero decimal se genere de nuevo hasta la obtención de un numero entero.

Un saludo
 

Joscplan

Gamma
Programador
Verificación en dos pasos activada
Desde
20 Jun 2013
Mensajes
439
Para esto se puede crear una función que nos diga si el valor ingresado es decimal o no, la misma la creamos de la siguiente manera:

Insertar CODE, HTML o PHP:
function containsDecimal( $value ) {
    if ( strpos( $value, "." ) !== false ) {
        return true;
    }
    return false;
}

Teniendo esta función en cuenta procederé a explicarla.

No es una manera elegante de hacerlo, pero detectará si hay un punto decimal o no en el valor que necesites comprobar.

En los return podrás hacer lo que necesites dependiendo de si contiene o no un valor decimal o entero.

Espero haberte ayudado.

¡Saludos!
 

miriamgomez

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
3 Dic 2013
Mensajes
10
Gracias por tu respuesta:

Medio entiendo tu respuesta

pero no se como llevarla a la practica

Se la parte "literal": si es decimal a generar la ecuacion nuevamente, i es entero mostrar los datos

Un saludo
 

hasdpk

Delta
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
30 Abr 2013
Mensajes
601
Puedes usar la función is_float() para saber si un número tiene decimales dentro de un condiconal.
 

miriamgomez

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
3 Dic 2013
Mensajes
10
Hola hasdpk :

Gracias por tu respuesta;

La parte de la comprobación si es decimal o no la tengo media controlado;

pero como hacer que que via libre o o vuelva a plantear la ecuacion

Un saludo
 

ecoal95

Gamma
Programador
Desde
1 Sep 2012
Mensajes
243
No es más fácil hacerlo al revés?

PHP:
$max_x = 100; // El valor máximo de la X 
$x = rand(0, $max_x);
$a = 1;
$b = rand(0, $max_x);
$c = $x - $b;

echo $a . 'x + ' . $b , ' = ' . $c; ?>
Multiplicando A, B y C por el mismo número puedes tener infinitas ecuaciones, y te aseguras de que todos los coeficientes y la X son enteros.
 

miriamgomez

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
3 Dic 2013
Mensajes
10
Es un camino pero veo un pequeño inconveniente, la operacion siempre seria un suma, no?
 

hasdpk

Delta
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
30 Abr 2013
Mensajes
601
Pregunta, ¿hay algún inconveniente si haces un redondeo de esos decimales?
 

miriamgomez

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
3 Dic 2013
Mensajes
10
si, se trata de que sea exacto por el nivel de los niños que van destinado
 

miriamgomez

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
3 Dic 2013
Mensajes
10
No se trata de redondear, sino plantear una ecuacion que de un resultado entero.
 

ecoal95

Gamma
Programador
Desde
1 Sep 2012
Mensajes
243
Es un camino pero veo un pequeño inconveniente, la operacion siempre seria un suma, no?

Las ecuaciones son siempre una suma de factores, no sé cuál es el problema xD

Un resultado de ejemplo sería:

x + 9 = 6 // Para un x = -3

Si lo que quieres es algo del estilo:

3x + 27 = 18 // Para la misma x

Sólo tendrías que multiplicar a (que en el primer caso vale 1), b y c por un número entero (3 en el caso anterior).

No sé si me he explicado...
 

miriamgomez

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
3 Dic 2013
Mensajes
10
Hola;

si, te respuesta anterior me pareció que me ponía sobre el camino adecuado.

Solo un pero, funciona perfectamente para este tipo de expresión Ax + B = C, pero habría alguna manera de que planteara ecuaciones alternantes con la del tipo Ax - B = C

generar aleatoriamente el signo lo tengo:
$array = array('+', '-');
$total = count($array) - 1;
$select = rand(0, $total);

Pero conjugarlo todo...

ahora no se si he sido yo la que se ha explicado
 

ecoal95

Gamma
Programador
Desde
1 Sep 2012
Mensajes
243
Hola;

si, te respuesta anterior me pareció que me ponía sobre el camino adecuado.

Solo un pero, funciona perfectamente para este tipo de expresión Ax + B = C, pero habría alguna manera de que planteara ecuaciones alternantes con la del tipo Ax - B = C

generar aleatoriamente el signo lo tengo:
$array = array('+', '-');
$total = count($array) - 1;
$select = rand(0, $total);

Pero conjugarlo todo...

ahora no se si he sido yo la que se ha explicado

Sí que puedes, multiplica a, b y c por un número negativo y listo ;) O puedes hacer que $b sea aleatoriamente negativo o positivo usando más rango en rand():

PHP:
<?php
$max_x = 100; // El valor máximo de la X 
$x = rand(0, $max_x);
$a = 1;
$b = rand(-$max_x, $max_x); // Podría ser cualquier número entero, pero así no se sobrecomplica
$c = $x - $b;

echo $a . 'x + ' . $b . ' = ' . $c . '; => x = ' . $x; 
?>
 
Arriba