Números complexos em C [RESOLVIDO]

1. Números complexos em C [RESOLVIDO]

White Hawk
WhiteHawk

(usa Ubuntu)

Enviado em 13/12/2012 - 21:04h

Olá.

Estou escrevendo um simples programa para calcular as raízes de uma equação de segundo grau. O cálculo de raízes reais está funcionando perfeitamente. O problema está na parte dos complexos: a variável "raiz_delta" aparece como zero, mesmo possuindo outro valor.

Segue o código:


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

main()
{
float a, b, c, delta, raiz_delta;

printf("\nBHASKARA\n\n");

printf("\nDigite o valor de A: ");
scanf("%f", &a);
printf("\nDigite o valor de B: ");
scanf("%f", &b);
printf("\nDigite o valor de C : ");
scanf("%f", &c);

delta = (pow(b, 2) - 4*a*c);

if(delta >= 0)
{
if(delta == 0)
{
printf("\nA raiz x1 = %f", ((-b + sqrt(delta))/2*a));
}

else
{
printf("\nA raiz x1 = %f", ((-b + sqrt(delta))/2*a));
printf("\nA raiz x2 = %f", ((-b - sqrt(delta))/2*a));
}
}

else
{
delta = abs(delta);
raiz_delta = sqrt(delta);

printf("\nA raiz x1 = %f + %fi", ((-b)/2*a), ((raiz_delta)/2*a));
printf("\nA raiz x2 = %f - %fi", ((-b)/2*a), ((raiz_delta)/2*a));
}

return(0);
}



  


2. Re: Números complexos em C [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 14/12/2012 - 11:28h

abs() é para números inteiros. Para números de ponto flutuante, use fabs().

Mas talvez seja mais simples você fazer simplesmente raiz_delta=sqrt(-delta).


3. Re: Números complexos em C [RESOLVIDO]

Levi Gomes
levi linux

(usa Arch Linux)

Enviado em 14/12/2012 - 11:34h

Bom dia! Tudo bem? Veja os códigos abaixo.

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

int main(void)
{
float a, b, c, delta, raiz_delta;

printf("\nBHASKARA\n\n");

printf("\nDigite o valor de A: ");
scanf("%f", &a);
printf("\nDigite o valor de B: ");
scanf("%f", &b);
printf("\nDigite o valor de C : ");
scanf("%f", &c);

delta = (pow(b, 2) - 4*a*c);

if(delta >= 0)
{
if(delta == 0)
{
printf("\nA raiz x1 = %f", ((-b + sqrt(delta))/2*a));
}

else
{
printf("\nA raiz x1 = %f", ((-b + sqrt(delta))/2*a));
printf("\nA raiz x2 = %f", ((-b - sqrt(delta))/2*a));
}
}

else
{
delta = fabs(delta);
raiz_delta = sqrt(delta);

printf("\nA raiz x1 = %f + %fi", ((-b)/2*a), ((raiz_delta)/2*a));
printf("\nA raiz x2 = %f - %fi", ((-b)/2*a), ((raiz_delta)/2*a));
}
return(0);
}


Ou:


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


int main(void)
{
float a, b, c, delta, raiz_delta;

printf("\nBHASKARA\n\n");

printf("\nDigite o valor de A: ");
scanf("%f", &a);
printf("\nDigite o valor de B: ");
scanf("%f", &b);
printf("\nDigite o valor de C : ");
scanf("%f", &c);

delta = (pow(b, 2) - 4*a*c);

if(delta >= 0)
{
if(delta == 0)
{
printf("\nA raiz x1 = %f", ((-b + sqrt(delta))/2*a));
}

else
{
printf("\nA raiz x1 = %f", ((-b + sqrt(delta))/2*a));
printf("\nA raiz x2 = %f", ((-b - sqrt(delta))/2*a));
}
}

else
{
delta = fabs(delta);
raiz_delta = sqrt(delta);

printf("\nA raiz x1 = %f + %fi", ((-b)/2*a), ((raiz_delta)/2*a));
printf("\nA raiz x2 = %f - %fi", ((-b)/2*a), ((raiz_delta)/2*a));
}

return(0);
}


O primeiro é mais eficiente!
O detalhe é que a função abs faz parte do arquivo de cabeçalho stdlib.h. Em math.h temos fabs.

Veja a referência.

http://pubs.opengroup.org/onlinepubs/9699919799/functions/fabs.html#

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/math.h.html

Bons estudos!


4. Re: Números complexos em C [RESOLVIDO]

White Hawk
WhiteHawk

(usa Ubuntu)

Enviado em 14/12/2012 - 12:36h

Olá.

Agradeço-lhes pela ajuda, amigos. Confesso que desconhecia a função "fabs" e não sabia que "abs" pertencia à biblioteca "stdlib.h".

Até mais.


5. Re: Números complexos em C [RESOLVIDO]

Levi Gomes
levi linux

(usa Arch Linux)

Enviado em 15/12/2012 - 08:52h

Tranquilo, precisando de qualquer coisa.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts