Re: [問題] 依照迴圈變數讀取陣列

看板Fortran作者時間11年前 (2013/12/28 12:57), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串4/4 (看更多)
我在想 如果你本來就是一個11x11的input data 你可以直接開個11x11的array 直接用簡單的迴圈把值都塞滿 以90/95的語法接下來你就可以直接簡單給值了 REAL*8 array(11,11) OPEN(UNIT=11,FILE'xxx.txt') DO J = 1, 11 READ(11,*) (array(I,J),I=1,11) END DO 這樣就一次都拿到值了 接下來你要怎麼處理應該都簡單了 再把U_A,U_B以及U_1~U_9一起開成一個U(11)的array更開心 以第I行來看 這樣array(I,1)就是U_A , array(I,11)就是U_B , array(I,2~10) 就是U_1~U_9 反正你有第I行可比判別 內部計算就只要利用count來判斷11-I就行 DO I = 1, 11 count = 11 - I result(I) = 0.0d0 !for UA result(I) = result(I) + array(I,1) !for U2~U9 DO J = 2 , count result(I) = result(I) + REAL(J,KIND=8)*array(I,J) END DO !for UB result(I) = result(I) + array(I,11) END DO 也就是不要寫開一個一個變數 而是都改由array處理 這樣子也不用麻煩要改讀取format的問題 輸出跟計算也更簡便 希望可以提供你一個方向囉 ※ 引述《JiGo (ㄐㄍ)》之銘言: : ※ 引述《snowanimal (動物先生)》之銘言: : : 1的部分是我要讀的值,並做一點計算 : : 如果我沒搞錯問題,那麼方法該跟下面的方式差不多。 : : 先聲明一點,因為太久沒用fortran,所以我無法保證語法的正確性。 : : do x=LYR,1,-1 (迴圈11次) : : array(x)=0.0 : : read (,)array(x) : : enddo : : 迴圈的變數可以由小變大,也可以由大變小。 : : 所以你就讓他從11格讀到剩下1格就好啦,然後計算的東西就包在迴圈裡面即可。 : : 我不確定是不是百分之百正確,因為太久沒用fortran,所以語法可能有誤。 : 應該這樣說 : 我是用下面的方式去讀值 : 101 READ(Rline,FMT3)U_B,U_A : 102 READ(Rline,FMT4)U_1,U_2,U_3,U_4,U_5,U_6,U_7,U_8,U_9 : FMT3和FMT4會隨迴圈數變化 : 先讀最外面的兩個值 : 再讀中間的其他值 : 但是在第二個迴圈的時候U_9因為不在格式中所以會有錯誤 : 第三個圈時U_8和U_9亦然 : 因此造成程式停擺 : 所以想問說在102行後面讀取值的編號與個數 : 要怎麼用成可以隨迴圈數改變 : 因為每個值都會用來計算 : 所以想對讀取到的每個值做編號 : 隨後可能就是利用 U_A+2*U_1+3*U_2+.......+n*U_B 之類的計算 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.137.135.74

12/28 18:41, , 1F
謝謝!!我大概有個概念囉~^^
12/28 18:41, 1F
文章代碼(AID): #1IlbeoGh (Fortran)
文章代碼(AID): #1IlbeoGh (Fortran)