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
QQ截图20170129210133.png (5.26 KB, 下载次数: 431)
vvt 发表于 2017-1-29 23:16
问题1. 在你的例子里,已经把所有文件中的365行,都读入到内存里(t数组)了,所以你可以自由的操作内存(t ...
module typedef
type tdd
integer :: stat=0
real :: tmax , tmin , total , average
end type
end module
PROGRAM MAIN
USE typedef
implicit none
real::rain
INTEGER,PARAMETER::temp=365
type(tdd)::t(temp)! 保存气温值
type(tdd):: total !日均温累加
integer i,dy,start,end
open(7,file="1988.txt")
write(*,*)"start:"
read(7,*) start
write(*,*)"end:"
read(7,*) end
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 !日均温累加=积温
print *,dy , t(i)%tmax , t(i)%tmin , rain , total%average !
enddo
STOP
end PROGRAM
QQ截图20170131113201.png (19.33 KB, 下载次数: 366)
vvt 发表于 2017-1-31 15:42
你可以:
1. 只读取 start 到 end 之间的数据,然后计算。
2. 读取所有数据,然后只计算 start 到 end 之间 ...
QQ截图20170131182927.png (22.54 KB, 下载次数: 372)
module typedef
type tdd
integer :: stat=0
real :: tmax , tmin , total , average
end type
end module
PROGRAM MAIN
USE typedef
implicit none
real::rain
INTEGER,PARAMETER::temp=366
type(tdd)::t(temp)! 保存气温值
type(tdd):: total !日均温累加
integer i , dy , start , end
open(7,file="CN019067")
read(7,*)
write(*,*)"start:"
read(*,*) start
write(*,*)"end:"
read(*,*) end
do i=1,start-1
read(7,*)
enddo
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 !日均温累加=积温
print *, dy,total%average !
enddo
STOP
end PROGRAM
QQ截图20170131211931.png (10.44 KB, 下载次数: 424)
vvt 发表于 2017-1-31 19:31
1.我不清楚你现在的代码是怎样的?数据文件是怎样的?你做了什么改动。因此,你的第一个问题我没办法回答。 ...
module typedef
type tdd
integer :: stat=0
real :: tmax , tmin , total , average
end type
end module
PROGRAM MAIN
USE typedef
implicit none
real::rain
INTEGER,PARAMETER::temp=366
type(tdd)::t(temp)! 保存气温值
type(tdd):: total !日均温累加
integer i , dy , start , end
open(7,file="CN019067")
read(7,*)
write(*,*)"start:"
read(*,*) start
write(*,*)"end:"
read(*,*) end
do i=1,start-1
read(7,*)
enddo
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 !日均温累加=积温
print *, dy,total%average !
enddo
STOP
end PROGRAM
QQ截图20170131211931.png (10.44 KB, 下载次数: 436)
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 !
PROGRAM MAIN
USE typedef
implicit none
real::rain
INTEGER,PARAMETER::temp=366
type(tdd)::t(temp)! 保存气温值
type(tdd):: total !日均温累加
integer i , dy , start , end
open(7,file="CN019067")
read(7,*)
write(*,*)"start:"
read(*,*) start
write(*,*)"end:"
read(*,*) end
do i=1,temp
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:52
把 print 放到循环外面不就可以了?
I=0
do while (.true.)
READ(8,*,end=100) line
i=i+1
end do
100 CONTINUE
m=i-4
rewind(8)
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 23:46
[mw_shl_code=fortran,true]PROGRAM MAIN
USE typedef
implicit none
vvt 发表于 2017-2-1 10:02
你欠缺一点对程序的理解。
文件的行数,必须运行的时候才能判断,然后才能知道数组的大小。
运行以后才知道 ...
vvt 发表于 2017-2-1 10:02
你欠缺一点对程序的理解。
文件的行数,必须运行的时候才能判断,然后才能知道数组的大小。
运行以后才知道 ...
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) | Powered by Discuz! X3.2 |