Fortran Coder

查看: 5909|回复: 1
打印 上一主题 下一主题

[调试器] 关于单步调试

[复制链接]

67

帖子

16

主题

0

精华

专家

F 币
275 元
贡献
201 点
跳转到指定楼层
楼主
发表于 2017-2-3 18:40:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wxy 于 2017-2-3 21:17 编辑

第二张图是代码运行结果和手动运算的对比,发现第一个年份和从第一个闰年开始每四年会出现一次运算错误,不知道哪出了问题。图一是codeblocks的watch窗口,请问它的作用是不是监视调试时的参数变化,然后就是在我的代码中k=1,30 这里面k=-2是不是说明有问题,第一次做单步调试,还不太会
[Fortran] 纯文本查看 复制代码
01Module typedef
02  Type tdd
03    Integer :: stat = 0
04    Real :: tmax, tmin, total, average
05  End Type tdd
06End Module typedef
07 
08Integer Function daysinyear(year, mon, day)
09  Integer :: year, mon, day
10  Integer :: daysinmonth(12) = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]
11  If (((mod(year,4)==0) .And. (mod(year,100)/=0)) .Or. (mod(year,400)==0)) Then
12    daysinmonth(2) = 29
13  Else
14    daysinmonth(2) = 28
15  End If
16  daysinyear = sum(daysinmonth(:mon-1)) + day
17End Function daysinyear
18 
19Program main
20  Use typedef
21  Implicit None
22  Real :: rain
23  Type (tdd), Allocatable :: t(:) ! 保存气温值
24  Type (tdd) :: total !日均温累加
25  Integer i, m, dy, start, end, year, mon, day, daysinyear, k
26  Character (Len=20) :: line, filename = 'CN174653 (12)'
27 
28  Open (8, File='result.txt')
29 
30 
31!初始日期转换为一年的第几天
32  Write (*, *) 'mon:'
33  Read (*, *) mon
34  Write (*, *) 'day:'
35  Read (*, *) day
36  Print *, daysinyear(year, mon, day)
37  start = daysinyear(year, mon, day)
38!结束日期转化为一年的第几天
39 
40  Write (*, *) 'mon:'
41  Read (*, *) mon
42  Write (*, *) 'day:'
43  Read (*, *) day
44 
45  Print *, daysinyear(year, mon, day)
46  end = daysinyear(year, mon, day)
47!年份与文件年份对应
48  year = 1979
49!批量处理
50  Do k = 1, 30
51    year=year+1
52!内部文件读写, 将 filename 第 8-11 字符换为相应年份
53    Write (filename(11:12), '(i2)') k
54    Open (7, File=filename)
55!获取行数
56    i = 0
57    Do
58      Read (7, *, End=100) line
59      i = i + 1
60    End Do
61    100 m = i - 1 !//跳过第一行
62    Rewind (7)
63 
64    Allocate (t(m))
65    Read (7, *)
66!积温计算
67    Do i = 1, m
68      Read (7, *) dy, t(i)%tmax, t(i)%tmin, rain !读入数据
69      t(i)%average = (t(i)%tmax+t(i)%tmin)/2 !日均温
70    End Do
71    total%average = 0
72 
73!
74    Do i = start, end
75      total%average = total%average + t(i)%average !日均温累加=积温
76    End Do
77    Write (8, *) year,total%average ! 结果写入另一个文件
78 
79    Deallocate (t)
80    Close (7)
81 
82  End Do
83  Close (8)
84End Program main


QQ截图20170203183222.png (14.81 KB, 下载次数: 319)

QQ截图20170203183222.png

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

QQ截图20170203204652.png
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

67

帖子

16

主题

0

精华

专家

F 币
275 元
贡献
201 点
沙发
 楼主| 发表于 2017-2-4 16:47:55 | 只看该作者
已经弄好了
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2025-4-28 15:49

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

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