defineについて

[戻る]
佐久間 2004/11/26(金) 15:12:57
本当に初心者です。宜しくお願いいたします。いつも、コンソールアプリを利用してコー
ドを書いています。私はよくdefineで定義されたパラメータを手動で変化させているので
すがとても効率が悪いです。defineで定義されたパラメータを自動に設定できるような方
法がありましたらどうかご教授いただけませんか。
たとえば、a_upが1 3 5のときのアベレージを得ることが出来るようにしたいです。私は
この場合もいつも手動です。どうか、ご教授ください。お願いいたします。
開発環境:windows xp pro vc++6.0 コンソールアプリケーション
#include<stdio.h>
#include<math.h>

#define inp 5 

#define n_ave 5 
#define a_up 1

double inp_ex[inp];
double inp_ex2[inp];
double inp_1[n_ave][inp];
double ave_inp[inp];
int main(){
    int i;
    for(i=0; i<inp ; i++)
    {
        inp_ex[i]=i+1;
    }
    
    double a=0;    
    for(int j=0; j<n_ave ;j++)
    {
        
        for(i=0; i< inp ; i++)
        {
            a=a+a_up;
            
            inp_ex2[i]=a*inp_ex[i];
            inp_1[j][i]=inp_ex2[i];//get
            printf(: %lf %lf\n",inp_1[j][i],a);
        }
        
        printf("\n");
        
        
    }
    
    
    
    for(i=0; i< inp ; i++)
    {
        double in_d=0;
        for(int j=0; j<n_ave ;j++)
        {
            in_d +=inp_1[j][i];
        }
        ave_inp[i]=in_d/(n_ave);
        printf("平均=%lf\n",ave_inp[i]);
        
    }
    return 0;
    
    
}

Ban 2004/11/26(金) 15:46:03
固定長配列をやめて new/malloc 等でメモリを取るようにすれば
サイズが動的に引数で渡せるようになりますから、
あとは数を main の引数にするなり、関数の引数にするなりして、
プロセスを複数回起動/関数を複数回実行すればよいと思います。

佐久間 2004/11/26(金) 15:59:24
Ban様、アドバイス有難うございます。もしよろしければ、簡単な例題で教えていただけ
ないでしょうか。main の引数にするなり、関数の引数にするといったテクニックが理解
しにくいです。どうか、宜しくお願いいたします。

REE 2004/11/26(金) 16:17:39
a_upが定数でなければいけないような部分が見当たりませんので、
#defineを削除して、以下の様にしたらいかがですか?

int main(){
    int i, a_up;
    for(a_up = 1; a_up <=5; a_up+=2)
    {
       (今までの中身)
    }
    return 0;
}

佐久間 2004/11/26(金) 16:34:20
REE様、ご返信有難うございます。
REE様のアドバイスのようにforループを用いるときもあります。
今回は、パラメータが少ないということでそれで問題ないのですが、パラメータが多くな
るケースやパラメータを 1 2 5 10 15 のような間隔で変化させるときに困っていま
す。
パラメータ:1 2 5 10 15のようなケースで実行する、といった自動化を図りたいです。
これに対応できるような考えがどうも思いつきません。
パラメータをコントロールするいい方法がありましたら教えていただきたいです。
宜しくお願いいたします。

επιστημη [E-Mail] [HomePage] 2004/11/26(金) 16:39:58
int param[] = { 1, 2, 5, 10, 15 };
int i;
for ( int i = 0; i < 5; ++i ) {
 int a_up = param[i];
 以下同文
}

# 少しでいいから考えましょう。

tetrapod 2004/11/26(金) 16:40:52
#define ELEM(n) (sizeof(n)/sizeof((n)[0]))
static int const paramtable[]={ 1, 2, 5, 10, 15 };
for (i=0; i<ELEM(paramtable); ++i) {
  a_up=paramtable[i];
  ...
}
とか。

佐久間 2004/11/26(金) 17:06:35
[[解決]]
int param[] = { 1, 2, 5, 10, 15 };
このようなアイデアが出てきませんでした。
感動しました。
皆様方有難うございました。
forループばかり使っているので、少し違った方法がないかと考えていました。
でも、forループですね。
本当に有難うございました。

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