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];
}
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];
5 * Amp[ s ] は for( s = 0; s < 100; s++ ) の直後で計算するのがオススメ。
というか、
> if (es[0] == '1')
の判定文をfor文の外に出すべきかと。
> int es[4];
int型配列なのに文字リテラルで比較しているというのはなぜでしょうか?
> の判定文を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の値が変化していないのですが、
折角計算した値を、更新し続けてよいのでしょうか?
もしかすると、最初の投稿のソースは外側のループの終端の括弧が無いので
内側のループと終端と外側のループの終端の間にあるのかもしれませんね。
もっとも、PFの初期化もされていないようだし、
このソースをそのまま解釈してしまって良い物か分かりかねますね。
省略するにしても最低限、アルゴリズムがわかるような省略にしないと
本題とは関係ないところで突っ込まれる事になりますので、注意した方が良いです。