2

我正在处理一段遗留 F77 代码并尝试将其转换为等效的 F90 代码。我在下面遇到了这些行,有人可以建议我的转换是否正确吗?

Fortran 77 代码:

Subroutine area(x,y,z,d)
do 15 j=1,10
if (a.gt.b) go to 20
15 CONTINUE
20 Statement 1
   Statement 2
   Statement 3
end subroutine

我尝试将其转换为 F90,结果如下:

Subroutine area(x,y,z,d)
  dloop: do j=1,10
    if (a>b) then 
      statement 1
      statement 2
      statement 3
    else
      write(*,*) 'Exiting dloop'
      exit dloop
    end if
  end do dloop
end subroutine

有人可以建议这种方法是否正确吗?在我的结果中,我没有得到我期望的结果。所以我的逻辑可能有问题。

4

1 回答 1

6

你的翻译有点错误......第一步是重建do循环,循环在15

Subroutine area(x,y,z,d)
do j=1,10
  if (a.gt.b) go to 20
enddo
20 Statement 1
   Statement 2
   Statement 3
end subroutine

现在您可以看到goto“跳出循环”的结果。在这个特定的例子中, this 等价于exit,并且代码可以写成

Subroutine area(x,y,z,d)
  do j=1,10
    if (a.gt.b) exit
  enddo
  Statement 1
  Statement 2
  Statement 3
end subroutine
于 2015-07-24T18:08:20.593 回答