下記をもっと簡単に出来ないか。。。 – プログラミング – Home

下記をもっと簡単に出来ないか。。。
 
通知
すべてクリア

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


かず
 かず
(@かず)
ゲスト
結合: 23年前
投稿: 62
Topic starter  

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];
}


引用解決済
トピックタグ
気分屋
 気分屋
(@気分屋)
ゲスト
結合: 19年前
投稿: 15
 

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];


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

5 * Amp[ s ] は for( s = 0; s < 100; s++ ) の直後で計算するのがオススメ。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

というか、
> if (es[0] == '1')
の判定文をfor文の外に出すべきかと。

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


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> の判定文を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
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

もしかすると、最初の投稿のソースは外側のループの終端の括弧が無いので
内側のループと終端と外側のループの終端の間にあるのかもしれませんね。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました