Ir ao conteúdo
  • Cadastre-se
Erlon Fabbro

C Estou com dificuldades com esse programa em C

Posts recomendados

Faça um algoritmo que leia 3 valores a, b e c, coeficientes de uma equação de segundo grau, e calcule e escreva a soma das raízes da equação. Dica:As raízes de uma equação podem ser calculadas pela fórmula de Baskhara.

 

Qual seria meu erro em meu programa? Ele da erro na linha 8 

 

 

#include <stdio.h>
#include <math.h>
int main()
{
float a,b,c,raiz1,raiz2,soma;
printf ("Digita, nesta ordem, os valores A, B e C");
scanf ("%f%f%f",&a,&b,&c);
raiz1=(-b+sqrt(pow(b,2)-(4*a*c)))/(2*a);
raiz2=(-b-sqrt(pow(b,2)-(4*a*c)))/(2*a);
soma=(raiz1+raiz2);
printf ("A soma das raízes da equação é: %f",soma);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Erlon Fabbro Lembre que existem 3 casos: delta > 0, delta < 0, e delta = 0.

Para delta > 0, raízes reais são obtidas.

Para delta = 0, as raízes são reais e iguais.

Para delta < 0, ambas as raízes são complexas.

Somar raízes reais é tranquilo. Mas lembre que a soma de um número natural com um complexo será um complexo, assim como a soma de complexos.

Tome isso como exemplo:

#include <stdio.h>
#include <math.h>

main()
{
    
    float a, b, c, x1, x2, delta, soma;
    
    printf("Digite os valores de a, b e c:\n");
    scanf("%f%f%f", &a, &b, &c);
    
    delta = (pow(b, 2)-(4*a*c));
    
    if(delta >= 0)
    {
        if(delta == 0)
        {
            x1 = ((-b)/2*a);
            x2 = ((-b)/2*a);
            printf("A raiz x1 = %f", x1);
            printf("\nA raiz x2 = %f", x2);
            soma = x1 + x2;
            printf("\nA soma das raízes é: %f", soma);
        }
        else
        {
            x1 = ((-b+sqrt(delta))/2*a);
            x2 = ((-b-sqrt(delta))/2*a);
            printf("A raiz x1 = %f", x1);
            printf("\nA raiz x2 = %f", x2);
            soma = x1 + x2;
            printf("\nA soma das raízes é: %f", soma);
        }
    }
    else
    {
        delta = fabs(delta);
        x1 = ((-b+sqrt(delta))/2*a);
        x2 = ((-b-sqrt(delta))/2*a);
        printf("A raiz x1 = %fi", x1);
        printf("\nA raiz x2 = %fi", x2);
        soma = x1 + x2;
        printf("\nA soma das raízes é: %fi", soma);
    }
    return 0;
}

Seu programa funciona para delta >=0, mas não para delta <0.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que ler individualmente cada variável.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Lucca Rodrigues Obrigado pela explicação, porém neste exercício não poderiamos usar o "if, else", pois o professor ainda não tinha explicado. Porém sua explicação foi muito útil para mim, grato

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Erlon Fabbro Existem 3 casos, então logicamente teriam que ser usadas condições, mas se seu programa é apenas para raízes reais, então ta tudo certo. No meu compilador funcionou, aparentemente não tem nada errado.

Teste e comprove:

a = 1, b = 0, c = -25 (delta > 0)

a = 1, b = -10, c = 25 (delta = 0)

Lembre-se de comentar seu programa, assim todos podem entender o que se passa nele. Identação também é importante.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, Luís Roberto C. da Silva disse:

Você tem que ler individualmente cada variável.

 

🤔 não tem não. scanf() foi escrita para ler entrada formatada --- daí o nome --- você pode ler um arbitrário número de valores. E não tem esse concceito de linha. Apenas de máscara, o primeiro parâmetro

 

1 hora atrás, Erlon Fabbro disse:

@Lucca Rodrigues Obrigado pela explicação, porém neste exercício não poderiamos usar o "if, else", pois o professor ainda não tinha explicado. Porém sua explicação foi muito útil para mim, grato

 

Você está certo de que seu professor reforça essa ideia? É uma ideia besta. Você tem um livro texto ou uma apostila? Entendo não poder usar funções prontas, como as de biblioteca, porque muitas vezes a solução pedida já está na biblioteca, mas comandos da linguagem? Não tem sentido. É como aprender uma linguagem sem poder falar as palavras novas que você ouve, até sua mãe te ensinar alguma "oficialmente"

 

Por falar em funções, porque pow(b,2)? Não gosta de b*b?

 

Seu programa está bom

 

 

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Aprenda_a_Ler_Resistores_e_Capacitores-capa-3d-newsletter.jpg

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!