0 k thích
42 đã xem
trong Cố vấn học tập bởi (560 điểm)
cụ thể là e nhập 2 4 1 3 và khoảng nghiệm từ -5 đến 5 ,trong Cfree thì chạy được, visual thì đứng yên, ai chỉ e cách khắc phục với ạ

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#define eps 1e-7
 
float f(float a, float b, float c, float d, float x)
{
float f;
f = a*pow(x,3)+b*pow(x,2)+c*x+d;
return f;
}
 
void main ()
{
float a, b, c, d, m, n, k;
char ctn;
while (1)
{
printf ("Enter into coefficent of the equation:\n");
printf ("a = ");
scanf ("%f",&a);
printf ("\nb = ");
scanf ("%f",&b);
printf ("\nc = ");
scanf ("%f",&c);
printf ("\nd = ");
scanf ("%f",&d);
printf ("Please enter into limit of solution:\n");
printf ("m = ");
scanf ("%f",&m);
printf ("\nn = ");
scanf ("%f",&n);
k=(m+n)/2;
if (f(a,b,c,d,m)*f(a,b,c,d,n)<0)
{
while (abs(n-m)>eps&&f(a,b,c,d,k)!=0)
{
k=(m+n)/2;
if (f(a,b,c,d,k)>0) n=k;
else m=k;
}
printf ("\nSolution is %.3f",k);
}
else if (f(a,b,c,d,m)*f(a,b,c,d,n)>0) printf ("\n(%f,%f) isn't the limit of solution!",m,n);
else if (f(a,b,c,d,m)==0) printf ("\nSolution is %.3f",m);
else if (f(a,b,c,d,n)==0) printf ("\nSolution is %.3f",n); 
printf ("\nDo you want to continue ? (y/n)\n\n");
ctn=getch();
if (ctn!='y') break;
}
}
bởi (3.2k điểm)
Câu hỏi này bạn không nên post ở đây mà hãy post trong Kiến thức CNPM nha bạn.

1 Câu trả lời

+2 k thích
bởi (1.4k điểm)

Theo mình thì chương trình đứng chắc là do eps = 1e-7 quá nhỏ, trên visual không so sánh được nên vòng lặp while (abs(n-m)>eps&&f(a,b,c,d,k)!=0 sẽ lặp mãi mãi (trên c free chắc so sánh đươc =))))))) bạn thử đổi eps = 1e-3 thì được đó

bởi (560 điểm)
ok được rồi ạ, tks a nhìu
Chào mừng đến với Q&A FIT. Bạn có thể đặt câu hỏi và nhận được câu trả lời từ các bộ phận hỗ trợ và những thành viên khác tại Khoa Công nghệ Thông tin, Trường Đại học Khoa học Tự nhiên, Đại học Quốc gia TP.HCM. Bạn hãy đăng nhập bằng tài khoản Google để gửi hoặc trả lời các câu hỏi.
...