爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2934|回复: 1

[求助] 各位,我想求助关于连续降水的编程一个问题

[复制链接]

新浪微博达人勋

发表于 2016-9-19 15:52:56 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
需要求的连续降水条件包括:一个连阴雨过程至少包含>=5day, 日雨量>=0.1mm的连续降水
7-10天允许间有一个无雨日,>=11day允许间隔两个不相邻无雨日
区域内半数或以上代表站处于连阴雨区,该段时间,该区域为连阴雨区

因为程序弄到一半,有个问题一直没有解决,就编不下去了   ,,,,就是关于文件读到最后一个后怎么正常输出结束的问题
不好意思,我是个初学者,所以编的程序可能有点乱,有点冗长,针对区域那一部分还没有写上去
希望各位不吝赐教::

PROGRAM TRAIN
IMPLICIT NONE
INTEGER I, N, D, FLAG, MARK, SIGN
INTEGER, ALLOCATABLE::STATION(:), YEAR(:), MONTH(:), DAY(:), RAIN(:) !定义动态数组
REAL LINE

!*********************************************************识别文件的行数
N = 0
OPEN(10, FILE='RAIN.TXT', STATUS = 'OLD')
DO WHILE(.TRUE.)
        READ(10, *, END = 100) LINE
        N = N + 1
ENDDO
100 CONTINUE
PRINT*, N
CLOSE(10)                                                                                                   !在这里必须关闭文件后再次打开,否则下一步开始时已经读到文件末尾,读入时会出错

!*********************************************************
OPEN(10, FILE='RAIN.TXT', STATUS = 'OLD')
ALLOCATE(STATION(N), YEAR(N), MONTH(N), DAY(N), RAIN(N))   !根据返回值的行数,给动态数组赋值

!*********************************************************读入数据
DO I = 1, N
        READ(10, *) STATION(I), YEAR(I), MONTH(I), DAY(I), RAIN(I)       
ENDDO

!*********************************************************判断连阴雨天气: 三种情况分开判断
!判断:一个连阴雨过程至少包含>=5day, 日雨量>=0.1mm的连续降水
D = 0
DO I = 1, N
        IF (RAIN(I) >= 1) THEN
                FLAG = 1
        ELSE
                FLAG = 0
        ENDIF
        IF (FLAG == 1) THEN
                D = D + 1
        ELSE
                IF (D >= 5) THEN
                        PRINT*, YEAR(I), MONTH(I - D), DAY(I - D), ' TO ', MONTH(I - 1), DAY(I - 1)
                ENDIF
                D = 0
                CONTINUE
        ENDIF
ENDDO

!判断:7-10day允许间有一个无雨日
D = 0
SIGN = 0
DO I = 1, N
        IF (RAIN(I) >= 1) THEN
                FLAG = 1
        ELSE
                FLAG = 0
                SIGN = SIGN + 1
        ENDIF
        IF (FLAG == 1) THEN
                D = D + 1
        ELSE
                IF (SIGN == 1) THEN
                        D = D + 1
                ELSE
                        IF (D >= 7) THEN
                                PRINT*, YEAR(I), MONTH(I - D), DAY(I - D), ' TO ', MONTH(I - 1), DAY(I - 1)
                        ENDIF
                        D = 0
                        CONTINUE
                ENDIF
        ENDIF
ENDDO

!判断:>=11day允许间隔两个不相邻无雨日
D = 0
SIGN = 0
DO I = 1, N
        IF (RAIN(I) >= 1) THEN
                FLAG = 1
        ELSE
                FLAG = 0
                SIGN = SIGN + 1
        ENDIF
        IF (RAIN(I - 1) >= 1) THEN
                MARK = 1
        ELSE
                MARK = 0
        ENDIF
        IF (FLAG == 1) THEN
                D = D + 1
        ELSE
                IF (SIGN == 1) THEN
                        D = D + 1
                ELSE
                        IF (MARK == 1) THEN
                                D = D + 1
                        ELSE
                                IF (D >= 11) THEN
                                        PRINT*, YEAR(I), MONTH(I - D), DAY(I - D), ' TO ', MONTH(I - 1), DAY(I - 1)
                                ENDIF
                                D = 0
                                CONTINUE
                        ENDIF
                ENDIF
        ENDIF
ENDDO

!*********************************************************关闭文件,释放数组空间
CLOSE(10)
DEALLOCATE(STATION, YEAR, MONTH, DAY, RAIN)
END



实验数据我贴在这里:
56312 1960 11 5 69
56312 1960 11 6 64
56312 1960 11 7 44
56312 1960 11 8 42
56312 1960 11 9 32
56312 1960 11 10 56
56312 1960 11 11 41
56312 1960 11 12 46
56312 1960 11 13 0
56312 1960 11 14 61
56312 1960 11 15 60
56312 1960 11 16 65
56312 1960 11 17 73
56312 1960 11 18 68
56312 1960 11 19 64
56312 1960 11 20 52
56312 1960 11 21 28
56312 1960 11 22 53
56312 1960 11 23 0
56312 1960 11 24 0
56312 1960 11 25 42
56312 1960 11 26 22
56312 1960 11 27 25
56312 1960 11 28 18
56312 1960 11 29 28
56312 1960 11 30 25
56312 1960 12 1 6
56312 1960 12 2 0
56312 1960 12 3 8
56312 1960 12 4 16
56312 1960 12 5 16
56312 1960 12 6 21
56312 1960 12 7 50
56312 1960 12 8 31
56312 1960 12 9 32
56312 1960 12 10 14
56312 1960 12 11 6
56312 1960 12 12 0
56312 1960 12 13 0
56312 1960 12 14 4
56312 1960 12 15 8
56312 1960 12 16 24
56312 1960 12 17 41
56312 1960 12 18 0
56312 1960 12 19 24
56312 1960 12 20 33
56312 1960 12 21 28
56312 1960 12 22 40
56312 1960 12 23 8
56312 1960 12 24 0
56312 1960 12 25 10
56312 1960 12 26 8
56312 1960 12 27 35
56312 1960 12 28 27
56312 1960 12 29 15
56312 1960 12 30 12
56312 1960 12 31 21



train14.f90

2.5 KB, 下载次数: 2, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-7-11 23:50:08 | 显示全部楼层
请问,你解决上面的问题了吗?刚好我也有类似的问题
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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