作者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