下記をもっと簡単に出来ないか。。。

[戻る]
かず 2006/01/04(水) 10:11:51
VC++6です。
下記を簡略化できないでしょうか?

int  PF;
int  s,L;
int  es[4];
int  MA[512];
double Ampl[117];
int    VS11[117],VS12[117],,,,VS18[117].VS19[117];

for (s=0;s<100;s++)
  for (L=0;L<117;L++)
  { 
   if (es[0] == '1')
                MA[PF] = 5*Amp[s]*VS11[L];
   if (es[0] == '2')
                MA[PF] = 5*Amp[s]*VS12[L];
   if (es[0] == '3')
                MA[PF] = 5*Amp[s]*VS13[L];
   if (es[0] == '4')
                MA[PF] = 5*Amp[s]*VS14[L];
   if (es[0] == '5')
                MA[PF] = 5*Amp[s]*VS15[L];
   if (es[0] == '6')
                MA[PF] = 5*Amp[s]*VS16[L];
   if (es[0] == '7')
                MA[PF] = 5*Amp[s]*VS17[L];
   if (es[0] == '8')
                MA[PF] = 5*Amp[s]*VS18[L];
   if (es[0] == '9')
                MA[PF] = 5*Amp[s]*VS19[L];
  }

気分屋 2006/01/04(水) 10:21:45
VSを二次元配列にしていいなら

int  PF;
int  s,L;
int  es[4];
int  MA[512];
double Ampl[117];
int    VS[9][117];

for (s=0;s<100;s++)
  for (L=0;L<117;L++)
    if (es[0] >= 1 && es[0] <= 9 )
      MA[PF] = 5*Amp[s]*VS[es[0]-1][L];

シャノン 2006/01/04(水) 13:16:21
5 * Amp[ s ] は for( s = 0; s < 100; s++ ) の直後で計算するのがオススメ。

Blue 2006/01/04(水) 13:21:51
というか、
> if (es[0] == '1')
の判定文をfor文の外に出すべきかと。

> int  es[4];
int型配列なのに文字リテラルで比較しているというのはなぜでしょうか?

Blue 2006/01/04(水) 13:30:07
> の判定文をfor文の外に出すべきかと。
あ〜ダメですね。
気分屋さんの指摘のように 2次元配列 を前提にしなければ結局分岐させなきゃダメで
すから。

int temp;
int index;

if ( es[ 0 ] >= '1' && es[ 0 ] <= '9' )
{
    index = es[ 0 ] - '1';
    for ( s = 0; s < 100; s++ )
    {
        temp = 5 * Amp[ s ];
        for ( L = 0; L < 117; L++ )
        {
            MA[ PF ] = temp * VS[ index ][ L ];
        }
    }
}

みたいに。

ところで、PFの値が変化していないのですが、
折角計算した値を、更新し続けてよいのでしょうか?

PATIO 2006/01/04(水) 14:14:43
もしかすると、最初の投稿のソースは外側のループの終端の括弧が無いので
内側のループと終端と外側のループの終端の間にあるのかもしれませんね。

もっとも、PFの初期化もされていないようだし、
このソースをそのまま解釈してしまって良い物か分かりかねますね。
省略するにしても最低限、アルゴリズムがわかるような省略にしないと
本題とは関係ないところで突っ込まれる事になりますので、注意した方が良いです。

古いスレッドには追加発言できません。