繰り返しの問題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たく

繰り返しの問題

#1

投稿記事 by たく » 18年前

課題に詰まって困っているので投稿させていただきます。

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

box

Re:繰り返しの問題

#2

投稿記事 by box » 18年前

>  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の場合と等しくなります。
そういう答えを求めていますか?

たく

Re:繰り返しの問題

#3

投稿記事 by たく » 18年前

わかりにくくてすみません。
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:繰り返しの問題

#4

投稿記事 by フリオ » 18年前

 
 これでいいのでしょうか。
#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:繰り返しの問題

#5

投稿記事 by たく » 18年前

ありがとうございます。非常に助かります。
int型で作った方がわかりやすくていいですね。

自分の能力の低さが申し訳ないのですが、flagの使われ方がいまいちわかりません。
もう少し詳しく教えていただけると嬉しいです。

たく

Re:繰り返しの問題

#6

投稿記事 by たく » 18年前

放置しててすみません。
無事解決しました。
なんとか課題も提出できました。
解答してくださった方、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る