30/09/2018, 23:49
Chuyển code từ C sang C++ không biên dịch được
Chào các anh chị, các bạn. Mình có một đoạn code để tính tích phân nhưng ở trong C. Mình cố gắng chuyển đoạn code này từ C sang C++ để chạy. Mình sử dụng Dev-C++ 5.11 để biên dịch nhưng khi sử thì nó vẫn không biên dịch được. Code của mình là :
//====================LIBRARY================================================
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define EPS 3.0e-14
#define MAXIT 10
//====================MAIN===================================================
double q,dk;
double ftest_k(double k);
double test();
void gaulegf(double x1, double x2, double x[], double w[], int n);
int main()
{
FILE *output;
output=fopen ("testtp.dat","w+" );
printf(" %f
",test());
fprintf(output, " %f
",test());
fclose(output);
printf("
fin
");
getch();
}
//====================THE TEST FUNCTION===============================
void gaulag(float x[],float w[],int n,float alf)
{
float gammln(float xx);
void nrerror(const char error_text[]);
int i,its,j;
float ai;
double p1,p2,p3,pp,z,z1;
for (i=1;i<=n;i++) {
if (i == 1) {
z=(1.0+alf)*(3.0+0.92*alf)/(1.0+2.4*n+1.8*alf);
} else if (i == 2) {
z += (15.0+6.25*alf)/(1.0+0.9*alf+2.5*n);
} else {
ai=i-2;
z += ((1.0+2.55*ai)/(1.9*ai)+1.26*ai*alf/
(1.0+3.5*ai))*(z-x[i-2])/(1.0+0.3*alf);
}
for (its=1;its<=MAXIT;its++) {
p1=1.0;
p2=0.0;
for (j=1;j<=n;j++) {
p3=p2;
p2=p1;
p1=((2*j-1+alf-z)*p2-(j-1+alf)*p3)/j;
}
pp=(n*p1-(n+alf)*p2)/z;
z1=z;
z=z1-p1/pp;
if (fabs(z-z1) <= EPS) break;
}
if (its > MAXIT) nrerror(" too many iterations in gaulag ");
x[i]=z;
w[i] = -exp(gammln(alf+n)-gammln((float)n))/(pp*n*p2);
}
}
double ftest_k(double k)
{ double kq;
kq=k;
return kq;
}
double test()
{
int n,i, j;
double sum;
float k[2000], w[2000], alf;
i=100.;
gaulag(k, w, n, alf);
sum = 0.0;
for(j=1; j<=i; j++)
{
sum = sum + w[j]*ftest_k(k[j]);
}
return sum;
}
Khi compile thì Dev-C++ báo lỗi là : undefined reference to ‘nrerror(char const*)’ , undefined reference to ‘gammln(float)’ . Mong các anh chị, các bạn giúp mình sửa đoạn code này ạ. Xin cám ơn rất nhiều .
Bài liên quan
khai báo 2 hàm mà ko có nội dung gì cả, mà sao lại khai báo trong hàm
void gaulag
là sao ?Đoạn code khó nhìn chỉ thấy thế thôi.
Đây là code của cho chương trình tính tích phân số bằng quy tắc cầu phương Gauss - Laguerre. Chương trình này được viết trong C. Và đây là chương trình đúng. Mình xài Dev-C nên muốn chuyển từ code này trong C sang C++ nhưng trong C++ báo lỗi về việc ko xác định được 2 hàm này. Mình ko biết sao để sửa lỗi này
2 hàm này float gammln(float xx); void nrerror(const char error_text[]); bạn mới định nghĩa prototype chứ đã định nghĩa đâu nên khi linking bị lỗi