- 积分
- 11278
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2015-9-9
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
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了
- program zhandian
- implicit none
- integer,parameter::sta_num=192,ns=35,day=153
- 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)
- real yz(sta_num,ns),a1(ns),a2(5),a3(31),a4(30)
- integer i,j,k,ii,jj,kk
- character*4 year(ns)
- character*3 dy(153)
- open(21,file='F:\192\dat\yr.txt',status='old')
- read(21,*) year
- close(21)
- open(22,file='F:\192\dat\dy.txt',status='old')
- read(22,*) dy
- close(22)
- do i=1,ns
- a1(i)=1978+i
- enddo
- do i=1,5
- a2(i)=4+i
- enddo
- do i=1,31
- a3(i)=i
- enddo
- !读取观测数据
- open(11,file='F:\192\sta_fenbu\35192153obs.txt',status='old')
- do k=1,ns
- do j=1,sta_num
- do i=1,day
- read(11,*) sta(i,j,k),yr(i,j,k),mon(i,j,k),da(i,j,k),tmax(i,j,k)
- enddo
- enddo
- enddo
- !读取阈值文件
- open(22,file='F:\192\yuzhi\r95t35.txt',status='old')
- read(22,"(192F8.2)") ((yz(i,j),i=1,sta_num),j=1,ns)
- !检验读取正确与否
- !write(*,*) yz(1,1),yz(1,35)
- !write(*,*) sta(25,1,1),yr(25,1,1),mon(25,1,1),da(25,1,1),tmax(25,1,1)
- !write(*,*) a1(1),a2(1),a3(25)
- !write(*,*) sta(2,1,35),yr(2,1,35),mon(2,1,35),da(2,1,35),tmax(2,1,35)
- !挑选出大于阈值的站点,并按照年份输出
- do k=1,ns
- do i=1,day
- do j=1,sta_num
- do ii=1,ns
- do jj=1,5
- do kk=1,31
- if (yr(i,j,k)==a1(ii) .and. (mon(i,j,k)==a2(jj)) .and. (da(i,j,k)==a3(kk))) then
- if (tmax(i,j,k) <= yz(i,k)) then
- open(33,file='f:\192\sta_fenbu\'//year(k)//'\'//dy(i)//'.txt')
- write(33,*) sta(i,j,k),yr(i,j,k),mon(i,j,k),da(i,j,k),0.0
- else
- write(33,*) sta(i,j,k),yr(i,j,k),mon(i,j,k),da(i,j,k),tmax(i,j,k)
- endif
- endif
- enddo
- enddo
- enddo
- enddo
- enddo
- enddo
- close(11)
- close(22)
- close(33)
- end program
-
复制代码
|
|