我有以下Fortran程序
PROGRAM main
IMPLICIT NONE
INTEGER :: i
INTEGER,dimension(:),allocatable :: x0
allocate(x0(1:25))
DO i=1,25
x0(i)=i
END DO
print*,"maxloc de x0 est 25, en effet",maxloc(x0)
print*,"Cinq fois maxloc(x0)",INT(maxloc(x0))
print*,"f applique a la fonction",f(maxloc(x0))
print*,"f1 applique a la fonction",f1(INT(maxloc(x0)))
CONTAINS
FUNCTION f(maxlocec)
IMPLICIT NONE
!Entrées
INTEGER,dimension(1) :: maxlocec
!Sorties
INTEGER,dimension(1) :: f
f=maxlocec**2
END FUNCTION f
FUNCTION f1(maxlocec)
IMPLICIT NONE
!Entrées
INTEGER :: maxlocec
!Sorties
INTEGER :: f1
f1=maxlocec**2
END FUNCTION f1
END PROGRAM
当我执行它时,出现以下错误消息:
print*,"f1 applique a la fonction",f1(INT(maxloc(x0)))
1
Error: Rank mismatch in argument 'maxlocec' at (1) (0 and 1)
我尝试过f1(maxloc(x0))
,但是它没有用,所以我认为f1(INT(maxloc(x0)))
可以,但是没有用。
maxloc
的输出似乎是一个整数,但不是。解决的方法是什么?
答案 0 :(得分:2)
maxloc例程不会返回int
,而是返回int
类型的大小为1的一维数组。
根据标准:
MAXLOC(ARRAY,DIM [,MASK,KIND,BACK])或 MAXLOC(数组[,掩码,种类,后退])
...
结果特征。整数。如果存在KIND,则为实物类型 参数是由KIND的值指定的;否则那种 type参数是默认整数类型的参数。如果DIM不 出现时,结果是排名为1且大小等于 ARRAY等级;否则,结果的等级为n − 1,形状为[d1, d2 ,。 。 。 ,dDIM-1,dDIM + 1,...。 。 。 ,dn],其中[d1,d2,。 。 。 ,dn]是 ARRAY的形状。
因此,在您的情况下,您可能需要:
print*,"f1 applique a la fonction",f1(maxloc(x0,1))