Re: [問題] 讀取兩筆資料 相乘 再輸出

看板Fortran作者 (依然動物先生)時間16年前 (2008/12/23 21:50), 編輯推噓5(505)
留言10則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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

12/23 21:55, , 1F
不過未來再寫能不用goto 建議盡量不要用 程式一多會亂
12/23 21:55, 1F

12/23 21:58, , 2F
不確定迴圈次數的東西我通常會用這個方法
12/23 21:58, 2F

12/23 22:09, , 3F
呵呵 我比較笨一點先去看資料筆數 再寫迴圈 ~ 受教XD
12/23 22:09, 3F

12/23 22:11, , 4F
之前處理20萬行的資料 我數都不敢數
12/23 22:11, 4F

12/23 22:30, , 5F
輸了 我只有處理9萬行 不過不是只要看最後一筆的行數
12/23 22:30, 5F

12/24 09:53, , 6F
如果不是ascii的格式...還是得暴力硬解
12/24 09:53, 6F

12/24 10:52, , 7F
嗯嗯 也是~
12/24 10:52, 7F

12/24 15:00, , 8F
do while、read的iostat和exit(離開迴圈)可以避開goto,
12/24 15:00, 8F

12/24 15:00, , 9F
不過總覺得有點多此一舉(我是比較喜歡啦…)
12/24 15:00, 9F

12/24 23:08, , 10F
為了避免弄錯 可以寫兩個程式來跑 先讀一次 再算一次?
12/24 23:08, 10F
文章代碼(AID): #19KEoKnY (Fortran)
討論串 (同標題文章)
文章代碼(AID): #19KEoKnY (Fortran)