program oneyen

implicit none

real(8) , allocatable :: mekata(:)  ! 30 枚の 1 円玉の目方データを格納した配列
real(8) :: average                  ! 平均値 \bar{x}
real(8) :: sum                      ! 部分和
real(8) :: sumsum                   ! 2 乗の和
real(8) :: disper                   ! 分散 v
integer :: nmax                     ! データ数
integer :: ix                       ! do ループ変数
integer :: fi                       ! 入力ファイル番号


!-------- 初期化 ---------!

nmax = 30
!write(*,*) 'input data number'
!read(*,*) nmax
allocate ( mekata(1:nmax) )

sum = 0.0d0
fi = 10


!-------- 配列にデータを格納 ---------!

open( fi, file="1yen_data.dat", status="old" )

do ix = 1, nmax
   read(fi,*) mekata(ix)
enddo

close(fi)

!-------- 配列にデータを格納 (終了) ---------!


!-------- 平均を求める ---------!
! まず和を計算
! 和をデータ数でわる

do ix = 1, nmax
   sum = sum + mekata(ix)
enddo

average = sum / dble(nmax)

!-------- 平均を求める (終了) ---------!


!-------- 分散を求める ---------!
! diper = \frac{1}{n} \sum_i x_i^2 - average^2
! \sum_i x_i^2 を先に計算

do ix = 1, nmax
   sumsum = sumsum + mekata(ix) * mekata(ix)
enddo

disper = sumsum / dble(nmax) - average * average

!-------- 分散を求める (終了) ---------!

deallocate (mekata)


!-------- 結果の出力 ---------!

write(*,*) 'average = ', average
write(*,*) 'dispersion = ', disper

!-------- 結果の出力 (終了) ---------!


end program oneyen
