作者snowanimal (依然动物先生)
看板Fortran
标题Re: [问题] 读取两笔资料 相乘 再输出
时间Tue Dec 23 21:50:09 2008
※ 引述《shockbon (bonbon)》之铭言:
: 小弟是fortran初学者
: 想请教高手一些问题
: 我想要将两笔资料作相乘如
: DATA1 DATA2
: a b a d
: 0 0.1 0 2
: 0.0625 0.2 0.0625 4
: 0.1250 0.3 0.1250 6
: 0.1875 0.4 0.1875 8
: 0.25 0.5 0.25 10
: . . . .
: . . . .
: . . . .
: . . . .
: 类推
: 最後输出的结果
: DATA3
: a b*d
: 0 0.1*2
: 0.0625 0.2*4
: 0.1250 0.3*6
: 0.1875 0.4*8
: 0.25 0.5*10
: . .
: . .
: . .
: . .
: 目前想到的方法可能是用do回圈作
: 不知道各位高手有没有别的想法
: 可以让小弟参考
: 附上目前程式码(有错)
: program resultdate3
: implicit none
: integer i
: real a,b,c,d
: integer datanumbers=5857 !全部资料点
: type(datanumber) :: da(datanumbers)
: open(unit=11,file='data1.dat',status='old')
: open(unit=22,file='data2.dat',status='old')
: open(unit=33,file='result.dat',status='unknow')
: do i=1,datanumber
: read(11,*) da(i)%a,da(i)%b
: read(22,*) da(i)%c,da(i)%d
: write(33,*) a,b*d
: end do
: stop
: end
我猜你第一行的文字没读到 所以会错?
最简单的作法就是:读一行,算一行,写一行。
原则上你的想法是对了,只不过是程式内文出了点错误。
建议:
1. b*d 结果请先计算,接着再写入档案。
2. 写入档案建议设定好format,不然看起来会很乱
3. 宣告要完整,其实不必用矩阵就可以读完整个档案。
以下程式码请自行改写(不用do 也可以回圈)
10 read(11,*,end=20)
goto 10
20 continue
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.228.144.98
1F:推 meteorology:不过未来再写能不用goto 建议尽量不要用 程式一多会乱 12/23 21:55
2F:→ snowanimal:不确定回圈次数的东西我通常会用这个方法 12/23 21:58
3F:推 meteorology:呵呵 我比较笨一点先去看资料笔数 再写回圈 ~ 受教XD 12/23 22:09
4F:→ snowanimal:之前处理20万行的资料 我数都不敢数 12/23 22:11
5F:推 meteorology:输了 我只有处理9万行 不过不是只要看最後一笔的行数 12/23 22:30
6F:→ snowanimal:如果不是ascii的格式...还是得暴力硬解 12/24 09:53
7F:推 meteorology:嗯嗯 也是~ 12/24 10:52
8F:推 blc:do while、read的iostat和exit(离开回圈)可以避开goto, 12/24 15:00
9F:→ blc:不过总觉得有点多此一举(我是比较喜欢啦…) 12/24 15:00
10F:→ snowanimal:为了避免弄错 可以写两个程式来跑 先读一次 再算一次? 12/24 23:08