30/09/2018, 18:46

Giải phương trình bậc 3 bằng C?

xin chào m.n
em đang làm chương trình giải phương trình bậc 3 bằng ngôn ngữ c, em đã code và nó không đúng với mọi trường hợp
ai có thể code hoàn chỉnh bài giải phương trình bậc 3 giúp em với ạ, em xin cảm ơn trước ạ
chúc m.n buổi tối cuối tuần vui vẻ

17XGOD viết 20:56 ngày 30/09/2018

bạn post code lên đây để góp ý thì được không ai code hộ bạn đâu

trần đại hiệp viết 20:52 ngày 30/09/2018
#include<stdio.h>
#include<math.h>
#define PI 3.1415926535898
int main()
{// giai pt bac 3	
	float a, b, c, d, delta, k, x1, x2, x3, x0, x, X;
	printf("ax^3 + bx^2 + cx + d = 0\n");
	printf("nhap a, b, c, d:\n");
	scanf("%f\n%f\n%f\n%f", &a, &b, &c, &d);
 	delta = (float)pow(b,2) - 3*a*c;
	k = (float)(9*a*b*c - 2*pow(b,3) - 27*pow(a,2)*d)/ (2*sqrt(abs(pow(delta,3))));
	
	if(delta>0){
		if(abs(k)<=1) {
		x1 = (2*sqrt(delta)*cos((acos(k)/3)) - b)/ (3*a);
		x2 = (2*sqrt(delta)*cos((acos(k)/3 - (2*PI/3))) - b)/(3*a);
		x3 = (2*sqrt(delta)*cos((acos(k)/3 + (2*PI/3))) - b)/(3*a);
		printf("pt co 3 ngiem:\n%.2f\n%.2f\n%.2f", x1, x2, x3);}
		else{
		float x0 = ((sqrt(delta)*abs(k))/(3*a*k))*(pow(abs(k) + sqrt(pow(k,2) - 1),1/3) + pow(abs(k) - sqrt(pow(k,2) - 1),1/3)) - (b/(3*a));
		printf("pt co nghiem duy nhat: %.2f", x0);
		}
		}
	
	
	if(delta=0){
		X = (-b + pow(pow(b,3) - 27*pow(a,2)*d,1/3))/(3*a);
		printf("pt co nghiem boi: %.2f", X);
	}
	if(delta<0){
		x = (sqrt(abs(delta))/(3*a))*(pow(k + sqrt(pow(k,2) + 1),1/3) + pow(k - sqrt(pow(k,2) + 1),1/3)) - (b/(3*a));
		printf("pt co nghiem duy nhat: %.2f", x);
	}
 }
trần đại hiệp viết 21:02 ngày 30/09/2018

Duc Tran viết 20:57 ngày 30/09/2018

Số k, delta là số thực nên lấy trị tuyệt đối = fabs(k) chứ không phải abs(k)
Hàm pow (double X, double Y) nếu bạn viết pow(…, 1/3) thì 1/3 nó hiểu là số nguyên int => tính sai, bạn chỉ cần sửa 1/3 thành 1.0/3.
Thêm nữa -5^2 = -25 nhưng pow(-5,2) không dùng được, phải đổi thành -pow(5,2). (Số 5 và 2 chỉ là ví dụ, bạn xem lại chỗ pow( abs(k) - sqrt(…)), 1/3).

Mình mới nhìn ra những lỗi đó, có thể vẫn còn, bạn tự tìm tòi nhé.

Lê Hữu Thịnh viết 20:54 ngày 30/09/2018

if(delta=0){
X = (-b + pow(pow(b,3) - 27*pow(a,2)d,1/3))/(3a);
printf(“pt co nghiem boi: %.2f”, X);
}

Chỗ này so sánh thì phải là ==

Bài liên quan
0