qs2017 发表于 2017-11-10 16:28:37

Fortran77子程序传递数组

老师让做个东西,读个77写的源代码,对数组这不太确定,大概如下:
ALLOCATABLE(A:)
ALLOCATE A(MSIZE)   MSIZE应该是分配给A的尺寸吧
DIMENSION A(*)
INTEGER A(*)
这时我取的A(2)代表什么啊?里头可以存几个数啊?
这里面对A的操作分别在几个不同的subroutine里。
谢谢大家!!!

qs2017 发表于 2017-11-10 16:55:20

有人吗:'(

vvt 发表于 2017-11-10 18:12:32

有 Allocatable 就不算是 77 的程序,至少是 90 的。

ALLOCATABLE A(:)   这是定义一个可以分配的数组 A
ALLOCATE A(MSIZE)这是给可以分配的数组 A 分配大小,大小是 MSIZE
DIMENSION A(*)   这是不负责任的定义 A 是一个数组(仅针对虚参),大小我不知道,你们要操作这个数组的话,自己看着办
INTEGER A(*)       差不多同上,但它强调了 A 是整数类型

qs2017 发表于 2017-11-11 08:27:25

vvt 发表于 2017-11-10 18:12
有 Allocatable 就不算是 77 的程序,至少是 90 的。

ALLOCATABLE A(:)   这是定义一个可以分配的数组 A


谢谢您的回答,A还是一个一维数组吗?我看到程序往A(2)里写入了190个数,这点实在不懂啊

vvt 发表于 2017-11-11 10:00:39

是一维的。看到有疑问的代码,请给出来。

qs2017 发表于 2017-11-11 11:12:35

vvt 发表于 2017-11-11 10:00
是一维的。看到有疑问的代码,请给出来。

我代码是在工作站上打开的,有设置也贴不出来,我尽量描述吧,就是定义完A后,有一个subroutine调用了A(2)然后读文件向数组里写数,子程序里读写这块命令为:
READ(NEN,1020) (RUNUSD,L=1,NL),
                            ((STORAG(IG,G2,L),L=1,NL),G2=IG2LO,IG2LO+NG2-2
其中,STORAG为数组A,然后NEN是要读取的文件的unit,其他类似NL,IG2LO的数都是之前赋值的一些常数。

qs2017 发表于 2017-11-11 11:14:28

vvt 发表于 2017-11-11 10:00
是一维的。看到有疑问的代码,请给出来。

还有1020是一个FORMAT(6E11.0)

vvt 发表于 2017-11-11 19:38:52

你说得非常模糊。
1. 定义 STORAG 是如何定义的?
2. 有一个subroutine调用了A(2),这什么意思?听不懂
3. 如果有函数调用,那么属于数组传递的问题。需要给出虚参的定义和对应实参的定义。
页: [1]
查看完整版本: Fortran77子程序传递数组