Re: [問題] 依照迴圈變數讀取陣列
我在想
如果你本來就是一個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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章