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これで、「ループから飛び出す」結果になることがわかります。この特定の例では、これは に相当し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 に答える