看板 Fortran 關於我們 聯絡資訊
※ 引述《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
meteorology:不過未來再寫能不用goto 建議盡量不要用 程式一多會亂 12/23 21:55
snowanimal:不確定迴圈次數的東西我通常會用這個方法 12/23 21:58
meteorology:呵呵 我比較笨一點先去看資料筆數 再寫迴圈 ~ 受教XD 12/23 22:09
snowanimal:之前處理20萬行的資料 我數都不敢數 12/23 22:11
meteorology:輸了 我只有處理9萬行 不過不是只要看最後一筆的行數 12/23 22:30
snowanimal:如果不是ascii的格式...還是得暴力硬解 12/24 09:53
meteorology:嗯嗯 也是~ 12/24 10:52
blc:do while、read的iostat和exit(離開迴圈)可以避開goto, 12/24 15:00
blc:不過總覺得有點多此一舉(我是比較喜歡啦…) 12/24 15:00
snowanimal:為了避免弄錯 可以寫兩個程式來跑 先讀一次 再算一次? 12/24 23:08