- 积分
- 2291
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2015-4-8
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
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
|
|