program enshu06d3
  implicit none
  integer :: seireki,tsuki,joutai,bangou,kosuu
  real,dimension(1800) :: kion1retsu,kion1retsu_lowpass
  real :: souwa
  integer,parameter :: mado_haba=12 ! 移動平均をとる合計のデータ数
  integer :: mado_haba_half,bangou_hajime,bangou_owari,souwa_no_kosuu,i
  kosuu = 0
  do
     read(*,'(2i5,i2.2,f6.1)',iostat=joutai)bangou,seireki,tsuki, &
          kion1retsu(bangou)
     if (joutai /= 0) exit
     kosuu = kosuu + 1
  end do
  mado_haba_half = mado_haba/2 ! 移動平均をとる自分の前後のデータの数
  if (mado_haba /= mado_haba_half*2 ) then ! 奇数個のデータで移動平均をとる場合
     do bangou = 1,kosuu
        bangou_hajime &                         ! 和をとるデータの最初の番号
             = max(bangou-mado_haba_half,    1) ! 必ず     1 以上にとる
        bangou_owari &                          ! 和をとるデータの最後の番号は
             = min(bangou+mado_haba_half,kosuu) ! 必ず kosuu 以下にとる
        souwa_no_kosuu = bangou_owari-bangou_hajime+1 ! 和をとるデータの総数
        souwa = 0.0
        do i = bangou_hajime,bangou_owari ! この範囲にあるデータの総和を計算
           souwa = souwa + kion1retsu(i)
        end do
        kion1retsu_lowpass(bangou) = souwa/real(souwa_no_kosuu) ! これが移動平均
     end do
  else ! 偶数個のデータで移動平均をとる場合
     do bangou = 1,kosuu
        bangou_hajime &                         ! 和をとるデータの最初の番号
             = max(bangou-mado_haba_half,    1) ! 必ず     1 以上にとる
        bangou_owari &                          ! 和をとるデータの最後の番号は
             = min(bangou+mado_haba_half,kosuu) ! 必ず kosuu 以下にとる
        souwa_no_kosuu = bangou_owari-bangou_hajime ! 和をとるデータの総数
        souwa = 0.0
        do i = bangou_hajime,bangou_owari-1
           souwa = souwa & ! 台形則による数値積分と似たような方法をとっている
                + 0.5*(kion1retsu(i)+kion1retsu(i+1))
        end do
        kion1retsu_lowpass(bangou) = souwa/real(souwa_no_kosuu) ! これが移動平均
     end do
  end if
  do bangou = 1,kosuu
     write(*,'(i4,2f6.2)')bangou,kion1retsu(bangou),kion1retsu_lowpass(bangou)
  end do
end program enshu06d3