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, 2025-12-23 12:26