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

                        [更新日]1996.06.04
問13 次のFortranプログラムの説明及びプログラムを読んで,設問1〜4に答えよ。 〔プログラムの説明〕 次のn元連立一次方程式を解くサブルーチン副プログラムである。 a111+al22+ … + a1nn=a1,n+1211+a222+ … + a2nn=a2,n+1 : an11+ann2+ … + annn=an,n+1 プログラムでは,連立一次方程式の元の数nは変数numで与えられ,係数と定数 項は配列aで与えられる。係数は配列の第1列から第num列までであり,定数項は 第(num+1)列になっている。なお,nは100以下とする。 〔プログラム〕 1 subroutine gauss(a,num) 2 integer k,n,num,num_ichi,m,mgyo,knum,knum_ichi 3 real a(100,101),p,gmax,w 4 num_ichi=num+1 5 do k=1,num 6 p=a(k,k) 7 do m=k+1,mum_ichi 8 a(k,m)=a(k,m)/p 9 end do 10 do n=1,num 11 if(n.ne.k) then 12 p=a(n,k) 13 do m=k+1,num_ichi 14 a(n,m)=a(n,m)-p*a(k,m) 15 end do 16 end if 17 end do 18 end do 19 end 設問1 このサブルーチン副プログラムの動作確認のために,次の連立一次方程式を テストデータに用いたとき,サブルーチン実行前の配列aの内容として,正し い答えを解答群の中から選ベ。 2x + y = 4 x − y = −l 解答群 ┌─────┬─────────────────┐ │ │ 配列要素の値 │ │ 配列要素 ├──┬──┬──┬──┬──┬──┤ │ │ ア │ イ │ ウ │ エ │ オ │ カ │ ├─────┼──┼──┼──┼──┼──┼──┤ │ a(0,0)│ 2│ 2│ 4│ │ │ │ │ a(0,1)│ 1│ 1│ 2│ │ │ │ │ a(0,2)│ 4│ │ 1│ │ │ │ │ a(1,0)│ 1│ 1│ −1│ │ │ │ │ a(1,1)│ −1│ −1│ 1│ 2│ 2│ 4│ │ a(1,2)│ −1│ │ −1│ 1│ 1│ 2│ │ a(1,3)│ │ │ │ 4│ │ 1│ │ a(2,0)│ │ 4│ │ │ │ │ │ a(2,1)│ │ −1│ │ 1│ 1│ −1│ │ a(2,2)│ │ │ │ −1│ −1│ 1│ │ a(2,3)│ │ │ │ −1│ │ −1│ │ a(3,1)│ │ │ │ │ 4│ │ │ a(3,2)│ │ │ │ │ −1│ │ └─────┴──┴──┴──┴──┴──┴──┘ 設問2 設問1で用いた連立一次方程式について,サブルーチン実行後の配列aの内 容として,正しい答えを解答群の中から選ベ。なお,この連立一次方程式の 解はx=1,y=2である。 解答群 ┌─────┬───────────────────────┐ │ │ 配列要素の値 │ │ 配列要素 ├──┬──┬──┬──┬──┬──┬──┬──┤ │ │ ア │ イ │ ウ │ エ │ オ │ カ │ キ │ ク │ ├─────┼──┼──┼──┼──┼──┼──┼──┼──┤ │ a(0,0)│ 1│ 1│ 2│ 2│ │ │ │ │ │ a(0,1)│ 0│ 0│ 0.5│ 1│ │ │ │ │ │ a(0,2)│ 1│ │ 1│ │ │ │ │ │ │ a(1,0)│ 0│ 0│ 1│ 0.5│ │ │ │ │ │ a(1,1)│ 1│ 1│-1.5│-1.5│ 1│ 1│ 2│ 2│ │ a(1,2)│ 2│ │ 2│ │ 0│ 0│ 0.5│ 1│ │ a(1,3)│ │ │ │ │ 1│ │ 1│ │ │ a(2,0)│ │ 1│ │ 1│ │ │ │ │ │ a(2,1)│ │ 2│ │ 2│ 0│ 0│ 1│ 0.5│ │ a(2,2)│ │ │ │ │ 1│ 1│-1.5│-1.5│ │ a(2,3)│ │ │ │ │ 2│ │ 2│ │ │ a(3,1)│ │ │ │ │ │ 1│ │ 1│ │ a(3,2)│ │ │ │ │ │ 2│ │ 2│ └─────┴──┴──┴──┴──┴──┴──┴──┴──┘ 設問3 次の連立方程式のうち,このサブルーチン副プログラムのテストデータに用 いると,プログラム実行中に実行時エラーが起こるものを,解答群の中から選 ベ。なお,解答群の連立方程式は,どれも一組の解が存在する。 解答群 ア 10x + 9y − 7z=−56 イ 10x − 7z =−56 2x + 3y −18z= 81 2x + 3y −18z = 81 44x +76y + 2z= 1 44x + 2z = 1 ウ 9y − 7z=−56 エ 10x + 9y − 7z =−56 2x + 3y −18z= 81 3y = 81 44x +76y = 1 44x +76y + 2z = 1 オ 10x + 9y =−56 カ 10x =−56 2x + 3y −18z= 81 2x + 3y = 81 76y + 2z= 1 44x +76y + 2z = 1 設問4 設問3のように実行時エラーになる連立一次方程式でも,下のプログラムを サブルーチン副プログラムのある箇所に挿入すると,実行時エラーにはならず に正しく解を求めることができる。サブルーチン副プログラムgaussのどこに 挿入すればよいか,正しい答えを解答群の中から選ベ。 1 gmax=0.0 2 do knum=k,num 3 if(abs(a(knum,k)).gt.gmax) then 4 gmax=abs(a(knum,k)) 5 mgyo=knum 6 end if 7 end do 8 if(gmax.le.0.00001) then 9 print*,' error (gmax < 0.00001)' 10 exit 11 end if 12 if(mgyo.ne.k) then 13 do knum_ichi=k,num_ichi 14 w=a(k,knum_ichi) l5 a(k,knum_ichi)=a(mgyo,knum_ichi) 16 a(mgyo,knum_ichi)=w 17 end do 18 end if 解答群 ア 5行目と 6行目の間 イ 6行目と 7行目の間 ウ 7行目と 8行目の間 エ 10行目と11行目の間 オ 13行目と14行目の間