Programa em C que exibe as raízes de uma equação do 2o grau - até as complexas

Propomos para você várias questões sobre o que ensinamos a respeito do Teste Condicional IF ELSE, aqui em nosso curso C Progressivo.

Dentre elas, o seguinte desafio:
Escreva um programa na linguagem C que pede os coeficientes de uma equação do segundo grau e exibe as raízes da equação, sejam elas reais ou complexas.

Esse programa exige uma complexidade maior. Mas explicaremos tudo aqui, passo-a-passo.

Clique aqui e saiba como obter seu certificado de programação C! Entre já no Mercado de Trabalho!

Aplicativo em C que resolve uma equação do segundo grau



Passo 1:
A primeira parte do programa recebe os três coeficientes da equação, que são 'a', 'b' e 'c' e serão representados pelo tipo float.

Passo 2:
Uma equação do 2o grau só é válida se 'a' for diferente de 0, então, se for igual a 0 o programa deverá terminar.
Ou seja, nosso programa irá acontece dentro do 'if' que checa que 'a' é diferente de 0.

Passo 3:
Determinando o valor de delta: delta = b² - 4ac
Determinando a raiz quadrada de delta: sqrtdelta = sqrt(delta);

Onde sqrt significa 'square root', ou raiz quadrada, em inglês.
Em C, calculamos a raiz quadrada do número x usando a função sqrt(), que está na biblioteca math.h. Logo, precisamos importar essa biblioteca no começo do programa.

Passo 4:
Se delta for maior ou igual a zero, as raízes são dadas por:
raiz1 = (-b + sqrtdelta) / 2a
raiz2 = (-b - sqrtdelta) / 2a

Passo 5:
Se delta for menor que zero, suas raízes serão complexas e as raízes serão da forma:
raiz1 = (-b + i.sqrt(-delta) )/2a
raiz2 = (-b - i.sqrt(-delta) )/2a

Formatei a saída da seguinte forma, para ficar mais legível, que é a mesma coisa das equações anteriores:
raiz1 = (-b)/2a + i.sqrt(-delta)/2a
raiz2 = (-b)/2a - i.sqrt(-delta)/2a

Assim, chegamos ao resultado final de nosso programa em C:

Código C:
#include <stdio.h>
#include <math.h>
int main()
{
    float a, b, c,    //coeficientes
          delta,      //delta
          sqrtdelta,  //raiz quadrada de delta
        raiz1,raiz2;  //raízes

        //Passo 1: Recebendo os coeficientes
        printf("Equação do 2o grau: ax² + bx + cx = 0\n");

        printf("Entre com o valor de a: ");
        scanf("%f", &a);

        printf("Entre com o valor de b: ");
        scanf("%f", &b);

        printf("Entre com o valor de c: ");
        scanf("%f", &c);


        //Passo 2: Checando se a equação é válida
        if(a != 0)
        {

        //Passo 3: recebendo o valor de delta e calculando sua raiz quadrada
            delta = (b*b) - (4*a*c);
            sqrtdelta = sqrt(delta);

        //Passo 4: se a raiz de delta for maior que 0, as raízes são reais
            if(delta >= 0)
            {
                raiz1 = (-b + sqrtdelta)/(2*a);
                raiz2 = (-b - sqrtdelta)/(2*a);
                printf("Raízes: %.2f e %.2f", raiz1, raiz2);
            }
        //Passo 5: se delta for menor que 0, as raízes serão complexas
            else
            {
                delta = -delta;
                sqrtdelta = sqrt(delta);
                printf("Raíz 1: %.2f + i.%.2f\n", (-b)/(2*a), (sqrtdelta)/(2*a));
                printf("Raíz 2: %.2f - i.%.2f\n", (-b)/(2*a), (sqrtdelta)/(2*a));

            }

        }
        else
            printf("Coeficiente 'a' inválido. Não é uma equação do 2o grau");
}

8 comentários:

Alessandro Kssiano disse...

Otimo tutorial, me ajudou bastante.
Obrigado a todos!

Alessandro Kssiano disse...

Otimo conteudo. Me ajudou bastante. Obrigado a todos!

Anônimo disse...

E tem um programa q faca o inverso: vc digita as raizes e o programa lhe mostra a equacao correspondente?

Edson Gustavo disse...

Muito bom o tutorial. Desculpe, mas uma coisa ficou um pouco confusa: no 5º passo, oque significa o i?
"
raiz1 = (-b)/2a + i.sqrt(-delta)/2a
raiz2 = (-b)/2a - i.sqrt(-delta)/2a"

Anônimo disse...

Uma explicação importante que está faltando é o pow(a,b) para elevar o número ao quadrado.

Anônimo disse...

i significa raiz de -1. É a unidade imaginária, ela determina se um número é real ou complexo. Isso é matemática do 2º ~ 3º ano do ensino médio.

Gabriella Goffredo disse...

Tenho alguns exercícios de equações para resolver em C e não achei mais nada a respeito além da sua explicação aqui e fiquei com uma dúvida, essa fórmula que você apresentou:
raiz1 = (-b)/2a + i.sqrt(-delta)/2a
raiz2 = (-b)/2a - i.sqrt(-delta)/2a
Ela também serve para os exercícios no papel ou é utilizado somente para o programa ?

Paulo Freitas disse...

No caso do numero imaginario "i". como ele fica no programa? atribuo algum valor ? o C não entende o i como numero imaginario né ? Ou não precisa por o "i" no programa ? serviria apenas para indicar que é raiz complexa ?

Ótimo curso, Parabéns a toda equipe do Prog. Progressiva !

Gostou desse tutorial de C?
Sabia que o acervo do portal C Progressivo é o mesmo, ou maior que, de um livro ou curso presencial?
E o melhor: totalmente gratuito.

Mas para nosso projeto se manter é preciso divulgação.
Para isso, basta curtir nossa página no Facebook e/ou clicar no botão +1 do Google.
Contamos e precisamos de seu apoio.