[问题] 依照循环变量读取阵列

楼主: 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