爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3440|回复: 10

[求助] 用fortran算逐年冬季累计值 有问题

[复制链接]

新浪微博达人勋

发表于 2016-2-27 15:16:14 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 海soso 于 2016-2-27 15:17 编辑

大大们好 我要算80 年到02年每个站点冬季3个月(12 1 2 )的逐年雾日累加值 原数据是这样的 7446.tm.png
编了个算的程序有问题 求大神帮看一下!!/(ㄒoㄒ)/  问题是程序不会报错 就是一直运行 出来的数据过大 而且出的数据一开始是0后来越来越大==
program main
!implicit none
parameter(n=364444) !原文件的行数
parameter(k=678)    !站点数
integer i,j,y  
!logical flag1,flag2   
real staa(n),yr(n),lf(n),df(n),staf(k),sta(k),mn(n)
character c*80
open(1,file='D:\wu\r\5102y678satation.txt') !存数据的文件
  do i=1,n           
    read(1,*)staa(i),yr(i),mn(i),lf(i),df(i)
  end do
   close(1)
    print*,'ok1'

  open(2,file='D:\wu\r\sta678.txt') !存678个站号的文件
  do i=1,k         
    read(2,*)sta(i)
  end do
   close(2)
   print*,'ok2'

open(7,file='D:\wu\r\8002annualwin.txt')  !写入文件

  y=1980

  !flag1=(yr(i)==y.and.mn(i)==12)
  !flag2=(yr(i)==y+1.and.(mn(i)==1.or.mn(i)==2))
do j=1,k
  staf(j)=0
   do i=1,n
    if((yr(i)==y.and.mn(i)==12).or.(yr(i)==y+1.and.(mn(i)==1.or.mn(i)==2)).and.staa(i)==sta(j)) then  !选出冬季3个月
   staf(j)=staf(j)+df(i)+lf(i)   !求逐年冬季累加值
        print*,'ok3'
        end if
   write(7,*) staf(j)
  end do
  y=y+1
  if (y.eq.2003) then
  stop
  endif
  print*,'ok4'
end do
end



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

新浪微博达人勋

发表于 2016-2-27 20:00:23 | 显示全部楼层
大致看了一下你的程序问题很多,首先,
do i=1,n           
    read(1,*)staa(i),yr(i),mn(i),lf(i),df(i)
  end do
你只读了一个台站的数据,不是应该读678个台站吗?
其次,y=1980放的位置也不对  应该放在下面的循环体中。。。

你在仔细查查把。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-2-27 20:07:49 | 显示全部楼层
小傅之追梦 发表于 2016-2-27 20:00
大致看了一下你的程序问题很多,首先,
do i=1,n           
    read(1,*)staa(i),yr(i),mn(i),lf(i),d ...

刚刚看错了  你把语句y=1980 放到do j=1,k之后试试
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-2-27 20:21:08 | 显示全部楼层
小傅之追梦 发表于 2016-2-27 20:07
刚刚看错了  你把语句y=1980 放到do j=1,k之后试试

刚刚去试了....还是不行...如果不中断的话程序会一直运行 我中断的时候都生成了500度M了 源文件只有10M啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-2-27 20:21:13 | 显示全部楼层
小傅之追梦 发表于 2016-2-27 20:07
刚刚看错了  你把语句y=1980 放到do j=1,k之后试试

刚刚去试了....还是不行...如果不中断的话程序会一直运行 我中断的时候都生成了500度M了 源文件只有10M啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-2-27 20:26:09 | 显示全部楼层
海soso 发表于 2016-2-27 20:21
刚刚去试了....还是不行...如果不中断的话程序会一直运行 我中断的时候都生成了500度M了 源文件只有10M啊 ...

原数据不大的话,发给我我看看 联系方式发消息给你
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-2-27 20:34:15 | 显示全部楼层
本帖最后由 海soso 于 2016-3-2 16:29 编辑
小傅之追梦 发表于 2016-2-27 20:26
原数据不大的话,发给我我看看 联系方式发消息给你

收到 已经发了~超级感谢!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-3-1 11:44:22 | 显示全部楼层
建议这种情况,定义自定义类型的type staition,而且你不觉得这个条件语句很乱吗? if((yr(i)==y.and.mn(i)==12).or.(yr(i)==y+1.and.(mn(i)==1.or.mn(i)==2)).and.staa(i)==sta(j)) then     staf(j)=staf(j)+df(i)+lf(i) ,建议变成几个嵌套的if语句,首先你得提取台站号,如果台站号相等,再执行条件语句
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-3-1 11:46:56 | 显示全部楼层
你这情况,没有固定台站号,程序执行的是所有1980-2003年之间的冬季数据累加,所以数据会比原数据大
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-3-1 22:04:51 | 显示全部楼层
nunu18 发表于 2016-3-1 11:46
你这情况,没有固定台站号,程序执行的是所有1980-2003年之间的冬季数据累加,所以数据会比原数据大

是的 现在问题已经解决了 非常感谢!
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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