• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:この問題、どのように解けばよいですか?)

中心極限定理のシミュレーション問題: 解法とプログラムの作り方

このQ&Aのポイント
  • 乱数表から数を抽出し、それに応じた変換を行う問題です。
  • プログラミング知識がなくてもFORTRAN77を使ったプログラムで解けます。
  • 50回の繰り返しを行い、変換した数25個の平均値をグラフで表示します。

質問者が選んだベストアンサー

  • ベストアンサー
  • wolv
  • ベストアンサー率37% (376/1001)
回答No.1

プログラムの概要は ------------------------------------------------------------ for i=1,50 #25回の抽出作業 #平均値の計算 #平均値を出力 next i ------------------------------------------------------------ のようになります.#部分は数行ずつ必要になります. まず,「#25回の抽出作業」の部分は, ------------------------------------------------------------ sum=0 for j=1,25 #数値の00から99の数値を無作為に抽出→xとする. #xを変換しyとする sum=sum+y next j ------------------------------------------------------------ となります.「#平均値の計算」と「#平均値の出力」は, ------------------------------------------------------------ ave=sum/25 write "F16.8",ave ------------------------------------------------------------ のようになります.write文の書式は記憶違いしているかもしれないので, furenntirappuさんの知識をもとにして,必要なら修正してください. さて, #数値の00から99の数値を無作為に抽出→xとする. の部分ですが, 0から1の乱数を取り出す関数ってありませんか?忘れてしまいましたが. その値を百倍し,整数部分だけとりだせば,00から99のうちの一つになります. あとは, if文で0<=x かつx<=49ならy=1 if文で50<=x かつx<=79ならy=2 if文で80<=x かつx<=99ならy=3 をそのまま書いてyに変換すれはよいです. 以上まとめると, ------------------------------------------------------------ for i=1,50 sum=0 for j=1,25 0から1の乱数を取り出し百倍して整数化する. if文で0<=x かつx<=49ならy=1 if文で50<=x かつx<=79ならy=2 if文で80<=x かつx<=99ならy=3 sum=sum+y next j ave=sum/25 write "F16.8",ave next i ------------------------------------------------------------ fortranの文法をよく覚えていないので,適当に修正してください. グラフ化もfortranでやるのなら,「write "F16.8",ave」 の部分に少し工夫が必要です.

furenntirappu
質問者

お礼

質問してから早い時間にありがとうございました。おかげでできました、さすがにグラフまではできませんでしたが。ちなみに少し修正させていただくとwrite(*,*)でforはdoになります。

その他の回答 (1)

  • wolv
  • ベストアンサー率37% (376/1001)
回答No.2

グラフの表示は,例えば    0    1    2    3  1:       *  2:     *  3:         *      : 25:         * というように,折れ線グラフの線のないものを縦にしたようなグラフを書くのが 一番簡単です. ------------------------------------------------------------ write "F16.8",ave ------------------------------------------------------------ のかわりに, ------------------------------------------------------------ 文字列のクリア(string=""など) for k=1,int(ave*10)-1 文字列=文字列+” ” next k 文字列=文字列+”*” write 文字列 ------------------------------------------------------------ のようなことをやればグラフになります. for文を使って,ave(の10倍)の長さに相当する文字列を作り, それを表示してます. 特定の長さの文字列を生成する関数があったかもしれませんが, 自信がないので,あえて自分で作ってみました. ------------------------------------------------------------ この他に, 配列などを利用して度数分布を計算し,50回の作業が終わったところで 一気にグラフとして出力することも考えられます.

関連するQ&A