Fortran Coder

标题: 关于单步调试 [打印本页]

作者: wxy    时间: 2017-2-3 18:40
标题: 关于单步调试
本帖最后由 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 (14.81 KB, 下载次数: 231)

QQ截图20170203183222.png

QQ截图20170203204652.png (20.98 KB, 下载次数: 207)

QQ截图20170203204652.png

作者: wxy    时间: 2017-2-4 16:47
已经弄好了




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2