Alguem pode me dizer o que ha de errado??

1. Alguem pode me dizer o que ha de errado??

Matheus Phillipo Silverio Silva
MattSilverio

(usa Linux Mint)

Enviado em 25/03/2016 - 20:40h

Tenho que efetuar a leitura de 3 valores inteiros e processar o calculo da equaçao de segundo grau apresentando as raizes utilizando a formula de Bhaskara

#include <stdio.h>
#include <math.h>
int main()

{
int a,b,c;
float delta, x1 , x2;

delta = (b*b) - (4*a*c);
x1 = ((-b)* (sqrt(delta))) / (2*a);
x2 = ((-b) * (-sqrt(delta))) /(2*a);
scanf("%d %d %d", &a, &b, &c);

if(delta == 0)
{
printf("Apenas existe uma solucao : %f", x1);
}
else
{
if(delta < 0)
{
printf("N ha solucao real");

}
else
{
if(delta > 0)
{
printf("Ha duas solucoes reais: %f e %f", x1 , x2);
}
}

}
return 0;

}



  


2. Re: Alguem pode me dizer o que ha de errado??

felipe silva
lipman

(usa Debian)

Enviado em 25/03/2016 - 20:59h

segue o codigo corrigido:


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

int main()

{
int a,b,c;
float delta, x1 , x2;

delta = (b*b) - (4*a*c);
x1 = ((-b)* (sqrt(delta))) / (2*a);
x2 = ((-b) * (-sqrt(delta))) /(2*a);
scanf("%d %d %d", &a, &b, &c);

if(delta == 0)
{
printf("Apenas existe uma solucao : %f", x1);
}
else if (delta < 0){

printf("N ha solucao real");

}
else if (delta > 0)
{
printf("Ha duas solucoes reais: %f e %f", x1 , x2);
}

return 0;

}



porem ainda da esse erro:

/tmp/cc0lxnR4.o: na função `main':
test.c:(.text+0x61): referência indefinida para `sqrt'
test.c:(.text+0x99): referência indefinida para `sqrt'
collect2: error: ld returned 1 exit status
T+


3. Re: Alguem pode me dizer o que ha de errado??

Lucas Ferreira dos santos
lksmodos

(usa Ubuntu)

Enviado em 25/03/2016 - 21:27h

lipman escreveu:

segue o codigo corrigido:


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

int main()

{
int a,b,c;
float delta, x1 , x2;

delta = (b*b) - (4*a*c);
x1 = ((-b)* (sqrt(delta))) / (2*a);
x2 = ((-b) * (-sqrt(delta))) /(2*a);
scanf("%d %d %d", &a, &b, &c);

if(delta == 0)
{
printf("Apenas existe uma solucao : %f", x1);
}
else if (delta < 0){

printf("N ha solucao real");

}
else if (delta > 0)
{
printf("Ha duas solucoes reais: %f e %f", x1 , x2);
}

return 0;

}



porem ainda da esse erro:

/tmp/cc0lxnR4.o: na função `main':
test.c:(.text+0x61): referência indefinida para `sqrt'
test.c:(.text+0x99): referência indefinida para `sqrt'
collect2: error: ld returned 1 exit status
T+


lipman seu código ainda contem alguns erros, como calcular primeiro o delta e capturar as variáveis depois, e da pra simplificar mais um pouco, e tem um outra coisa se estiver compilando pelo prompt e necessário utilizar gcc
gcc prog.c -o prog -lm 
esse -lm faz reconhecer a biblioteca math.h. segue meu código abaixo.
#include <stdio.h>
#include <math.h>

int main()

{
int a = 0,b = 0,c = 0;
double delta, x1 , x2, aux;
scanf("%d %d %d",&a,&b,&c);
delta = (b*b) - (4*a*c);
aux = sqrt (delta);
x1 = (-b)* (aux) / (2*a);
x2 = (-b) * (-aux) /(2*a);

if(delta == 0)
{
printf("Apenas existe uma solucao : %f", x1);
}
else if (delta < 0){

printf("N ha solucao real");

}
else if (delta > 0)
{
printf("Ha duas solucoes reais: %f e %f", x1 , x2);
}

return 0;

}




4. Re: Alguem pode me dizer o que ha de errado??

felipe silva
lipman

(usa Debian)

Enviado em 25/03/2016 - 22:03h

Obrigado pela correção! Eu apenas corrigi os else if que estavam errados!
Sim eu usei GCC mas do jeito simples que é gcc arquivo.c


5. Re: Alguem pode me dizer o que ha de errado??

Paulo
paulo1205

(usa Ubuntu)

Enviado em 26/03/2016 - 01:15h

Por quê usar a, b e c como inteiros? Por quê não fazê-los também float?

E já que não se vai imprimir coisa útil quando delta é menor que zero, por que não fazer o cálculo das raízes apenas se ele for maior ou igual a zero? (Isso se for mantida a lógica atual; eu, por mim, imprimiria as raízes complexas conjugadas quando delta fosse menor que zero.)


6. Re: Alguem pode me dizer o que ha de errado??

Lucas Ferreira dos santos
lksmodos

(usa Ubuntu)

Enviado em 26/03/2016 - 09:33h

paulo1205 escreveu:

Por quê usar a, b e c como inteiros? Por quê não fazê-los também float?

E já que não se vai imprimir coisa útil quando delta é menor que zero, por que não fazer o cálculo das raízes apenas se ele for maior ou igual a zero? (Isso se for mantida a lógica atual; eu, por mim, imprimiria as raízes complexas conjugadas quando delta fosse menor que zero.)


Pensei nas mesmas coisas Paula, mas não modifiquei deixei por conta do dono do código, pois ele precisa desenvolver um pouco melhor essa lógica.


7. Re: Alguem pode me dizer o que ha de errado??

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/03/2016 - 12:29h

Não é difícil calcular as raízes quando o delta é negativo.
E só um detalhe, math.h não é biblioteca, é um arquivo com algumas convenções pré-estabelecidas para a libm (ou libmath), esta sim uma biblioteca.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts