爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2679|回复: 2

[求助] [已解决]程序设计求助

[复制链接]

新浪微博达人勋

发表于 2017-7-14 11:31:54 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 muggle 于 2017-7-14 11:48 编辑

我最近在编写一个用于筛选逐日最高温超过阈值的程序,遇到了一个我怎么都找不到错误的问题。

我的目的是打算,按照年份,把每天的192站点挑选出来,超过阈值的站点显示最高温,没超过的用0代替,按道理这样每天都是输出一个192行的txt。
但奇怪的是,有些天是对的,有些就莫名其妙的跑错位置了。比如5月26日第一个站跑到5月25日最后一行,6月12日一半跑到6月11日文件中。
我检查过,读取原始资料没有问题。。一下子还真想不到哪里出了错,有没有高人指点一下

除了读取资料部分,值得研究的就是那个判断语句,原始资料中是按照每年每站每天排列,我用a1,a2,a3分别代表年月日来判断。

程序是很简单,可能有哪些小地方我没注意到,导致了错误。急求解答!!



解决方法:71和72行掉个顺序就ok了


  1. program zhandian
  2. implicit none


  3. integer,parameter::sta_num=192,ns=35,day=153
  4. real sta(day,sta_num,ns),yr(day,sta_num,ns),mon(day,sta_num,ns),da(day,sta_num,ns),tmax(day,sta_num,ns)
  5. real yz(sta_num,ns),a1(ns),a2(5),a3(31),a4(30)
  6. integer i,j,k,ii,jj,kk
  7. character*4 year(ns)
  8. character*3 dy(153)

  9. open(21,file='F:\192\dat\yr.txt',status='old')
  10. read(21,*) year
  11. close(21)

  12. open(22,file='F:\192\dat\dy.txt',status='old')
  13. read(22,*) dy
  14. close(22)



  15. do i=1,ns
  16.   a1(i)=1978+i
  17. enddo

  18. do i=1,5
  19.   a2(i)=4+i
  20. enddo

  21. do i=1,31
  22.   a3(i)=i
  23. enddo



  24. !读取观测数据

  25.   open(11,file='F:\192\sta_fenbu\35192153obs.txt',status='old')
  26.     do k=1,ns
  27.           do j=1,sta_num
  28.         do i=1,day
  29.               read(11,*) sta(i,j,k),yr(i,j,k),mon(i,j,k),da(i,j,k),tmax(i,j,k)
  30.         enddo
  31.           enddo
  32.     enddo


  33. !读取阈值文件


  34. open(22,file='F:\192\yuzhi\r95t35.txt',status='old')

  35. read(22,"(192F8.2)") ((yz(i,j),i=1,sta_num),j=1,ns)

  36. !检验读取正确与否
  37. !write(*,*) yz(1,1),yz(1,35)
  38. !write(*,*) sta(25,1,1),yr(25,1,1),mon(25,1,1),da(25,1,1),tmax(25,1,1)
  39. !write(*,*) a1(1),a2(1),a3(25)
  40. !write(*,*) sta(2,1,35),yr(2,1,35),mon(2,1,35),da(2,1,35),tmax(2,1,35)



  41. !挑选出大于阈值的站点,并按照年份输出
  42. do k=1,ns
  43.     do i=1,day
  44.        do j=1,sta_num
  45.            do ii=1,ns
  46.                  do jj=1,5   
  47.                         do kk=1,31
  48.                            if (yr(i,j,k)==a1(ii) .and. (mon(i,j,k)==a2(jj)) .and. (da(i,j,k)==a3(kk))) then
  49.                        if (tmax(i,j,k) <= yz(i,k)) then
  50.                           open(33,file='f:\192\sta_fenbu\'//year(k)//'\'//dy(i)//'.txt')
  51.                           write(33,*) sta(i,j,k),yr(i,j,k),mon(i,j,k),da(i,j,k),0.0
  52.                        else
  53.                                   write(33,*) sta(i,j,k),yr(i,j,k),mon(i,j,k),da(i,j,k),tmax(i,j,k)
  54.                        endif
  55.                    endif
  56.                         enddo
  57.                  enddo
  58.            enddo
  59.             enddo
  60.         enddo
  61. enddo


  62. close(11)
  63. close(22)
  64. close(33)
  65. end program
  66.   

复制代码



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

新浪微博达人勋

 楼主| 发表于 2017-7-14 11:34:32 | 显示全部楼层
因为错误是每年都存在的,所以应该是程序的问题?大神帮忙解答的时候只要运行1979年就可以了,省去了很多循环,谢谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-7-14 11:47:08 | 显示全部楼层
虽然不知道为什么,我把71和72行调换了个顺序就OK了~!!!{:lxm_24:}
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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