この時、状態XがAである確率とBである確率を求めなさい。私も問題の意味が、わからないのですが、私なりに解読してみました。乱数で0か1か発生させる。(確率1/2)次を3000回行う0だった場合は90%の割合で0を発生させ、10%の割合で1を発生させる。1だった場合は60%の割合で0を発生させ、40%の割合で1を発生させる。0になった回数と、1になった回数をカウントする。最初に戻り、1000回繰り返し行う。送信してから思ったのですが、状態遷移を続けて3000回行った後の最終的な値が0か1かを求めるのかも。それを1000回行う。こっちの方が課題として良いと思う。一度、課題を読むとusaoさんの可能性が高い。説明がうまくできていなくてすいませんでした。1、初期状態を乱数を使って、0か1を決定する。2、初期状態を使って、状態遷移確率に従って1000回遷移させる。3、1000回遷移させた結果の状態を確認する。(0か1どちらになっているか)4、1~3を3000回繰り返す。5、1000回遷移させた結果が3000個用意されたので、そこから0と1の数を数える。6、0と1の個数をそれぞれ3000で割って、確率とする。いう方針でおねがいします。期限は来週の水曜日までです。何に困っているのかについては,どんな状態でしょうか.>1、初期状態を乱数を使って、0か1を決定する。~>6、0と1の個数をそれぞれ3000で割って、確率とする。初期状態を乱数を使って、0か1を決定する。ここで,どの確率で0,1になるのですか。結果は変わらないのですが,プログラムを組む上で必要になります。スポイラーを表示オフトピック横道にそれつつ,「初期状態を乱数を使って、0か1を決定する。」の確率が定義されていなくても結果は変わらない,という話を。最初0が出る確率は0.5、1が出る確率も0.50だったとき再び0になるのは0.9なので、0.45、1だったとき0になるのは、0.6なので、0.3従って、最終的に0になるのは、0.45+0.3=0.75かな?初回の試行はそうなります。0.825となります。試行を重ねると,6/7に漸近していきます。乱択アルゴリズムの8章に同じ様な問題が載っていて,数学的にどう解くかが解説されています。どちらの状態になっているかをベクトルとして持ち,1回の試行を行列として表現することによって,行列のべき乗を求める問題に帰着させています。0.6)とき,an=q/(p+q)+p(a0-b0)(1-p-q)n/(p+q)となります。ため,0に近似してしまいます。すると,an=q/(p+q)と,nに依らなくなります。手で展開したので間違っていたらごめんなさい。,(1-p-q)nの項は元の式にあるので結論は変わりません。0.6/(0.1+0.6)=6/7なので,だいたい0.857くらいの確率で状態0になるはずです。実際にコードを書くと,その辺りになります。最初に初期状態の確率が定義されていなくても結果は変わらない,と書いたのは,15回程度試行すると初期値の差が理論値上は無視できる程度の差にしかならないためです。1000回も繰り返せば,初期値の差から来る理論値上の差は計算機の誤差の中に消え去ってしまいます。a,bを求めて3000で割って出力する。0;}かなり穴あきなものになってますし、おかしな点があれば教えてください。状態遷移をどのように行えば良いかが分かりません。0と1の個数をどのようにして求めるのかという点で困ってます。結果に変動がないのであれば任意で構わないと思います。6年前コードはCです。使いこなせてなくて変な風になってすいません。「a/3000」「b/3000」だと、整数の割り算になって切り捨てられます。「a/3000.0」「b/3000.0」としてください。どこのサイトを使って、あるいはどの本を読んで勉強したら、そういった字下げのコードを書くようになるのか、大いに興味があります。個人的には、読みにくくて仕方がありません。興味がおありでしたら、他の質問者さんへの回答として私が示した字下げの方法をごらんになってみてください。それはあくまで私個人の流儀(だから、他の人の流儀とは異なる場合あり)であり、かつ、私の流儀を押しつけるつもりはありません。バグのないプログラムはない。プログラムは思ったとおりには動かない。見にくいコードですいません。普段、字下げなどを気にして書いていませんでした。誰が見てもわかりやすいコードを書かなければいけませんね。コードを書く際には字下げにも気をつけるようにします。ご指摘ありがとうございました。printf("1000回目は状態Aです。printf("1000回目は状態Bです。0;}とりあえずプログラム作成しましたが、これでは”1000回目は状態Aです。状態Bになることがありません。どこを直せばいいでしょうか。他にもまずい所は多そうですね。6年前たいちうさん、ありがとうございます。何度か実行しているうちに状態Bにもなりました。状態Bになる確率が結構低そうですね。途中経過が予想通りか確認するなどのデバッグの工夫をしましょう。上達したいならば、(筋道を立てて)できる限りの事をしてから質問です。欲を言うと、できる限りの事+αをしてからですね。半分は自分に言っているみたいなほろ酔いのたいちうでした。0;}][/code]usaoさんのアドバイスに従って作ってみました。大丈夫だと思うのですが、どこか問題点があればご指摘ください。上達するためにもしっかりとやっていきたいと思います。たいちうさん、ありがとうございました。以下が正解になります。どんな質問にも答えますので、分からない点があれば教えてください。状態Aか状態Bかを調べて加算します。何か入力があると終了しますrewind(stdin);getchar();}ただの超絶右留斗羅天才プログラマーです。6年前>どこか問題点があればご指摘ください。...とか,コメントを添えてしまうかもしれませんwその他の点では,コードをざっと眺めた感じだと,特に問題無いように見えます.(本当は,理論値と同程度の結果が出てくるかどうか見ればいいんだろうけど,理屈の上でどの程度の値が出てくることになるのかが,私にはわからんですw)>どうも状態Bになる確率が結構低そうですね。)おかげで無事に完成しました。)おかげで無事に完成しました。ミクプラは自由にリンクできます。