Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

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");
}

14 comentários:

Unknown disse...

Otimo tutorial, me ajudou bastante.
Obrigado a todos!

Unknown 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.

Anônimo disse...

Podem me ajudar por favor?
Meu compilador esta dando este erro:

~/Área de Trabalho/programas/exercicios_if else $ cc equaçao_resolvido.c -o equaçao_resolvido
/tmp/ccMJgEn8.o: na função `main':
equaçao_resolvido.c:(.text+0xd4): referência indefinida a `sqrt'
equaçao_resolvido.c:(.text+0x187): referência indefinida a `sqrt'
collect2: error: ld returned 1 exit status

Ja tinha feito o exercicio e a funçao sqrt nao é aceite pelo compilador, entao eu peguei o problema resolvido e colei chapado e continua com o mesmo erro!!!

Anônimo disse...

na hora de executar ele fecha , por que?

Unknown 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 ?

Unknown 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 !

sylvio disse...

boa noite estou com uma duvida e preciso saber qual codigo em c# para esse exercicio

a) Leia três valores inteiros. Calcule e exiba a equação do 2º grau, obedecendo as regras da matemática.
A não pode ser zero;
Delta não pode ser negativo;
Se delta for zero as duas raízes serão iguais.

Anônimo disse...

Sobre a questão 0, fiz assim:

#include
#include
int main(){
setlocale(LC_ALL,"Portuguese");
int x,h;
printf("Digite um número: ");
scanf("%d",&x);
printf("Digite o segundo número: ");
scanf("%d",&h);
if(x==h){
printf("São iguais, por isso não satisfaz à questão\n");}

if (x>h){
printf("O valor de x= %d é maior do que h= %d.\n",x,h);}
if(x
#include
int main(){
setlocale(LC_ALL,"Portuguese");
int x,h;
printf("Digite um número: ");
scanf("%d",&x);
printf("Digite o segundo número: ");
scanf("%d",&h);

if (x>h){
printf("O valor de x= %d é maior do que h= %d.\n",x,h);}
else
if(x<h){
printf("O valor de x= %d é menor do que h= %d.\n",x,h);}
else
if(x==h){
printf("São iguais, por isso não satisfaz à questão\n");}

system("pause");
return 0;}

Unknown disse...

Boa noite senhores ...
O enunciado ficou confuso e incompleto.
Não seria melhor: " Faça um programa que peça e mostre os coeficientes de uma equação do 2º grau e que em seguida resolva está equação. ???

GuilhermeGreen disse...

Fiz deste jeito, deu os resultados das raízes:
#include
#include

int main()
{

float a, //declarando os coeficientes da equação de segundo grau
b,
c,
delta,
y,
x;

int quatro=4,
dois=2;

printf("Digite os coeficientes da equação de segundo grau que daremos as raízes: ");
scanf ("%f %f %f",&a,&b,&c);


//valor do dricriminante

delta = ((b)*(b) - (quatro)*(a)*(c));

if (delta>=0)
{

x=((-b)-(sqrt(delta)))/((dois)*(a));

y=((-b)+(sqrt(delta)))/((dois)*(a));

printf("O valor das raízes são %.2f e %.2f", x,y);

}

else

if(delta<0)

{
printf("Não há como encontrar raízes, pois o valor do discriminate é negativo");
}



}