Fortran Coder

查看: 7412|回复: 3
打印 上一主题 下一主题

[通用算法] 關於算式不成立程序無法運行

[复制链接]

35

帖子

12

主题

0

精华

熟手

F 币
173 元
贡献
117 点
跳转到指定楼层
楼主
发表于 2014-12-7 16:10:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 max533 于 2014-12-7 21:48 编辑

小弟百思不得其解。
為什麼在讀取完第一個檔案後,跑到第39行時,j會等於0呢???
然後因為這個算式不成立整個程序無法運行下去Q~Q

他出現的錯誤訊息是floating point divide by zero
floating point co-processor fault at adress 004015c8 in file pwv_mon_avg.f95 at line39

想請問各位高手有沒有遇過下面這種狀況,該如何改寫呢?!

程序如下:
[Fortran] 纯文本查看 复制代码
program pwv_mon_avg
implicit none

integer :: stat,i,j,stat2,year,mon,mon_def(12)
character :: filename*12,filename_new*16
real*8 :: pwv_mm,sum,pwv_mon_mean

open (11,file='list.txt')
close (11,status='delete')
call system ('for %f in (*_mon.pwv) do echo %f >> list.txt')
open (11,file='list.txt')

mon_def=(/ 01,02,03,04,05,06,07,08,09,10,11,12 /)

stat=0
do while (stat==0)
  read (11,*,iostat=stat) filename
  if (stat/=0) exit
  open (22,file=filename)
  filename_new=filename(1:4)//'_mon_avg.pwv'
  open (33,file=filename_new)
  do i=1,12,1
    j=0
    stat2=0
    do while (stat2==0)
      read (22,*,iostat=stat2) year,mon,pwv_mm
      if (stat2/=0) exit
      if (mon==mon_def(i))then
        j=j+1
        if (j==1) then
          sum=pwv_mm
        else if (j>1) then
          sum=sum+pwv_mm
        end if
      else
        cycle
      end if
    end do
    pwv_mon_mean= sum / (j*1D0)
    write (33,'(i2.2,3x,f12.7)') mon,pwv_mon_mean
  end do
end do
end program
以下為測試用檔案:

data2.rar

1.76 KB, 下载次数: 4

以更新數據

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2014-12-7 18:33:06 | 只看该作者
数据文件是空白的

35

帖子

12

主题

0

精华

熟手

F 币
173 元
贡献
117 点
板凳
 楼主| 发表于 2014-12-7 21:49:46 | 只看该作者
fcode 发表于 2014-12-7 18:33
数据文件是空白的

不好意思,傳到錯誤的測試檔案,已經更新數據,感謝fcode提醒。

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
地板
发表于 2014-12-9 18:55:23 | 只看该作者
[Fortran] 纯文本查看 复制代码
program pwv_mon_avg
implicit none
integer :: stat, stat2, i, year, mon, mon_num(12)
character :: filename*12, filename_new*16
real(8) :: pwv_mm, pwv_mon_mean(12)

open (11,file='list.txt')
close (11,status='delete')
call system ('for %f in (*_mon.pwv) do echo %f >> list.txt')
open (11,file='list.txt')
do 
    read (11,*,iostat=stat) filename
    if (stat/=0) exit
    filename_new=filename(1:4)//'_mon_avg.pwv'
    open (33,file=filename_new)
    open (22,file=filename)
    mon_num(:) = 0
    pwv_mon_mean(:) = 0.0d0
    do 
      read (22,*,iostat=stat2) year, mon, pwv_mm
      if (stat2/=0) exit
      pwv_mon_mean(mon) = pwv_mon_mean(mon) + pwv_mm
      mon_num(mon) = mon_num(mon) + 1
    end do
    do i = 1, 12
        if( mon_num(i)/=0 ) pwv_mon_mean(i) = pwv_mon_mean(i) / mon_num(i)
        write (33,'(i2.2,3x,f12.7)') i, pwv_mon_mean(i)
    end do
    close(22)
    close(33)
end do
close (11,status='delete')
write(*,*) "completed..."
read(*,*)
end program

评分

参与人数 1F 币 +9 贡献 +9 收起 理由
fcode + 9 + 9 赞一个!

查看全部评分

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-26 05:28

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表