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

作者: JiGo (ㄐㄍ)   2013-12-26 14:55:29
目前有一筆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行的地方是否有較好的語法可以自動更改我要讀取的項目數目?
或是我就只能回到程式碼去修改?
感謝各位的教學與幫忙!!

Links booklink

Contact Us: admin [ a t ] ucptt.com