PDA

View Full Version : یه مشکل با کد کلاس چندجمله ای



kiuhnmgtrdcv
چهارشنبه 04 دی 1387, 12:08 عصر
سلام دوستان
این یه کد برنامه چندجمله ای هست که من قسمت ریشه یابی کد یعنی کار توابع val , root رو نمیدونم دقیقا چیکار میکنه فقط میدونم به صورت کلی که از روش نصف کردن برای پیدا کردن ریشه استفاده میکنه لطفا اگر کسی میتونه توابع val,root رو خط به خطشو توضیح بده خیلی ممنون میشم

class poly
{
private:
int n;
float a[100];
public:
void get();
void put();
poly(int=0);
poly(int,float []);
float val(float);
float root(float,float);
};
poly::poly(int h,float s[])
{
n=h;
int i;
for(i=0;i<n;i++)
a[i]=s[i];
}
float poly::val(float x)
{
float t=0,s=1;
int i;
for(i=0;i<n;i++ )
{
t+=a[i]*s;
s*=x;
}
return t;
}
float poly::root(float m, float n)
{
if(val(m)*val(n)>0)
{
//cout<<"There isnt any roots between "<<m<<" and "<<n<<".\n";
return m-1;
}
float h;
do
{
h=(m+n)/2;
if(val(m)*val(h)<0)
n=h;
else
m=h;
}
while(val(h)>0.001||val(h)<-0.001);
return h;
}
void main ()
{
float z1[]={-3.0,2,0,1};
poly p1(4,z1);
float z2[]={-3,-2,1};
poly p2(3,z2);
float f,s;
p1.put();
for(f=-10;f<10;f+=0.113)
{
s=p1.root(f,f+0.1);
if(s>=f&&s<=f+0.1)
cout<<endl<<"x="<<s<<" is one root.";
//cout<<" "<<s<<","<<f<<" ";
}
}