Lại phải nhờ mọi người tiếp vậy. Mình viết chương trình nội suy hàm số theo pp Lagrange nên phải sử dụng class Đa thức
Code:
class Da_thuc
{
private:
int bac;
float hs[10];
// Cau truc du lieu : hs[0] chua he so tu do, hs[1] chua he so x..
public:
int get_deg();
Da_thuc (float init[], int deg);
Da_thuc ();
Da_thuc Tong (Da_thuc a);
Da_thuc Nhan (Da_thuc a);
Da_thuc Nhan_num (float c);
void xuat (float *a,int sl );
float gt (float diem);
};
Mình có hàm Nội suy thế này, với dt là một mảng các biến toàn cục có kiểu Đa thức. Nhưng cứ chạy đến cái đoạn in đậm này là bị out
Code:
Da_thuc Noi_suy ( Da_thuc * pt)
{ Da_thuc ns;
int i,j;
Da_thuc B[10];
float c[1];
c[0]=1;
Da_thuc temp(c,1);
float A[10];
cout<<"h";
for (i=0;i<so_luong;i++)
{ A[i]=data[i].y;
B[i]=temp;
}
cout<<"k";
for (i=0;i<so_luong;i++)
for (j=0;j<so_luong;j++)
if (i!=j)
{
A[i]=A[i]/(data[i].x-data[j].x);
B[i]=B[i].Nhan(dt[i]);
}
for (i=0;i<so_luong;i++)
ns=ns.Tong( B[i].Nhan_num(A[i]));
return ns;
}
Còn đây là method Nhân
Code:
Da_thuc Da_thuc :: Nhan ( Da_thuc a)
{ Da_thuc tich;
tich.bac=bac*a.bac;
int i,j,k;
for (i=0; i < (tich.bac);i++)
tich.hs[i]=0;
for (i=0;i<(tich.bac);i++)
for (j=0;j<bac;j++)
for (k=0;k<a.bac;k++)
if (i ==j*k)
{ tich.hs[i]=tich.hs[i]+hs[j]*a.hs[k];
}
return tich;
};
Da_thuc Da_thuc:: Nhan_num ( float c)
{
Da_thuc tich;
tich.bac=bac;
int i;
for (i=0; i < (tich.bac);i++)
tich.hs[i]=hs[i]*c;
return tich;
};