vvt 发表于 2017-2-1 10:02 我有个关于批量处理的问题发了个新帖 麻烦帮忙看一下吧 |
vvt 发表于 2017-2-1 10:02 嗯嗯 明白了 谢谢 |
你欠缺一点对程序的理解。 文件的行数,必须运行的时候才能判断,然后才能知道数组的大小。 运行以后才知道大小的数组,就得用动态数组。 有两个时间很重要:编译时,和运行时。 |
vvt 发表于 2017-1-31 23:46 谢谢,光照搬书上例子,把动态数组给忘了,还是要活学活用啊 |
本帖最后由 vvt 于 2017-1-31 23:48 编辑 [Fortran] 纯文本查看 复制代码 module typedef type tdd integer :: stat=0 real :: tmax , tmin , total , average end type end module PROGRAM MAIN USE typedef implicit none real::dy,rain INTEGER,PARAMETER::temp=365 type(tdd)::t(temp)! 保存气温值 type(tdd):: total !日均温累加 integer i open(7,file="GDNH94") read(7,*) do i=1,temp read(7,*)dy , t(i)%tmax , t(i)%tmin , rain t(i)%average=(t(i)%tmax+t(i)%tmin)/2 !日均温 total%average=total%average+t(i)%average !日均温累加=积温 enddo print *,total%average ! STOP end PROGRAM |
本帖最后由 wxy 于 2017-1-31 22:19 编辑 vvt 发表于 2017-1-31 21:52 嗯嗯 太感谢了 然后就是请问一下 temp=366,366其实是行数 ,我想用获取行数的代码赋给temp,理论上是否是对的,temp=366是声明数组大小吧,获取行数代码放在后面赋值给temp 好像顺序反了,如果理论上可以 应该放在什么位置 [Fortran] 纯文本查看 复制代码 PROGRAM MAIN USE typedef implicit none real::rain type(tdd),allocatable::t(:)! 保存气温值 type(tdd):: total !日均温累加 integer i , m , dy , start , end character(len=3) :: line open(7,file="CN019067") I=0 do READ(7,*,end=100) line i=i+1 end do 100 m = i - 1 !//你这个前面只多了一行 rewind(7) allocate( t(m)) read(7,*) write(*,*)"start:" read(*,*) start write(*,*)"end:" read(*,*) end do i=1,m read(7,*)dy , t(i)%tmax , t(i)%tmin , rain t(i)%average=(t(i)%tmax+t(i)%tmin)/2 !日均温 end do total%average = 0 do i=start,end total%average=total%average+t(i)%average !日均温累加=积温 enddo print *, dy,total%average ! end PROGRAM |
本帖最后由 vvt 于 2017-1-31 21:54 编辑 把 print 放到循环外面不就可以了? [Fortran] 纯文本查看 复制代码 I=0 do while (.true.) READ(8,*,end=100) line i=i+1 end do 100 CONTINUE m=i-4 rewind(8) 如果你要全部365个都读完,然后再计算start到end的平均值,可以这样 [Fortran] 纯文本查看 复制代码 do i=start,end read(7,*)dy , t(i)%tmax , t(i)%tmin , rain t(i)%average=(t(i)%tmax+t(i)%tmin)/2 !日均温 total%average=total%average+t(i)%average !日均温累加=积温 enddo print *, dy,total%average ! |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2024-12-24 00:25