課題に詰まって困っているので投稿させていただきます。
0≦x≦0.5のとき、x=2x
0.5<x≦1のとき、x=2(1-x)
これを繰り返していって、以前に出たのと同じ答えが出てきたらストップしてその値を返す。(周期を求める感じです。)
という問題を解きたいのですが、正直さっぱりわかりません。
(初期値は0≦x≦1です。)
一応自分で最初の部分を作ってみたのですが、既にこんがらがってきてしまっています。
申し訳ないのですが、手助けしていただけないでしょうか。
#include <stdio.h>
main(){
double x[100];
int i=0,j;
for(x=0;x<1;x+=0.001){
for(j=0;j<100;j++){
if(x<=0.5){
x[i+1]=2*x;
}else if(x>0.5){
x[i+1]=2*(1-x);
}
i++;
}
}
return 0;
}
繰り返しの問題
Re:繰り返しの問題
> 0≦x≦0.5のとき、x=2x
> 0.5<x≦1のとき、x=2(1-x)
y=2xと、y=2(1-x)という式が正しいですか?
> これを繰り返していって、以前に出たのと同じ答えが出てきたらストップしてその値を返す。(周期を求める感じです。)
提示されたコードではxを0から0.001刻みで変化させているようですので、
xが0.501(yが0.998)の場合にxが0.499の場合と等しくなります。
そういう答えを求めていますか?
> 0.5<x≦1のとき、x=2(1-x)
y=2xと、y=2(1-x)という式が正しいですか?
> これを繰り返していって、以前に出たのと同じ答えが出てきたらストップしてその値を返す。(周期を求める感じです。)
提示されたコードではxを0から0.001刻みで変化させているようですので、
xが0.501(yが0.998)の場合にxが0.499の場合と等しくなります。
そういう答えを求めていますか?
Re:繰り返しの問題
わかりにくくてすみません。
x=2xというのは初期値をx0とすると
x1=2*x0, x2=2*x1,・・・
という感じでどんどんxを更新していくことを表したかったんです。
例えば初期値を0.12とすると
x=0.12, 0.24, 0.48, 0.96, 0.08, 0.16, 0.32, 0.64, 0.72, 0.56, 0.88, 0.24, 0.48,・・・
と一定の法則みたいなのが現れるじゃないですか。
以前に出たのと同じ答えが出てきたらストップというのは、そういう意味で書きました。
この場合は答えは0.24というふうに表示したいです。
x=2xというのは初期値をx0とすると
x1=2*x0, x2=2*x1,・・・
という感じでどんどんxを更新していくことを表したかったんです。
例えば初期値を0.12とすると
x=0.12, 0.24, 0.48, 0.96, 0.08, 0.16, 0.32, 0.64, 0.72, 0.56, 0.88, 0.24, 0.48,・・・
と一定の法則みたいなのが現れるじゃないですか。
以前に出たのと同じ答えが出てきたらストップというのは、そういう意味で書きました。
この場合は答えは0.24というふうに表示したいです。
Re:繰り返しの問題
これでいいのでしょうか。
#include <stdio.h> int main(void) { int x, i, j, flag; int p[100]; for(x = 0; x <= 1000; x ++){ p[0] = x; for(flag = i = 0; !flag && i < 99; i ++){ if(p <= 500) p[i + 1] = 2 * p; else p[i + 1] = 2 * (1000 - p); for(j = 0; j <= i; j ++){ if(flag = (p[i + 1] == p[j])){ printf("%.3f(%.3f) ", p[j] / 1000.0, x / 1000.0); break; } } } if((x % 5) == 4) putchar('\n'); } return 0; }
Re:繰り返しの問題
ありがとうございます。非常に助かります。
int型で作った方がわかりやすくていいですね。
自分の能力の低さが申し訳ないのですが、flagの使われ方がいまいちわかりません。
もう少し詳しく教えていただけると嬉しいです。
int型で作った方がわかりやすくていいですね。
自分の能力の低さが申し訳ないのですが、flagの使われ方がいまいちわかりません。
もう少し詳しく教えていただけると嬉しいです。