30/09/2018, 20:08

các bạn chỉ mình chỗ sai với ạ, pt bậc 3, đa tạ!

#include<stdio.h>
#include<conio.h>
#include<math.h>
void main(){
	float a,b,c,d;
	float i=-100;
	printf("a=	");
	scanf("%d",&a);
	printf("
b=	");
    scanf("%d",&b);
	printf("
c=	");
	scanf("%d",&c);
	printf("
d=	");
	scanf("%d",&d);
	printf("
giai pt ax3+bx2+cx+d=0");
	do{
		if(a*pow((float)i,3)+b*pow((float)i,2)+c*i+d==0){
			printf("
pt tro thanh (x-%f)(%dx2+(%d+%f%d)x+(%d+%f(%d+%f%d)))",i,a,b,i,a,c,i,b,i,a);
			break;
		}
		else i++;
	} while(-100<=i && i<=100);
		float m,n;
	m=b+i*a;//b
	n=c+i*(b+i*a);//c
	if(a==0 && m==0) printf("pt co nghiem x=	%.1f",i);
	else if((a==0 && m!=0) || (a==0 && m!=0 && n==0)) printf("
pt co nghiem la x1=	%.1f x2=	%.1f",-n/m,i);
	else if (a==0 && m==0 && n==0 ) printf("
pt co vo so nghiem");
	else{
	
			float delta,x1,x2,x3;
			delta=pow((float)m,2)-(4*a*n);
			x1=(-m+sqrt(delta))/(2*a);
			x2=(-m-sqrt(delta))/(2*a);
			x3=-m/(2*a);
			if(delta>0) printf("
pt co 3 nghiem pb x1=	%.1f x2=	%.1f x3=	%.1f",x1,x2,i);
			else if(delta<0) printf("
co 1 nghiem x=	%.1f",i);
			else printf("
pt co 2 nghiem x1=	%.1f x2=	%.1f",x3,i);
	}
	getch();
}
Gió viết 22:16 ngày 30/09/2018

Vì số thực có sai số nên việc so sánh ==0 hầu như là sai. Ta nên viết 1 hàm equal cho số thực trong TH này

#define eps 1e-6
int equal(float a,float b){
    return abs(a-b)<eps;
}
  • giải phương trình bậc 3 tổng quát thì bạn có thể tham khảo cách giải của Cardano, hoặc đưa về lượng giác
Bài liên quan
0