program daikeisoku
! 台形則練習
! int^1_0 3x^2 dx の計算
! 分割数100と中間則を合わせたものが、分割数200と一致することを確認する

! 2010/07/22 takayasu 作成
!      07/26 takayasu 更新
!      07/27 takayasu 更新

implicit none

real(8) :: int100 , int200
real(8) :: j100 , x , h , a , b
integer :: i , N

! 積分区間は実数で与えないとおかしいよ!
 b = 1.0d0
 a = 0.0d0
! 分割数
 N = 100
! 一つあたりの幅
! 他の文字を使って定義される文字は最後に回す!
 h = (b-a)/N

!!!!!!!!!!!!!!! 分割数100の積分値を出力 !!!!!!!!!!!!!!!

open(100, file='daikeisoku1.out')
read(100,*) int100

write(*,*) "100分割の場合の積分値は" , int100

close(100)

!!!!!!!!!!!!!!! 分割数200の積分値を出力 !!!!!!!!!!!!!!!

open(100, file='daikeisoku2.out')
read(100,*) int200

write(*,*) "200分割の場合の積分値は" , int200

close(100)

!!!!!!!!!!!!!!! 分割数100の積分値 + 中点則 !!!!!!!!!!!!!!!

do i=1 , N
 x = a + ((i - (1.0d0/2.0d0))*h)
 j100 = j100 + 3.0d0*x**2.0d0
enddo

j100 = h*j100

j100 = (int100 + j100) /2.0d0

write(*,*) "100分割での積分値と中点則の平均は" , j100

open(100, file='daikeisoku3.out')
write(100,*) "100分割の場合の積分値は" , int100
write(100,*) "200分割の場合の積分値は" , int200
write(100,*) "100分割での積分値と中点則の平均は" , j100
close(100)

end program daikeisoku
