Fortran Coder

查看: 5297|回复: 1

[调试器] 关于单步调试

[复制链接]

67

帖子

16

主题

0

精华

专家

F 币
274 元
贡献
201 点
发表于 2017-2-3 18:40:16 | 显示全部楼层 |阅读模式
本帖最后由 wxy 于 2017-2-3 21:17 编辑

第二张图是代码运行结果和手动运算的对比,发现第一个年份和从第一个闰年开始每四年会出现一次运算错误,不知道哪出了问题。图一是codeblocks的watch窗口,请问它的作用是不是监视调试时的参数变化,然后就是在我的代码中k=1,30 这里面k=-2是不是说明有问题,第一次做单步调试,还不太会
[Fortran] 纯文本查看 复制代码
Module typedef
  Type tdd
    Integer :: stat = 0
    Real :: tmax, tmin, total, average
  End Type tdd
End Module typedef

Integer Function daysinyear(year, mon, day)
  Integer :: year, mon, day
  Integer :: daysinmonth(12) = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]
  If (((mod(year,4)==0) .And. (mod(year,100)/=0)) .Or. (mod(year,400)==0)) Then
    daysinmonth(2) = 29
  Else
    daysinmonth(2) = 28
  End If
  daysinyear = sum(daysinmonth(:mon-1)) + day
End Function daysinyear

Program main
  Use typedef
  Implicit None
  Real :: rain
  Type (tdd), Allocatable :: t(:) ! 保存气温值
  Type (tdd) :: total !日均温累加
  Integer i, m, dy, start, end, year, mon, day, daysinyear, k
  Character (Len=20) :: line, filename = 'CN174653 (12)'

  Open (8, File='result.txt')


!初始日期转换为一年的第几天
  Write (*, *) 'mon:'
  Read (*, *) mon
  Write (*, *) 'day:'
  Read (*, *) day
  Print *, daysinyear(year, mon, day)
  start = daysinyear(year, mon, day)
!结束日期转化为一年的第几天

  Write (*, *) 'mon:'
  Read (*, *) mon
  Write (*, *) 'day:'
  Read (*, *) day

  Print *, daysinyear(year, mon, day)
  end = daysinyear(year, mon, day)
!年份与文件年份对应
  year = 1979
!批量处理
  Do k = 1, 30
    year=year+1
!内部文件读写, 将 filename 第 8-11 字符换为相应年份
    Write (filename(11:12), '(i2)') k
    Open (7, File=filename)
!获取行数
    i = 0
    Do
      Read (7, *, End=100) line
      i = i + 1
    End Do
    100 m = i - 1 !//跳过第一行
    Rewind (7)

    Allocate (t(m))
    Read (7, *)
!积温计算
    Do i = 1, m
      Read (7, *) dy, t(i)%tmax, t(i)%tmin, rain !读入数据
      t(i)%average = (t(i)%tmax+t(i)%tmin)/2 !日均温
    End Do
    total%average = 0

!
    Do i = start, end
      total%average = total%average + t(i)%average !日均温累加=积温
    End Do
    Write (8, *) year,total%average ! 结果写入另一个文件

    Deallocate (t)
    Close (7)

  End Do
  Close (8)
End Program main


QQ截图20170203183222.png
QQ截图20170203204652.png

67

帖子

16

主题

0

精华

专家

F 币
274 元
贡献
201 点
 楼主| 发表于 2017-2-4 16:47:55 | 显示全部楼层
已经弄好了
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-3-28 23:28

Powered by Tencent X3.4

© 2013-2024 Tencent

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