program enshu06d2 implicit none integer :: seireki,tsuki,joutai,bangou,kosuu real,dimension(1800) :: kion1retsu,kion1retsu_lowpass real :: souwa 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 = 6 ! 移動平均をとる自分の前後のデータの数 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) ! これが移動平均 write(*,'(i4,2f6.2)')bangou,kion1retsu(bangou),kion1retsu_lowpass(bangou) end do end program enshu06d2