C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: C++とC#の違いについて


(過去ログ 10 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■1576 / inTopicNo.1)  C++とC#の違いについて
  
□投稿者/ あん (4回)-(2007/02/27(Tue) 18:04:52)

分類:[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;
}

かなり長くなってしまい申し訳ありません。

引用返信 編集キー/
■1581 / inTopicNo.2)  Re[1]: C++とC#の違いについて
□投稿者/ επιστημη (418回)-(2007/02/27(Tue) 21:27:38)
επιστημη さんの Web サイト
>  n = simp(p,y, mtl2);    //ここのmtl2の所がエラーになってしまいます。

  n = simp(p, y, new f1[] {mtl2});


引用返信 編集キー/
■1586 / inTopicNo.3)  Re[2]: C++とC#の違いについて
□投稿者/ ann (4回)-(2007/02/28(Wed) 00:39:45)
No1581 (επιστημη さん) に返信
> > n = simp(p,y, mtl2);    //ここのmtl2の所がエラーになってしまいます。
>
> n = simp(p, y, new f1[] {mtl2});
>
>

どうもありがとうございます。
現在C#ができない状況ですので明日確認してみます。
引用返信 編集キー/
■1599 / inTopicNo.4)  Re[3]: C++とC#の違いについて
□投稿者/ あん (5回)-(2007/02/28(Wed) 12:39:46)
No1586 (ann さん) に返信
> ■No1581 (επιστημη さん) に返信
>>> n = simp(p,y, mtl2);    //ここのmtl2の所がエラーになってしまいます。
>>
n = simp(p, y, new f1[] {mtl2}); //またこのmtl2のところで
G:\C#\レジストレーション\Form1.cs(922): メソッド '描画.Form1.mtl2(double[])' かっこなしで参照されました。
というエラーが出てしまいます。なにか助言などありましたら助かります。





引用返信 編集キー/
■1602 / inTopicNo.5)  Re[4]: C++とC#の違いについて
□投稿者/ επιστημη (420回)-(2007/02/28(Wed) 14:32:09)
επιστημη さんの Web サイト
> n = simp(p, y, new f1[] {mtl2}); //またこのmtl2のところで
> G:\C#\レジストレーション\Form1.cs(922): メソッド '描画.Form1.mtl2(double[])' かっこなしで参照されました。
> というエラーが出てしまいます。なにか助言などありましたら助かります。

教本をきちんと読んで理解してください。

僕のテストコードでは正しく実行してくれました。
あなたのコードがどうなってんだか、示されていないものは判断しようがありません。

引用返信 編集キー/
■1603 / inTopicNo.6)  Re[5]: C++とC#の違いについて
□投稿者/ Blue (279回)-(2007/02/28(Wed) 14:40:40)
ところで、なんでいきなり配列になってしまっているのでしょうか?
C言語では配列になっていないのに。

typedefを使うと明確です。

>int simp(double **p, double *y, double (*funk)(double *))



typedef double (*FUNC)(double* );

int simp(double** p, double* y, FUNC func)


C#ではtypedefをdelegateと置き換えてみると

private delegate double FUNC(double[] param);

int simp(double[][] p, double[] y, FUNC func)

となり

n = simp(p, y, mtl2);

これで呼び出せるはず。

* → []
** → [][]

という安易な変換でうまくいくようなものではありません。
きちんとコードを理解して使ってください。
とりあえず、C++のコードが理解できていないように思えるけど、、、
引用返信 編集キー/
■1605 / inTopicNo.7)  Re[6]: C++とC#の違いについて
□投稿者/ あん (7回)-(2007/02/28(Wed) 15:48:14)
No1603 (Blue さん) に返信
いろいろとありがとうございました。
n=(p,y,new f1(mtl2));
でうまくいきました。
当分は基礎の勉強をしたいと思います。
お世話になりました。

解決済み
引用返信 編集キー/
■1606 / inTopicNo.8)  Re[7]: C++とC#の違いについて
□投稿者/ Blue (280回)-(2007/02/28(Wed) 16:01:52)
No1605 (あん さん) に返信
>n=(p,y,new f1(mtl2));
>でうまくいきました。

VS2003もしくはVS2002でコンパイルしているのでしょうか?
環境明記してもらわないと、最適なコードは提供できません。

多分、επιστημη さんも2005だとおもって
>n = simp(p, y, new f1[] {mtl2});
と回答していたのでしょう。

2002,2003なら
n = simp(p, y, new f1[] {new f1(mtl2)});
でないと不味いわけで。
解決済み
引用返信 編集キー/
■1616 / inTopicNo.9)  Re[8]: C++とC#の違いについて
□投稿者/ あん (8回)-(2007/02/28(Wed) 17:44:22)
No1606 (Blue さん) に返信
> ■No1605 (あん さん) に返信
> >n=(p,y,new f1(mtl2));
> >でうまくいきました。
>
> VS2003もしくはVS2002でコンパイルしているのでしょうか?
> 環境明記してもらわないと、最適なコードは提供できません。
>
> 多分、επιστημη さんも2005だとおもって
> >n = simp(p, y, new f1[] {mtl2});
> と回答していたのでしょう。
>
> 2002,2003なら
> n = simp(p, y, new f1[] {new f1(mtl2)});
> でないと不味いわけで。

そうでしたか。
すみません、2003でした・・
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -