爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: aa22556688

[求助] Fortran统计干旱天数求助。。。

[复制链接]

新浪微博达人勋

 成长值: 0
发表于 2013-5-14 12:05:27 | 显示全部楼层

数组输出的时候i变量从1,37看看···不知道为何你的数组没有溢出??
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-14 12:28:51 | 显示全部楼层
aa22556688 发表于 2013-5-14 10:19
没有报错信息,可以写文件,只是统计出来的干旱天数不对,很多都为零。

看看是不是读取资料的问题
do i=1,13514              !行:年,月,日,测站一,测站二。。。测站17!
read(10,*)(ci(i,j),j=1,20)        !列:每个测站从1974.1.1~2012.12.31每天的CI值!
enddo
外循环应该是j,改一下试试吧
do j=1,20             !行:年,月,日,测站一,测站二。。。测站17!
read(10,*)(ci(i,j),i=1,13514)        !列:每个测站从1974.1.1~2012.12.31每天的CI值!
enddo
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-5-14 13:05:55 | 显示全部楼层
言深深 发表于 2013-5-14 11:59
看一下这些为0的地方,在中和重里面是否有数据?

是有数据的,河南每年干旱都是很严重的,几乎每个季节都会发生干旱。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-5-14 13:08:37 | 显示全部楼层
言深深 发表于 2013-5-14 12:05
数组输出的时候i变量从1,37看看···不知道为何你的数组没有溢出??

试了,还是筛选不出来要的数据,是不是if条件写的有问题,或者do循环没有把每个数据都循环到。。。
之前处理这些数据从来没有溢出过。。。能不能有办法解决哦,现在论文就差这步统计干旱天数了。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-5-14 13:10:34 | 显示全部楼层
river 发表于 2013-5-14 12:28
看看是不是读取资料的问题
do i=1,13514              !行:年,月,日,测站一,测站二。。。测站17!
...

读取没有错,我也写了一个 写程序,就是把cicici.txt 文件里的数据,原封不动的在写道另一txt里,可以写出来,而且还没有错误。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-5-14 13:25:47 | 显示全部楼层
言深深 发表于 2013-5-14 12:05
数组输出的时候i变量从1,37看看···不知道为何你的数组没有溢出??

把输入项改成下面的方式,有些地方有数据,但是统计结果还是不对。
do i=1974,2010
   write(30,'(i6,17i6)') i,(dongqing(i-973,j),j=1,17)
   write(40,'(i6,17i6)') i,(dongmid(i-973,j),j=1,17)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-14 13:34:52 | 显示全部楼层
本帖最后由 夏朗的芒果 于 2013-5-14 13:38 编辑

问题1:
   需要给数组赋初值,即
integer::dongqing(37,17)=0,dongmid(37,17)=0,dongzhong(37,17)=0,dongte(37,17)=0
  integer::chunqing(37,17)=0,chunmid(37,17)=0,chunzhong(37,17)=0,chunte(37,17)=0
  integer::xiaqing(37,17)=0,xiamid(37,17)=0,xiazhong(37,17)=0,xiate(37,17)=0
  integer::qiuqing(37,17)=0,qiumid(37,17)=0,qiuzhong(37,17)=0,qiute(37,17)=0

  不然在循环中容易出问题  接下来的读取数据是没有问题的
问题2:   在读取数据后的操作中,程序本身没有问题,只不过程序还可以优化。k与m是重复的,这样造成程序多运算了37遍,效率不高,对CPU损耗太大。另外在冬季判别中最后一项k-1有逻辑错误,会小于1974. 具体怎么优化,LZ自己想想吧

问题3:

   在写入文本时,循环出错,do i=1974,2010,这样子造成数组dongqing(i,j)等第一个就是从dongqing(1974,j)开始,大于dongqing(37,j),形成数组溢出,可改成do i=1,37,即
open(30,file='E:\aaa\dongqing.txt')
open(40,file='E:\aaa\dongmid.txt')
open(50,file='E:\aaa\dongzhong.txt')
open(60,file='E:\aaa\dongte.txt')
open(70,file='E:\aaa\chunqing.txt')
open(80,file='E:\aaa\chunmid.txt')
open(90,file='E:\aaa\chunzhong.txt')
open(100,file='E:\aaa\chunte.txt')
open(110,file='E:\aaa\xiaqing.txt')
open(120,file='E:\aaa\xiamid.txt')
open(130,file='E:\aaa\xiazhong.txt')
open(140,file='E:\aaa\xiate.txt')
open(150,file='E:\aaa\qiuqing.txt')
open(160,file='E:\aaa\qiumid.txt')
open(170,file='E:\aaa\qiuzhong.txt')
open(180,file='E:\aaa\qiute.txt')
do i=1,37
   write(30,'(i6,17i6)') i+1973,(dongqing(i,j),j=1,17)
   write(40,'(i6,17i6)') i+1973,(dongmid(i,j),j=1,17)
   write(50,'(i6,17i6)') i+1973,(dongzhong(i,j),j=1,17)
   write(60,'(i6,17i6)') i+1973,(dongte(i,j),j=1,17)
   write(70,'(i6,17i6)') i+1973,(chunqing(i,j),j=1,17)
   write(80,'(i6,17i6)') i+1973,(chunmid(i,j),j=1,17)
   write(90,'(i6,17i6)') i+1973,(chunzhong(i,j),j=1,17)
   write(100,'(i6,17i6)') i+1973,(chunte(i,j),j=1,17)
   write(110,'(i6,17i6)') i+1973,(xiaqing(i,j),j=1,17)
   write(120,'(i6,17i6)') i+1973,(xiamid(i,j),j=1,17)
   write(130,'(i6,17i6)') i+1973,(xiazhong(i,j),j=1,17)
   write(140,'(i6,17i6)') i+1973,(xiate(i,j),j=1,17)
   write(150,'(i6,17i6)') i+1973,(qiuqing(i,j),j=1,17)
   write(160,'(i6,17i6)') i+1973,(qiumid(i,j),j=1,17)
   write(170,'(i6,17i6)') i+1973,(qiuzhong(i,j),j=1,17)
   write(180,'(i6,17i6)') i+1973,(qiute(i,j),j=1,17)
enddo


通篇看完LZ的程序,其实真的伤到了,希望楼主有空多练练FORTRAN和算法,这样能提升自身解决问题的能力。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2013-5-14 14:58:43 | 显示全部楼层
夏朗的芒果 发表于 2013-5-14 13:34
问题1:
   需要给数组赋初值,即
  integer::dongqing(37,17)=0,dongmid(37,17)=0,dongzhong(37,17)=0,d ...

其实可以将37设置为内层循环,这样可以精简程序···此外,一年四季完全写一次,不同的等级也可以写一次就ok的···
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2013-5-14 15:00:41 | 显示全部楼层
aa22556688 发表于 2013-5-14 13:05
是有数据的,河南每年干旱都是很严重的,几乎每个季节都会发生干旱。

看你的程序,各个等级应该不可能有重复,如果轻的没有,在其他里面有的话那么结果应该是正确的···
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2013-5-14 15:01:56 | 显示全部楼层
aa22556688 发表于 2013-5-14 13:25
把输入项改成下面的方式,有些地方有数据,但是统计结果还是不对。
do i=1974,2010
   write(30,'(i6,1 ...

应该是i-1973,或者干脆在前面设置一个m=-1973,下面的数组还用原来的
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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