平成8年度 秋期 第二種 午後 問13

                        [更新日]1996.11.19
問13 次のFortranプログラムの説明及びプログラムを読んで,設問に答えよ。 〔プログラムの説明〕 実数値を与え,その実数値を二つの整数の比で近似するアルゴリズムがある。 (1) 任意の実数rを二つの整数の比で近似する手順を,r=3.141592を例に説明する。 31 とおけば、 1/r1 = 0.141592 となり r1 ≒ 7.062546 が求まる。同様にして、7<r1<8であるから r1 = 7 + 1/r2 とおけば、 1/r2 = 0.062546 となり r2 ≒ 05.988233 が求まる.この操作を続けることによって整数の数列3,7,15,1,.... 得られる。 3,7,15,1を用いて,実数rの近似値を計算すると r3 ≒ 1 r2 ≒ 15+1/1=16 r1 ≒ 7+1/16=113/16 r ≒ 3+16/113=355/113≒3.141593 が求まる。rの値を整数355と113の比として近似したとき, 真値と近似値の差の絶対値として定義した近似誤差は |r-355/113|≒0.000001 になる。 (2) このプログラムでは、整数n(n=2,3,…,10)の平方根を組込み関数で求め、 その値を近似する二つの整数値及びその近似値を計算して,印字する。このとき 近似誤差が0.00001未満になるまで(1)で説明した操作を繰り返す。 (3)実行結果は図のとおりである。
	n 	近似値 	近似誤差 繰返し回数
	↓	  ↓ 		    ↓      ↓
     +----------------------+-+----------------+
     |  2  577/408=1.4142157| |ERR=0.0000021  8|
     |  3  362/209=1.7320574| |ERR=0.0000066 10|
     |  4    2/  1=2.0000000| |ERR=0.0000000  1|
     |  5  682/305=2.2360656| |ERR=0.0000024  5|
     |  6  485/198=2.4494949| |ERR=0.0000052  6|
     |  7  717/271=2.6457565| |ERR=0.0000051 10|
     |  8  577/204=2.8284314| |ERR=0.0000042  8|
     |  9    3/  1=3.0000000| |ERR=0.0000000  1|
     | 10  721/228=3.1622807| |ERR=0.0000030  4|
     +----------------------+-+----------------+
		領域1	 	    領域2

	 	     図 実行結果

〔プログラム〕

(行番号)
  1	DOUBLE PRECISION R,XA,XB,ER
  2	INTEGER,DIMENSION(20)::MM,MA,MB
  3	PARAMETER (ER=0.00001D0)
  4 100 FORMAT(2I6,'/',I4,'=',F9.7,3X,'ERR=',F9.7,I4)
  5	DO N=2,10
  6	   R=SQRT(DBLE(N))	!近似する実数値
  7	   MM(1)=INT(R)
  8	   MA(1)=MM(1)		!分子
  9	   MB(1)=1		!分母
 10	   XB=MM(l)		!第1近似
 11	   XA=R-XB		!近似誤差
 12	   J=1
 13	   DO WHILE(ABS(R-XB).GE.ER)
 14		J=J+1
 15		XA=1.0D0/XA
 16		MM(J)=INT(XA)
 17		XA=XA-MM(J)
 18		MA(J)=MM(J)
 19		MB(J)=1
 20		DO K=J-1,1,-1
 21			MB(K)=MA(K+1)
 22			MA(K)=MM(K)*MB(K)+MB(K+1)
 23			END DO
 24		XB=DBLE(MA(1))/DBLE(MB(1))	!第J近似
 25		END DO
 26	   WRITE(*,100)N,MA(1),MB(1),XB,ABS(R-XB),J
 27	   END DO
 28	END 


設問 プログラムと実行結果を分析し,次の記述中の〔      〕に入れる正しい答えを,
    解答群の中から選ベ。なお,解答は重複して選んでもよい。

(1)このプログラムの8行目を

	MA(1)=R

   に書き換えてプログラムを実行したとき,図の領域1の印字は書換え前と
   〔   a   〕 結果になる。

(2)元のプログラムの8行目は変更しないで,9行目だけを

	MA(2)=MM(1)

   に書き換えてプログラムを実行したとき,図の領域1の印字は書換え前と〔   b   〕
   結果になる。また,領域2の印字は書換え前と〔   c   〕結果になる。

(3)元のプログラムは2,9,19,21,22,24,29行目を修正すれば,配列MBを使用しないで
   記述できる。21行目を削除し,22行目を

	MA(K)=MM(K)*MA(K+1)+MA(K+2)

   と書き換えたとき,19行目の修正として適切なものは 〔   d   〕 である。

解答群				
  ア MA(J-1)=1		  イ MA(J-1)=MM(J)
  ウ MA(J+1)=1		  エ MA(J+1)=MM(J)
  オ 一部の行が事なる	  カ 全ての行が同じ
  キ すべての行が異なる