Generar una ecuacion "exacta"

  • Autor Autor miriamgomez
  • Fecha de inicio Fecha de inicio
M

miriamgomez

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
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
 
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!
 
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
 
Puedes usar la función is_float() para saber si un número tiene decimales dentro de un condiconal.
 
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
 
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.
 
Es un camino pero veo un pequeño inconveniente, la operacion siempre seria un suma, no?
 
Pregunta, ¿hay algún inconveniente si haces un redondeo de esos decimales?
 
si, se trata de que sea exacto por el nivel de los niños que van destinado
 
Puedes probar a usar round(); [MENTION=51587]miriamgomez[/MENTION]

PHP: round - Manual


:encouragement:
 
Última edición por un moderador:
no se puede redondear, empiezo a pensar que es imposible
 
no se puede redondear, empiezo a pensar que es imposible

Creo que no has visto exactamente todos los ejemplos de esa función. Dime un ejemplo de número y lo que debería pasar con él y te digo como se hace con esta función
 

Ok, eso daría 1,75. Si lo quieres dejar directamente así al hacer la cuenta con PHP lo dejas, sino tendrías estas opciones:

PHP:
<?php

/* Ya suponemos que x es 1,75 */

echo round(x); //imprime 2
echo round(x,1); //imprime 1.8

?>
 
No se trata de redondear, sino plantear una ecuacion que de un resultado entero.
 
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...
 
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
 
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; 
?>
 
Fantastico "apaño"

mil gracias
 

Temas similares

Atrás
Arriba