問9 次のFortranプログラムの説明及びプログラムを読んで,設問に答えよ。 [プログラムの説明] 方程式ax2+bx+c=0の係数a,b,cを入力して,解を求めるプログラムである。 (1) このプログラムでは,最初に2次の係数aを調べる。 c a=0のとき,b≠0なら解は一つであり,- ――となる。 b a=0のとき,b=0なら“error”を出力する。 a≠0のとき,解は二つであり,次式で与えられる。 ___ -b±\/b2-4ac ――――――― 2a ここで, -b c E=(――)2 - ―― 2a a とすると, ___ -b±\/b2-4ac -b _ ―――――――=――±√E 2a 2a となる。 (2) E>0のとき,一方の解の絶対値が,もう一方に比べて非常に小さい場合は, 二つの解を(1)に従ってそのまま計算すると,けた落ちが生じることがある。 そこで,プログラムでは,このけた落ちを防ぐために,一方の解x1を式 -b _ -b x1=――+√E (―― が正又は0のとき) 2a 2a -b _ -b x1=―― -√E (―― が負のとき) 2a 2a で求め,もう一方の解x2を,解と係数の関係を利用して,次式で求める。 c ―― a x2=――― x1 -b __ (3) E<0のとき,二つの解は複素数解であり ―― と√|E| とを別々に計算して, 2a 二つの解 -b __ x1=――+√|E| i 2a -b __ x2=―― -√|E| i 2a を求める。 -b (4) E=0のとき,解は重解であり,二つの解をx1=x2= ―― として求める。 2a [プログラム] (行番号) 01 real a,b,c,e,se,x1,x2,e1,e2 02 read(5,100) a,b,c 03 if(a /= 0.0) then 04 e1 = -b/(2.0*a) 05 e2 = c/a 06 e = e1**2-e2 07 if(e >= 0.0) then 08 if([ a ]) then 09 se = sqrt(e) 10 if([ b ]) then 11 x1 = e1+se 12 else 13 x1 = el-se 14 end if 15 [ c ] 16 else 17 [ d ] 18 x2 = x1 19 end if 20 write(6,200) x1,x2 21 else 22 se = sqrt(-e) 23 write(6,210) e1,se,e1,se 24 end if 25 else if(b /= 0.0) then 26 x1 = -c/b 27 write(6,220) x1 28 else 29 write(6,230) 30 end if 31 100 format(3f12.6) 32 200 format(10x, 'x1 = ',e14.7 /& 33 & 10x, 'x2 = ',e14.7 ) 34 210 format(10x, 'x1 = ',e14.7,' + ',e14.7,'i'/& 35 & 10x, 'x2 = ',e14.7,' - ',e14.7,'i' ) 36 220 format(10x, 'x1 = ',e14.7,5x,'single root') 37 230 format(10x, 'error') 38 end 設問 プログラム中の[ ]に入れる正しい答えを,解答群の中から選ベ。 a,bに関する解答群 ア e < 0.0 イ e == 0.0 ウ e > 0.0 エ e1 < 0.0 オ e1 == 0.0 カ e1 >= 0.0
c,dに関する解答群 ア x1 = e1 イ x1 = e2 ウ x2 = e1/x1 エ x2 = e2/x1 オ x2 = e1*x1 カ x2 = e2*x1