爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2674|回复: 2

[求助] 求助,程序编译没问题,但计算结果出错,程序如下

[复制链接]

新浪微博达人勋

发表于 2015-5-22 20:48:07 | 显示全部楼层 |阅读模式

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

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

x
站点资料求降水量随海拔高度的分布,每300m一层,海拔属于同一层次的降水量求和,最后求平均,程序编译没问题,但计算结果出错,程序筛选分层失败,降水量之和出现在同一层,而选出的降水总次数是正确的。请各位大神看看问题出在哪里,感激不尽~~

代码如下:



  1. !1000为站点数,31为文件个数
  2.     real x(1000,31),y(1000,31),z(1000,31),averain(8)
  3.         character*13 name
  4.     integer error
  5.     integer ip(8)   
  6. !按namelist读k个文件
  7.         open(10,file='e:\r24-8-p\namelist.txt',form='formatted')
  8.         k=1
  9.         n=0
  10. 101        read(10,*,end=1001)name
  11.       write(*,*)name
  12.       open(9,file='e:\r24-8-p\result_8_98\'//name//'.txt',form='formatted')

  13. !读数据
  14.       do while (.true.)
  15.         read(9,*,iostat=error)a,b,c,d,e
  16.         if(error /= 0) exit
  17.         n=n+1
  18.     x(n,k)=b
  19.         y(n,k)=c
  20.         z(n,k)=e
  21.         end do
  22.         close(9)
  23.       k=k+1
  24.       goto 101
  25. 1001  close(10)


  26. !求满足经、纬度范围的站点的平均降水量
  27.     averain=0
  28.         ip=0
  29.         do k=1,31
  30.       do n=1,1000
  31.         if(x(n,k).ge.103.and.x(n,k).le.110.and.y(n,k).ge.24.and.y(n,k).le.29)then
  32.         if(d>=300.and.d<600)then
  33.     ip(1)=ip(1)+1
  34.         averain(1)=averain(1)+z(n,k)
  35.     else if(d>=600.and.d<900)then
  36.     ip(2)=ip(2)+1
  37.         averain(2)=averain(2)+z(n,k)
  38.     else if(d>=900.and.d<1200)then
  39.     ip(3)=ip(3)+1
  40.         averain(3)=averain(3)+z(n,k)
  41.     else if(d>=1200.and.d<1500)then
  42.     ip(4)=ip(4)+1
  43.         averain(4)=averain(4)+z(n,k)
  44.     else if(d>=1500.and.d<1800)then
  45.     ip(5)=ip(5)+1
  46.         averain(5)=averain(5)+z(n,k)   
  47.     else if(d>=1800.and.d<2100)then
  48.     ip(6)=ip(6)+1
  49.         averain(6)=averain(6)+z(n,k)
  50.     else if(d>=2100.and.d<2400)then
  51.     ip(7)=ip(7)+1
  52.         averain(7)=averain(7)+z(n,k)
  53.     else if(d>=2400.and.d<2700)then
  54.     ip(8)=ip(8)+1
  55.         averain(8)=averain(8)+z(n,k)
  56.         end if
  57.     end if
  58.         end do
  59.         end do
  60.         do i=1,8

  61.     averain(i)=averain(i)/ip(i)
  62.     end do
  63.     write(*,*)ip,averain
  64.     open(20,file='e:\r24-8-p\ave_8_98.txt',form='formatted')
  65.         do i=1,8
  66.     write(20,*) ip(i),averain(i)
  67.     end do

  68.         end
复制代码

namelist.txt如下
98080108.0001
98080208.0001
98080308.0001
98080408.0001
98080508.0001
98080608.0001
98080708.0001
98080808.0001
98080908.0001
98081008.0001
98081108.0001
98081208.0001
98081308.0001
98081408.0001
98081508.0001
98081608.0001
98081708.0001
98081808.0001
98081908.0001
98082008.0001
98082108.0001
98082208.0001
98082308.0001
98082408.0001
98082508.0001
98082608.0001
98082708.0001
98082808.0001
98083008.0001
98083108.0001

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

新浪微博达人勋

 成长值: 0
发表于 2015-5-23 09:23:49 | 显示全部楼层
粗略看了一下,有个疑问,你的d是高程数据吧?难道不应该是经纬度的函数吗?为什么就是一个值···?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-5-23 11:51:10 | 显示全部楼层
言深深 发表于 2015-5-23 09:23
粗略看了一下,有个疑问,你的d是高程数据吧?难道不应该是经纬度的函数吗?为什么就是一个值···?

对对对,问题就出在这里,d应该存放在数组中参与判断
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-8-9 16:41:55 | 显示全部楼层

回帖奖励 +1 金钱

{:5_214:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

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

本版积分规则

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

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

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