| 
 
	积分11280贡献 精华在线时间 小时注册时间2015-9-9最后登录1970-1-1 
 | 
 
| 
本帖最后由 muggle 于 2017-7-14 11:48 编辑
x
登录后查看更多精彩内容~您需要 登录 才可以下载或查看,没有帐号?立即注册 
  
 我最近在编写一个用于筛选逐日最高温超过阈值的程序,遇到了一个我怎么都找不到错误的问题。
 
 我的目的是打算,按照年份,把每天的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
  
 
 
 | 
 |