ページ 1 / 1
defineについて
Posted: 2011年6月09日(木) 20:21
by clr
defineを使ったfor文を試してみたのですが、
以下のコードを実行すると数字が延々と表示されて上手くいきません。
間違っているところを教えていただきたいです。
OSはmac10.6でxcodeを使っています。
コード:
#include<stdio.h>
#include<math.h>
#define f(x) (a/2.0)*(exp(x/a)+exp(-x/a))
#define LOWER -1.0
#define UPPER 1.0
#define STEP 0.1
main(){
double a=1.0,x;
for(x=LOWER;x<=UPPER;x=x+STEP){
printf("%f\n",f(x));
}
}
Re: defineについて
Posted: 2011年6月09日(木) 21:13
by bitter_fox
clr さんが書きました:
以下のコードを実行すると数字が延々と表示されて上手くいきません。
「数字が延々と表示されてうまくいきません」とありますが、上手くいくの基準が分かりませんので、どういった出力を得られれば上手くいったのかを教えていただけますか?
詳しくは
フォーラムルールをお読みください。
Re: defineについて
Posted: 2011年6月09日(木) 21:21
by setton
ためしにコンパイルしてみましたが…
うまく行きましたよ?
実行結果は以下の通りです。
1.433086
1.337435
1.255169
1.185465
1.127626
1.081072
1.045339
1.020067
1.005004
1.000000
1.005004
1.020067
1.045339
1.081072
1.127626
1.185465
1.255169
1.337435
1.433086
1.543081
一応こうなりましたが、コメントも何もないので、あなたがどのような動きを期待して造ったのかが分かりません。
これで期待通りの動きですか??
Re: defineについて
Posted: 2011年6月09日(木) 21:27
by clr
>>bitter_foxさん
すみません。
x=LOWERからxをSTEP刻みでx=UPPERとなるまで増やして、それぞれでf(x)(カテナリー曲線)の値を表示させたい
(定義域が[LOWER,UPPER]で、f(LOWER)を表示、f(LOWER+STEP)を表示、f(LOWER+STEP+STEP)...を表示させたい)
のですが、エンドレスに数字が出力されるといった感じです
>>settonさん
そうです、そのような感じに出力したいです。
でもやっぱりエンドレスに数字が出力されるんですよね…
Re: defineについて
Posted: 2011年6月09日(木) 21:32
by box
clr さんが書きました:
でもやっぱりエンドレスに数字が出力されるんですよね…
そういうとき、私だったら、f(x)の値だけではなくxの値も出力してみることをまず考えます。
Re: defineについて
Posted: 2011年6月09日(木) 21:37
by clr
ここに投稿したコードをコピペして、もう一回実行したら上手くいきました。
なんでさっきまでは上手く行かなかったんだろう…
>>boxさん
なるほど…、終了条件にxが絡んでるからですかね。
参考にします。
Re: defineについて
Posted: 2011年6月09日(木) 21:44
by clr
あまり腑に落ちないのですが、結果がちゃんと出力されたので解決としておきます。
Re: defineについて
Posted: 2011年6月09日(木) 21:56
by ISLe
ありがちなのは
for(x=LOWER;x != UPPER;x=x+STEP){
というふうになっているときですね。
Re: defineについて
Posted: 2011年6月09日(木) 23:06
by clr
>>ISLeさん
何回も見直したので、コードはここに投稿したものと全く同じだったはずなんですよね…
xcodeに問題があったのかもしれません