|
分類:[C# (Windows)]
何度もすみません。もしよろしかったら拝見してみてください
またC++のコードをC#に変えるときの質問なんですが、関数で引数の渡し方がうまくできません。
下のほうにあるsimpという関数の中身なんですが、コードの中で説明があります。 メイン関数 main(int argc, char *argv[] ) { int i, j,i1; int d; int n; double **p; double *pp; double *y; double rand1[1][1]={2.2};
//処理
d=1; p = (double **)malloc((size_t)(d+1)*sizeof(double *)); pp = (double *) malloc((size_t)(d+1)*d*sizeof(double)); for(i = 0 ; i < d+1 ; i++) p[i] = pp+i*d;
for(i = 0 ; i < d+1 ; i++) for(j = 0 ; j < d ; j++) p[i][j] = 0;
for(i = 0 ; i < d ; i++) p[1][i] = rand1[0][i];
y = (double *) malloc((size_t)(d+1)*sizeof(double)); for(i = 0 ; i < d+1 ; i++) y[i] = mtl2(p[i]);
n = simp(p, y, mtl2); //この部分なんですがC++ですとこのような感じです。 } double mtl2(double *t) { int i; double mtl;
mtl =kansuu(t[0]); //ここでt[0]を与えて計算しています。 return(-mtl); }
int simp(double **p, double *y, double (*funk)(double *)) { double nfunk;
//処理
y[i] = (*funk)(psum); //simpの関数の中でこのような計算があります。
return nfunk; }
C++ですとこのような感じです。 以下がC#で書いたコードです。
private void button2_Click(object sender, System.EventArgs e) { int i, j,i1; int d; int n; double[][] p=new double[2][]; double[] y=new double[2]; double[] x=new double[2];
double[] rand1=new double[1] {2.2};
d=1; for (i = 0; i < p.Length; ++i) p[i] = new double[2];
for(i = 0 ; i < d+1 ; i++) for(j = 0 ; j < d ; j++) p[i][j] = 0.0;
for(i = 0 ; i < d ; i++) p[1][i] = rand1[i];
for(i = 0 ; i < d+1 ; i++) y[i] = mtl2(p[i]);
n = simp(p,y, mtl2); //ここのmtl2の所がエラーになってしまいます。 G:\C#\Form1.cs(923): メソッド '描画.Form1.mtl2 (double[])' かっこなしで参照されました。 となります。またmtl2(p[i])といれてみたのですが、G:\C#\\Form1.cs(923): 引数 '3' : 'double' から '描画.Form1.[]f1' に変換できません。となってしまいます。
}
private double ml2(double[] t) { int i; double mtl; mtl=kansuu(t[0]);
return( -mtl ); }
private delegate double f1(double[] f); private int simp(double[][] p,double[] y,f1 []funk) { double nfunk;
//処理 y[i] = (funk[0])(psum); //c++では(*funk)(psum)なんですがこれはいいんですかね?
return nfunk; }
かなり長くなってしまい申し訳ありません。
|