東京理科大学 infoserv[更新日]2000.5.1


問9 次の Fortran プログラムの説明及びプログラムを読んで,設問に答えよ。

〔プログラムの説明〕

ある 2 種類の金属を組み合わせて熱を加えると起電力が生じる。基準温度を 0 ℃に設定し, 測定温度を 0 ℃から 1,760 ℃まで 10 ℃刻みに変化させて発生した電圧を測定したところ, 温度に対する電圧は 0 ℃のとき 0 ボルトで,常に単調に増加することが分かった。 この実験結果を基にして,10 ℃刻みの温度から電圧を求める表と,0.1 ボルト刻みの 電圧から温度を求める表を作成するプログラムである。

(1) 入力データは,温度 0 ℃から 1,760 ℃まで 10 ℃刻みの温度と電圧を示す 177 対のデータである(図 1)。


図1 入力データ

(2) 温度から電圧を求める表は,図 2 のように温度を 10 ℃刻みで出力する。


図2 温度から電圧を求める表の出力

(3) 電圧から温度を求める表は,0.0 ボルトから 0.1 ボルト刻みで 18.6 ボルトまでの 電圧について,対応する 187 個の温度値を 0.1 ボルト刻みで図 3 のように出力する。


図3 電圧から温度を求める表の出力

(4) ある電圧 v が,実験結果のうち u 番目と(u−1)番目の温度に対応する電圧の間に あるとき,電圧 v に対応する温度の近似値 t は次の式で求める。

                           (u 番目の電圧 − v)×(実験時の温度刻み)
      t = u 番目の温度 − ---------------------------------------------
                             u 番目の電圧 −(u−1)番目の電圧

〔プログラム〕

program netsu_kiden_ryoku
   real :: gyaku_den(0:200), gyaku_on(0:200),       &
     &     sokutei_den(0:200), sokutei_on(0:200)
   real,parameter :: gyaku_den_kizami = 0.1,        &
     &     sokutei_on_kizami = 10.0, saidai_on = 1760.0
   integer :: m, m_saidai, k, n, n_saidai
   n_saidai = 
   do n = 0, n_saidai
      read(*,*) sokutei_on(n), sokutei_den(n)
   end do
   m_saidai = int(sokutei_den(n_saidai) / gyaku_den_kizami)
   write(*,'(t13,10(i3,tr4))')                      &
      & (nint(n * sokutei_on_kizami), n=0,9)
   do n = 0, n_saidai, 10  
      write(*,'(t2,i5,tr2,10f7.3)')  
   end do
   call gyakubiki(sokutei_on, sokutei_den, gyaku_on, gyaku_den)
   write(*,'(////)')
   write(*,'(t9,10f7.1)')                           &
     & (real(n * gyaku_den_kizami), n=0,9)
   do m = 0, m_saidai, 10
      write(*,'(t2,i5,tr2,10f7.1)')                 &
      & nint(gyaku_den(m)), (gyaku_on(k), k=m,min(m+9,m_saidai))
   end do
 
contains
 
   subroutine gyakubiki(x1, y1, x2, y2)
   integer :: k, m, u
   real :: v, x1(0:200), x2(0:200), y1(0:200), y2(0:200)
   x2(0) = 0.0
   y2(0) = 0.0
   u = 1
   do m = 1, m_saidai
      v = m * gyaku_den_kizami 
      y2(m) = v
      do k = u, n_saidai
         if(v <= y1(k)) then
            
            exit
         endif
      end do
      
   end do
   end subroutine gyakubiki
end program netsu_kiden_ryoku

設問 プログラム中の に入れる正しい答えを,解答群の中から選べ。

a に関する解答群

ア int(saidai_on)

イ int(saidai_on) + 1

ウ int(saidai_on/sokutei_on_kizami)

エ int(saidai_on/sokutei_on_kizami) + 1

b に関する解答群

ア n,(sokutei_den(k), k=n, min(n+9,n_saidai))

イ n,(sokutei_den(k), k=n*10, min(n*10+9,n_saidai))

ウ nint(sokutei_on(n)),(sokutei_den(k), k=n, min(n+9,n_saidai))

エ nint(sokutei_on(n)),(sokutei_den(k), k=n*10, min(n*10+9,n_saidai))

c に関する解答群

ア u = k      イ u = k + 1

ウ u = k * 10    エ u = (k + 1) * 10

d に関する解答群

ア x2(m) = u - (u-v)*sokutei_on_kizami

イ x2(m) = x1(u) - (y1(u)-v)*sokutei_on_kizami/(y1(u)-y1(u-1))

ウ x2(m) = y1(u) - (x1(u)-v)*sokutei_on_kizami/(x1(u)-x1(u-1))

エ y2(m) = u - (u-v)*sokutei_on_kizami

オ y2(m) = x1(u) - (y1(u)-v)*sokutei_on_kizami/(y1(u)-y1(u-1))

カ y2(m) = y1(u) - (x1(u)-v)*sokutei_on_kizami/(x1(u)-x1(u-1))


東京理科大学 infoserv 戻る 次頁:問10