小编L5R*_*5RK的帖子

Fortran中的标量值究竟是什么,以及如何从它们转换为它们

一些背景.我有这段代码:

function areeq(array1,array2) result(eq)
real :: array1(1:100,1:100), array2(1:100,1:100)
logical :: eq
integer :: x,y,f
do x=1,100
  do y = 1,100
    print *,array1(x:x,y:y)
    print *,array2(x:x,y:y)
    if(.not.(array1(x:x,y:y) == array2(x:x,y:y))) then
      eq = .false.
      return
    end if

    read *,f
  end do
end do
eq = .true.
return
end function
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行它时,它会抛出此错误消息:

if(.not.(array1(x:x,y:y) == array2(x:x,y:y))) then
       1
Error: IF clause at (1) requires a scalar LOGICAL expression
Run Code Online (Sandbox Code Playgroud)

这是我第二次遇到需要Scalar的问题,尽管我最后一次成功地进行了临时工作,但我真的应该并且需要能够正确处理它们.

所以,TL; DR:这段代码出了什么问题,在这种情况下我应该怎样做呢?

fortran

4
推荐指数
1
解决办法
137
查看次数

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

具体来说,我试图模拟Fortran中Project Euler 31的解决方案.为了做到这一点,我需要从一系列硬币中读取.由于函数是递归的,因为函数将被调用次数,我不希望每次都必须将列表作为参数传递,因为如果我有大量的列表副本,代码就会有负载内存开销 此外,在以前的问题中,比如简化分数的函数,我需要通过一个非常大的列表.所以我的问题是:在Fortran中,如何从函数中访问主程序中定义的变量.它是否可以实现,如果没有,有多少意图(帮助)减轻任何内存重复?

如有必要:

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
Run Code Online (Sandbox Code Playgroud)

fortran

2
推荐指数
1
解决办法
201
查看次数

如何设置Fortran Integer类

program PEU3
integer(kind=7) :: num = 600851475143
integer(kind=7) :: pf, counter 
Run Code Online (Sandbox Code Playgroud)

这是我的fortran代码的一部分.Num非常大,所以我试图将它设置为kind = 7,但由于某种原因它仍然抛出错误217 - 整数(Kind = 3)常量超出范围,对于声明num的行,即使我已经声明了num应该是善良的7.我已经有一段时间了,并且无法理解为什么它不会起作用.非常感谢帮助.我的IDE是柏拉图,带有silverfrost编译器,如果它是相关的.

fortran fortran95

1
推荐指数
1
解决办法
389
查看次数

标签 统计

fortran ×3

fortran95 ×1