平成7年度 春期 第二種 午後 問9

                        [更新日]1995.06.29
問9 次のFORTRANプログラムの説明及びプログラムを読んで、設問1、2 に答えよ。 [プログラムの説明] バクテリアが分裂・死亡を繰り返して、個体数を増減させていく過 程をシミュレーションする。この過程では、次のような条件を前提と している。 [条件] 1分経過するごとに、各バクテリアは、互いに関連をもつこ となく、次のいずれかの状態になる。 ・死亡する ・分裂しないでそのまま(1個のまま) ・複数に分裂する(2〜4個になる) 1個の個体は0〜4個になるが、1分経過後にそれぞれの個 数になる確率Pは、表のように与えられている。 表 各個数になる確率 ┌────┬──┬────┐ │状  態│個数│ 確率 │ ├────┼──┼────┤ │死  亡│ 0│ 0.3│ ├────┼──┼────┤ │そのまま│ 1│0.25│ ├────┼──┼────┤ │    │ 2│ 0.2│ │    ├──┼────┤ │分  裂│ 3│0.15│ │    ├──┼────┤ │    │ 4│ 0.1│ └────┴──┴────┘ 以上の過程を0≦x<1の値をとる一様乱数xを用いてシミュレーショ ンする。 1分後の個数を区間[0,1)の一様乱数から決めるために、この区間を 図1のように分ける。乱数が区間1に入れば0個、区間2に入れば1個、 …とみなすことによって、表の確率でバクテリアの分裂のシミュレー ションが行える。       区間1  区間2   区間3    区間4  区間5 比率:   0.3   0.25    0.2     0.15   0.1    |---------+---------+---------+---------+---------|    0.0                          1.0 個数   0     1      2     3     4              図1 区間[0,1)の分け方 最初の10分間のシミュレーションの結果を、図2のように1分ごと (T=1〜10)の値でグラフに描く。*の1個はバクテリア10個(端数切 捨て)を表し、左側の数値は、経過時間(分)とバクテリアの個数を 表す。なお、最初(T=0)にバクテリアは10個いるものとする。 また、状態の出現確率を確かめるために、図3に示すようなヒストグ ラムを描く。左側の数値は1分後の個数とその個数になった回数の合計 を示す。 バクテリア ノ ソウスウ +---------+---------+---------+---------+---------+ 1 20 ** 2 25 ** 3 37 *** 4 48 **** 5 85 ******** 6 112 *********** 7 183 ****************** 9 293 ***************************** 10 689 ************************************************** +---------+---------+---------+---------+---------+ 0 100 200 300 400 500 図2 バクテリアの総個数の変化例 また、状態の出現確率を確かめるに、図3に示すようなヒストグラム を描く シュツゲン カイスウ ヒストグラム +---------+---------+---------+---------+---------+ 0 378 ############################## 1 307 ######################## 2 263 ##################### 3 193 ############### 4 136 ########### +---------+---------+---------+---------+---------+ 0 10 20 30 40 50 % 図3 一分後の個数のヒストグラム例 プログラム中のサブルーチン副プログラムSEEDは乱数発生の初期値 を設定し、RANDOMは区間[0,1)の一様乱数を引数で返すものとする。 [プログラム] REAL D(5) INTEGER T,NT,NB(5),NBT [ a ] N=10 CALL SEED(197) DO J=1,5 NB(J)=0 END DO WRITE (*,*) 'バクテリア ノ ソウコスウ ' WRITE (*,10) DO T=1,10 NT=0 DO K=1,N CALL RANDOM(X) J=1 DO WHILE ([ b ]) J=J+1 END DO NB(J)=NB(J)+1 NT=[ c ] END DO N=NT WRITE(*,20) T,N,[ d ] END DO WRITE (*,10) WRITE (*,30) (J,J=0,500,100) WRITE (*,*) 'シュツゲンカイスウ ヒストグラム' WRITE (*,10) NBT=0 DO J=1,5 NBT=NBT+NB(J) END DO DO J=1,5 WRITE (*,20) J-1,NB(J),('#',L=1,NINT((100.0*NB(J))/NBT)) END DO WRITE (*,10) WRITE (*,40)(J,J=0,50,10) 10 FORMAT(11X,'+',5('---------+')) 20 FORMAT(I5,1X,I5,1X,50A1) 30 FORMAT(2X,6I10) 40 FORMAT(2X,6I10,'%') END 設問1 プログラム中の[ a ]〜[ c ]に入れる正しい答えを、解 答群の中から選べ。 aに関する解答群 ア DATA D/0.3,0.55,0.75,0.9,1.0/ イ DATA D/1.0,0.9,0.75,0.55,0.3/ ウ DATA D/0.0,0.3,0.55,0.75,0.9/ エ DATA D/0.3,0.25,0.2,0.15,0.1/ オ DATA D/0.9,0.75,0.55,0.3,0.0/ bに関する解答群 ア D(J).LE.X.AND.X.LT.D(J+1) イ X.GE.D(J) ウ D(J-1).LT.X.AND.X.LE.D(J) エ D(J).GT.X オ D(J-1).LE.X.AND.X.LT.D(J) cに関する解答群 ア NT+J イ NT+J-1 ウ NT+J+1 エ J オ J+1 設問2 バクテリアの総個数をグラフで表示するのに、10個分を1個の*で表 したい。また、横の長さが限られているので、*が50個を越えたときで も50個までしか印字しないようにする。プログラム中の[ d ]に 入れるものとして、間違っている答えを、解答群の中から選べ。 解答群 ア ('*',L=1,MIN(500,N)/10) イ ('*',L=1,MIN(50,N/10)) ウ ('*',L=1,MAX(N/10,50)) エ ('*',L=1,(N/10-DIM(N/10,50)))
戻る 次頁:問10