defineについて – プログラミング – Home

通知
すべてクリア

[解決済] defineについて


佐久間
 佐久間
(@佐久間)
ゲスト
結合: 20年前
投稿: 4
Topic starter  

本当に初心者です。宜しくお願いいたします。いつも、コンソールアプリを利用してコー
ドを書いています。私はよく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
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

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


返信引用
佐久間
 佐久間
(@佐久間)
ゲスト
結合: 20年前
投稿: 4
Topic starter  

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


返信引用
REE
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

a_upが定数でなければいけないような部分が見当たりませんので、
#defineを削除して、以下の様にしたらいかがですか?

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


返信引用
佐久間
 佐久間
(@佐久間)
ゲスト
結合: 20年前
投稿: 4
Topic starter  

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

int param[] = { 1, 2, 5, 10, 15 };
int i;
for ( int i = 0; i < 5; ++i ) {
 int a_up = param[i];
 以下同文
}

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


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

#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];
...
}
とか。


返信引用
佐久間
 佐久間
(@佐久間)
ゲスト
結合: 20年前
投稿: 4
Topic starter  

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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