Skip to content

Instantly share code, notes, and snippets.

@samueldcs
Last active July 2, 2023 19:36
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samueldcs/e580a2b44bb028789177a73da3e516f7 to your computer and use it in GitHub Desktop.
Save samueldcs/e580a2b44bb028789177a73da3e516f7 to your computer and use it in GitHub Desktop.
<?php
/**
* Classe Bhaskara, onde calculamos
* o conjunto solucão de uma equacão
* dados os valores dos coeficientes
* a, b e c.
*
* @author Samuel Simão
*
*/
class Bhaskara {
/**
*
* Calcular o conjunto solução de
* uma equacão do segundo grau completa
* dados os coeficientes a, b e c.
*
* @param $a int
* @param $b int
* @param $c int
* @return string
*/
function calculate($a, $b, $c)
{
// Calcular o delta usando a fórmula b.b - 4.a.c
$delta = pow($b, 2) - (4 * $a) * $c;
// Se Delta for menor que 0,
// o resultado não pertence
// ao conjunto dos numeros
// reais, portanto devemos
// matar o script e anunciar
// o motivo
if ($delta < 0) {
die("Not a real number");
}
// O conjunto solução tem duas respostas,
// as vezes chamadas de x' e x'' ou x1 e x2
// O x1 ou x' é o positivo e x2 ou x'' é o
// negativo de acordo com a fórmula de X:
// X = -b +/- a raiz quadrdada de Delta / 2.a
// A função sqrt do PHP extrai a raiz quadrada
// de um numero.
$plus = (-($b) + sqrt($delta)) / (2 * $a);
$minus = (-($b) - sqrt($delta)) / (2 * $a);
// Por convenção, o conjunto solução
// deve apresentar duas respostas, mas
// se as duas raizes da equação são iguais
// não ha motivo para isso
if ($minus == $plus) {
$complete = "S = {" . $minus . "}";
} else {
$complete = "S = {" . $plus . "; " . $minus ."}";
}
// Imprimir Delta
echo "Delta: " . $delta . "<br>";
// Imprimir x' positivo
echo "x': " . $plus . "<br>";
// Imprimir x'' negativo
echo "x'': " . $minus . "<br>";
// Imprimir conjunto solução
echo "Complete: " . $complete . "<br>";
}
}
// Construir a classe Bhaskara
$power = new Bhaskara();
// Usar a função para imprimir o resultado
// se os coeficientes fossem 1, -6 e 9
$equiation->calculate(1, -6, 9);
/**
* Resultado do Script quando executado:
*
* Delta: 0
* x': 3
* x'': 3
* Complete: S = {3}
*/
?>
@pferreirafabricio
Copy link

pferreirafabricio commented Aug 21, 2021

Thanks for this solution! I make some adjustments, I hope this helps someone:

<?php

/**
 * Classe Bhaskara, onde calculamos
 * o conjunto solucão de uma equacão
 * dados os valores dos coeficientes
 * a, b e c.
 *
 * @author Samuel Simão
 */
class Bhaskara
{
    public static function calculate(int $a, int $b, int $c): void
    {
        $delta = self::calculateDelta($a, $b, $c);

        if ($delta < 0) {
            die("Not a real number");
        }

        $plus = (-($b) + sqrt($delta)) / (2 * $a);
        $minus = (-($b) - sqrt($delta)) / (2 * $a);
        if ($minus == $plus) {
            $complete = "S = {" . $minus . "}";
        } else {
            $complete = "S = {" . $plus . "; "  . $minus . "}";
        }

        echo "Delta: " . $delta . "\n";
        echo "x': " . $plus . "\n";
        echo "x'': " . $minus . "\n";
        echo "Complete: " . $complete . "\n";
    }

    private static function calculateDelta(int $a, int $b, int $c): float
    {
        return pow($b, 2) - (4 * $a) * $c;
    }
}

$power = new Bhaskara();
$power::calculate(1, -6, 9);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment