If statement 将Go to语句从FORTRAN 77转换为FORTRAN 90

If statement 将Go to语句从FORTRAN 77转换为FORTRAN 90,if-statement,fortran,fortran90,fortran77,do-loops,If Statement,Fortran,Fortran90,Fortran77,Do Loops,我正在处理一段遗留的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,

我正在处理一段遗留的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

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

你的翻译有点错误。。。第一步是重建
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
导致“跳出循环”。在这个特定的示例中,这相当于退出,代码可以写成

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

如果你努力使一些代码现代化,请使用一些缩进,否则我看不出翻译有什么意义。同样值得注意的是:它已经是F90代码了。为了确保没有遗漏,您应该提到修改
a
b
以使
if
语句最终变为
.true的语句;您可以在示例代码中插入类似于“执行一些计算”的内容谢谢Vogt,让我试试这个。然而,我想知道的是,“如果”语句中没有“其他”条件。如果语句为false会发生什么?如果语句的计算结果为false,循环将继续进行下一次迭代,直到达到极限(在本例中为10次迭代)。