Program do liczenia pierwiastkow zespolonych

0

Byłby ktoś tak dobry i wskazał mi gdzie mam błąd w tym programie? Przy liczeniu pierwiastków zespolonych zawsze wyskakuje mi -1 i nie wiem dlaczego.

#include <stdio.h>
#include <math.h>
#define i sqrt(-1)
int main ()
{
	double a,b,c;
	double delta1,x1,x2,x0,z1,r1,r2,u1,u2,z2,delta2;
	printf ("podaj wspolczynniki a,b,c:");
	scanf("%lf" ,&a);
	printf ("podaj wspolczynniki a,b,c:");
	scanf("%lf" ,&b);
	printf ("podaj wspolczynniki a,b,c:");
	scanf("%lf" ,&c);
	if(a==0){
		printf (" a musi być rozne od 0 ziombel");
		return(1);
	}
	delta1=(b*b)-(4*a*c);
	if(delta1>0)
	{
		x1= (-b -sqrt(delta1))/(2*a);
		x2= (-b +sqrt(delta1))/(2*a);
		printf("x1=%lf, x2=%lf",x1,x2);
		
	}
	
	if(delta1==0)
	{
		x0= (-b/2*a);
		printf("x0=%lf",x0);
	}
	else if (delta1<0)
	{
		printf("Cza liczyc w zespolonych");
		delta2 = fabs(delta1)*i;
		z1=(-b-sqrt(delta2))/(2*a);
		z2=(-b +sqrt(delta2))/(2*a);
		printf("z1=%lf, z2=%lf",z1,z2);
		
	}
	return 0;
}
2

Problemem jest Twoje i. Wypisz sobie ile wynosi sqrt(-1) bo to niestety nie dopisuje Ci magicznie i,

0

@szweszwe
Nie do końca zrozumiałem twoją odpowiedź ale o dziwo problem zniknął po tym jak przestałem definiować i, po prostu zalozylem ze uzytkownik wie ile to jest i. W każdym razie wielkie dzięki za odpowiedź leci rep.

0

Zdefiniowałeś tam, że i = sqrt(-1) ale wartość sqrt(-1) to Nan więc wszelkie operacje z tym związane dają Ci taki właśnie wynik. Po prostu przedstaw wynik w takiej postaci jak to się zwykle robi czyli zamiast obliczać z2=(-b +sqrt(delta2))/(2*a); co nie da Ci żadnego wyniku wypisz, że jest to -b + i * sqrt(delta)/2a odpowiednio to formatując, czyli podstawiając wartości za b, delta i a.

1 użytkowników online, w tym zalogowanych: 0, gości: 1