gpt4 book ai didi

fortran - 如何从 Fortran 函数访问全局变量

转载 作者:行者123 更新时间:2023-12-01 18:44:17 24 4
gpt4 key购买 nike

具体来说,我正在尝试模仿 the solution to Project Euler 31在 Fortran 语言中。为了做到这一点,我需要读取一系列硬币。由于该函数是递归的,因此该函数将被调用多次,我不想每次都将列表作为参数传递,因为如果我有大量列表的副本,代码就会有负载的内存开销。此外,在之前的问题中,比如简化分数的函数,我需要传递一个非常大的列表。所以我的问题是:在 Fortran 中,如何从函数访问主程序中定义的变量。它是否可以实现?如果不能,intent(in) 对减少内存重复有多大帮助?

如有必要:

RECURSIVE FUNCTION NWAYS(AMOUNT,CUR_COIN,) RESULT(RES)
IMPLICIT NONE
INTEGER :: AMOUNT, CUR_COIN, RES, COINS !Coins is a list defined in the main program
RES = 0
IF (CUR_COIN<=1) THEN
RES = 1
RETURN
END IF

DO WHILE(AMOUNT>=0)
RES = RES + NWAYS(AMOUNT,CUR_COIN-1)
AMOUNT = AMOUNT-COINS(CUR_COIN)
END DO

RETURN

END FUNCTION NWAYS

最佳答案

执行此操作的标准方法是在模块中定义变量并在函数中使用该模块。所以你会得到类似的东西:

module var_mod
integer, allocatable :: coins(:)
end module var_mod

program euler
use var_mod
...
allocate (coins(ncoins))
...
recursive function nways (...)
use var_mod
...

现在在nways中,数组硬币是可见的,你不必每次都传递它。我将硬币设置为可分配的,以便您可以在主程序中将其分配到所需的大小。

关于fortran - 如何从 Fortran 函数访问全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52213331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com