我在想
如果你本来就是一个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 之类的计算