相关疑难解决方法(0)

为什么 Fortran DO 循环索引大于循环后的上限?

我正在查看用 Fortran 编写的空气质量模型的代码,并且对 fortran 从 do 循环中传递变量的方式有一些疑问。

这个非常简单的例子说明了我的意思:

   PROGRAM carla
   IMPLICIT NONE
   !
   INTEGER, PARAMETER :: LM = 24, DEZASSEIS = 16
   INTEGER            :: L, VARIAVEL, SOMA
   !
   DO L=1,LM
   WRITE(*,*) 'L = ', L
   END DO
   !
   WRITE(*,*) 'I am now ouside of the DO loop.'
   WRITE(*,*) 'I would expect L=LM=24... And SOMA=40'
   WRITE(*,*) 'L = ', L
   SOMA = DEZASSEIS + L
   WRITE(*,*) 'SOMA = ', SOMA
   END PROGRAM carla
Run Code Online (Sandbox Code Playgroud)

我希望 L=LM=24... 而 SOMA=40... 但我得到:

   L =           25 …
Run Code Online (Sandbox Code Playgroud)

fortran loops

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

可以在 Fortran 中重用函数结果吗?

我读过,取决于函数结果变量的值是非标准的 Fortran。

integer function my_sum(x, n)
  integer, dimension(n), intent(in) :: x
  integer              , intent(in) :: n

  integer :: i

  my_sum = 0
  do i = 1, n
    my_sum = my_sum + x(i) ! Error! Cannot re-use my_sum
  end do
end function
Run Code Online (Sandbox Code Playgroud)

相反,我们必须使用局部变量并在函数末尾对其进行赋值。需要明确的是,我并不期望该值在调用之间保存,而是在函数体内保存,就好像它是局部变量一样。

此说法在 Fortran 90 或更高版本中正确吗?它适用于我的编译器(英特尔),但我不确定这是否是标准的,并且除了在线随机大学幻灯片之外还没有找到任何东西。

编辑:我找到了函数名称的来源。它位于本演示文稿的幻灯片 4 中,链接来自官方 fortran-lang.org 网站。

函数中的某处必须有一个或多个如下所示的赋值语句:

函数名 = 表达式

其中表达式的结果保存到函数的名称中。

请注意,函数名称不能出现在任何表达式的右侧。

fortran

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

标签 统计

fortran ×2

loops ×1