#include<stdio.h>
#include<conio.h>
#include<math.h>
void main(){
float a,b,c,d;
float i=-100;
printf("a=\t");
scanf("%d",&a);
printf("\nb=\t");
scanf("%d",&b);
printf("\nc=\t");
scanf("%d",&c);
printf("\nd=\t");
scanf("%d",&d);
printf("\ngiai pt ax3+bx2+cx+d=0");
do{
if(a*pow((float)i,3)+b*pow((float)i,2)+c*i+d==0){
printf("\npt 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=\t%.1f",i);
else if((a==0 && m!=0) || (a==0 && m!=0 && n==0)) printf("\npt co nghiem la x1=\t%.1f x2=\t%.1f",-n/m,i);
else if (a==0 && m==0 && n==0 ) printf("\npt 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("\npt co 3 nghiem pb x1=\t%.1f x2=\t%.1f x3=\t%.1f",x1,x2,i);
else if(delta<0) printf("\nco 1 nghiem x=\t%.1f",i);
else printf("\npt co 2 nghiem x1=\t%.1f x2=\t%.1f",x3,i);
}
getch();
}
các bạn chỉ mình chỗ sai với ạ, pt bậc 3, đa tạ!
1 Like
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
5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?