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

看板Fortran作者 (ㄐㄍ)時間11年前 (2013/12/26 14:55), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/4 (看更多)
目前有一筆11x11的資料(二維陣列?) 每一個橫行的資料我都會分別做計算所以使用一維陣列去讀值 但是我要的資料只有矩陣的一半,對角線是右上到左下 如下: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1的部分是我要讀的值,並做一點計算 該部分的程式碼如下: !============================================================= CHARACTER*1000 FMT1,FMT2,FMT3,FMT4,FMT5 INTEGER ND,stat,I,J,K,L,M,N INTEGER, PARAMETER :: LYR=11 REAL U_B,U_A,U_1,U_2,U_3,U_4,U_5,U_6,U_7,U_8,U_9 !============================================================= FMT1='(AA(1X,ES11.4),BB(A0))' FMT2='(A___)' FMT3='(1X,ES11.4,__(12X),1X,ES11.4)' FMT4='(12X,__(1X,ES11.4))' FMT5='(AA(1X,ES11.4))' !============================================================= DO K=1,LYR L=LYR+1-K M=11-L WRITE(FMT1(2:3),'(I2)')L WRITE(FMT1(16:17),'(I2)')M CONTINUE 100 WRITE(109,FMT1)U(K),U(K+11),U(K+22),U(K+33),U(K+44),U(K+55) 1,U(K+66),U(K+77),U(K+88),U(K+99),U(K+110) END DO REWIND 109 DO K=1,LYR L=12*(LYR+1-K) M=LYR-1-K N=LYR+1-K WRITE(FMT2(3:5),'(I3)')L WRITE(FMT3(12:13),'(I2)')M WRITE(FMT4(6:7),'(I2)')M WRITE(FMT5(2:3),'(I2)')N CONTINUE READ(109,FMT2)Rline 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 103 WRITE(110,FMT5)U_B,U_1,U_2,U_3,U_4,U_5,U_6,U_7,U_8,U_9,U_A END DO !=============================================================== 在這裡我沒有列出計算的部分 我先把我要的值寫成一個類似對角矩陣的形式 再分別以行去讀值 101行是去讀該一維陣列的兩邊邊界值 102行則是去讀取邊界內包含的其他值 問題點在於說 當K=2時 102行的U_9是讀不到的 以此類推 在往後的情況下102行的項目可以讀到值的會越來越少 因此並無法去做計算及輸出 想請問對於102/103行所需要讀取/輸出的項目個數是否可以做調整? 並且想知道說在102行讀取到的值有哪些是可以用來做計算的 可以只用陣列的方法去達成我的目標嗎? 另外,如果我的陣列大小有改變 在第100行的地方是否有較好的語法可以自動更改我要讀取的項目數目? 或是我就只能回到程式碼去修改? 感謝各位的教學與幫忙!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.61.228
文章代碼(AID): #1IkzBc4n (Fortran)
文章代碼(AID): #1IkzBc4n (Fortran)