求一个能批处理求和的Fortran程序!
样本是:sample.dat数字项初始数值102030......20000一共在sample.dat里包含两千个数字项,后面的初始数值为0。然后读一系列的result文...
样本是:
sample.dat
数字项 初始数值
1 0
2 0
3 0
... ...
2000 0
一共在sample.dat里包含两千个数字项,后面的初始数值为0。
然后读一系列的result文件(一共100个),每个包含1到2000个不等的数据项。
比如Result_1.dat里为
1 0.1
2 0.2
3 0.3
在Result_2.dat里可能有
1 0.2
2 0.4
10 0.8
132 1
1873 34
每个单独的result里包含的数据项个数不同,范围在1-2000内。
求一个Fortran程序,能辨别结果与sample.dat中对应的数据项,然后将数据项后面的数值从初始的0开始累加起来。(全部是100个result.dat,也就是从0开始累加最多100次,最少为0次)
比如假设1这个数字出现了100次,每次它后面的数值都是1, 希望最终结果是
1 100
如果在运行过程中始终找到对应数据项,则输出该数字并且后面的数值为0。
着急用,多谢!
1 100
如果在运行过程中始终找 不 到对应数据项,则输出该数字并且后面的数值为0。
少了个字,抱歉! 展开
sample.dat
数字项 初始数值
1 0
2 0
3 0
... ...
2000 0
一共在sample.dat里包含两千个数字项,后面的初始数值为0。
然后读一系列的result文件(一共100个),每个包含1到2000个不等的数据项。
比如Result_1.dat里为
1 0.1
2 0.2
3 0.3
在Result_2.dat里可能有
1 0.2
2 0.4
10 0.8
132 1
1873 34
每个单独的result里包含的数据项个数不同,范围在1-2000内。
求一个Fortran程序,能辨别结果与sample.dat中对应的数据项,然后将数据项后面的数值从初始的0开始累加起来。(全部是100个result.dat,也就是从0开始累加最多100次,最少为0次)
比如假设1这个数字出现了100次,每次它后面的数值都是1, 希望最终结果是
1 100
如果在运行过程中始终找到对应数据项,则输出该数字并且后面的数值为0。
着急用,多谢!
1 100
如果在运行过程中始终找 不 到对应数据项,则输出该数字并且后面的数值为0。
少了个字,抱歉! 展开
展开全部
sample.dat里的数字项一定是1到2000吗?这个程序应该可以。
注意:程序里的nn是result文件的个数,result文件必须存为Result_1.dat、Result_2.dat以此类推。
××××××××××××××××××××××××××××××××××××××××××××××××××
character*(20) filename,str
dimension a(2000,2),num(2000),c(2000)
real a,c
do i=1,2000
num(i)=i
c(i)=0.0
enddo
nn=100
do k=1,nn
write(str,*) k
str=adjustl(str)
str=trim(str)
filename=trim('Result_'//str)//'.dat'
call get_n(filename,n)
open(12,file=filename,status='old')
do i=1,n
read(12,*) (a(i,j),j=1,2)
enddo
close(12)
call cumul(n,a,c)
enddo
open(13,file='sample.dat',status='unknown')
do i=1,2000
write(13,*) num(i),c(i)
enddo
close(13)
end
subroutine get_n(filename,n)
character*(*) filename
real temp
n=0
open(11,file=filename,status='old')
do while(.not.eof(11))
read(11,*) temp
n=n+1
enddo
close(11)
end subroutine
subroutine cumul(n,a,c)
dimension a(2000,2),c(2000)
real a,c
do i=1,n
k=int(a(i,1))
c(k)=c(k)+a(i,2)
enddo
end subroutine
××××××××××××××××××××××××××××××××××××××××××××××××××
注意:程序里的nn是result文件的个数,result文件必须存为Result_1.dat、Result_2.dat以此类推。
××××××××××××××××××××××××××××××××××××××××××××××××××
character*(20) filename,str
dimension a(2000,2),num(2000),c(2000)
real a,c
do i=1,2000
num(i)=i
c(i)=0.0
enddo
nn=100
do k=1,nn
write(str,*) k
str=adjustl(str)
str=trim(str)
filename=trim('Result_'//str)//'.dat'
call get_n(filename,n)
open(12,file=filename,status='old')
do i=1,n
read(12,*) (a(i,j),j=1,2)
enddo
close(12)
call cumul(n,a,c)
enddo
open(13,file='sample.dat',status='unknown')
do i=1,2000
write(13,*) num(i),c(i)
enddo
close(13)
end
subroutine get_n(filename,n)
character*(*) filename
real temp
n=0
open(11,file=filename,status='old')
do while(.not.eof(11))
read(11,*) temp
n=n+1
enddo
close(11)
end subroutine
subroutine cumul(n,a,c)
dimension a(2000,2),c(2000)
real a,c
do i=1,n
k=int(a(i,1))
c(k)=c(k)+a(i,2)
enddo
end subroutine
××××××××××××××××××××××××××××××××××××××××××××××××××
展开全部
IMPLICIT NONE
INTEGER::I,K
REAL::S(2000)
CHARACTER FN*8,F*3
FN='R000.DAT'
S=0
DO I=1,100
WRITE(F,'(I3.3)') I
FN(2:4)=F
OPEN(9,FILE=FN)
DO WHILE(.NOT.EOF(9))
READ(9,*) K,S
S(K)=S(K)+A
ENDDO
CLOSE(9)
ENDDO
OPEN(10,FILE='sample.dat')
DO I=1,2000
WRITE(10,*) I,S(I)
ENDDO
CLOSE(10)
END
INTEGER::I,K
REAL::S(2000)
CHARACTER FN*8,F*3
FN='R000.DAT'
S=0
DO I=1,100
WRITE(F,'(I3.3)') I
FN(2:4)=F
OPEN(9,FILE=FN)
DO WHILE(.NOT.EOF(9))
READ(9,*) K,S
S(K)=S(K)+A
ENDDO
CLOSE(9)
ENDDO
OPEN(10,FILE='sample.dat')
DO I=1,2000
WRITE(10,*) I,S(I)
ENDDO
CLOSE(10)
END
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Fortran?
现在还有人学(教)这么老掉牙的东东?
现在还有人学(教)这么老掉牙的东东?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询