投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/11/30 22:26:13
> すいませんけどあまり分かりません。
すなわち、「全部わからない」というわけでは無いのですよね?
具体的には、どの部分の書き換えで悩んでいるのでしょうか。


> 大変長くなり申し訳ございません。
分からない個所が提示されていなかったので、
こちらで勝手に幾つか拾い出してみます。


> for(int i=0; i<3; i++) size.push_back(mp.size[i]);
> for(int i=0; i<3; i++) act.push_back(mp.act[i]);
vector<int> を List(Of Integer) 型で代用しているとすれば、
For i As Integer = 0 To 3
  Me.size.Add(mp.size(i))
  Me.act.Add(mp.act(i))
Next

で書き換えられるかと思います。


> if(act[0]!=1) act[0]=0; // 入力層の出力関数は線形にセットされます.
act は vector<bool> でしたね。List(Of Boolean) で代用するのであれば、
扱う値は 1 や 0 ではなく、True および False に置き換えてみてください。


> for(int l=0; l<3; l++){
>  for(int i=0; i<size[l]; i++){
>   u[l].push_back(0);
>   x[l].push_back(0);
>   d[l].push_back(0);
>  }
> }
この部分は、たとえばこのように書けます。
For l As Integer = 0 To 3
  For i As Integer = 0 To Me.size(l) - 1
    u(l).Add(0)
    x(l).Add(0)
    d(l).Add(0)
  Next
Next



> void Mlp::Read(istream& is)
> {
>    New(is);
>    for(int l=0; l<2; l++) is >> w[l];
> }
VB では「Is」が予約語になっていますので、is という変数名は
別の名前に変えておいてください。(たとえば stm など)

また、New という部分も、別の名に変えた方が良いでしょう。たとえば、
「void New(~);」を「Sub New(~)」としてしまうと
メソッドではなくコンストラクタの意味になってしまいます。

どうしてもメソッド名として使いたければ、「Sub [New](~)」などのように
予約語を各括弧で囲ってやる必要があります。


> is >> scientific >> mp.eta;
VB の「>>」は算術右シフト演算の意味ですが、
この場合の「>>」は、入力演算子の意味なのでご注意を。

ところで、今回使用しているストリームは何でしょうか?
VB でストリームというと、抽象クラス System.IO.Stream の事であり、たとえば
テキストファイルであれば StreamWriter クラスなどを使って読み書きできます。

また、標準入出力の場合には、Stream 型経由で読み書きする方法の他、
Console.WriteLine() や Console.ReadLine() を使う方法も用意されています。


> is >> scientific >> mp.eta;
ここでいう scientific は "1.234568e+007" などといった
「浮動小数点数の表記に科学的表記法を使う」の意味ですね。

指数表記の文字列を浮動小数点型として扱う場合は、
Dim a As String = "1.234568E+007"
Dim b As Double = CDbl(a)   '12345680.0 に変換される 

のようにして変換できます。

逆に、浮動小数点から指数表記への変換の場合は、"E" の書式指定を使えます。
Dim d As Double = 12345678.9
Dim s1 As String = d.ToString("E")  '"1.234568E+007"に変換される 
Console.WriteLine("{0:E}", d)       '"1.234568E+007"と出力される 
Console.WriteLine("{0:E3}", d)      '"1.235E+007"と出力される