0

텍스트 파일에서 측정 된 값을 읽고이를 매트릭스에 저장하는 Fortran 77 (저는 인텔 포트란을 사용하고 있습니다)에 서브 루틴을 작성해야합니다.Fortran 77의 동적 배열

측정 된 값의 수는 항상 가변적이므로 매트릭스를 동적으로 할당해야합니다.

나는 역동적 인 할당이 Fortran 90에서만 가능하다는 것을 알고 있지만, 당시 사람들은 똑같은 문제가 있었기 때문에 가능했습니다. 어떻게 진행 하시겠습니까?

방법이 실용적이지 않기 때문에 매트릭스에 너무 많은 공간을 예약하고 싶지 않습니다.

+0

http://stackoverflow.com/questions/3834985/dynamic-memory-allocation-in-fortran77 –

+0

동적 메모리 할당이 필요한 경우 Fortran 77을 2016 년에 작성하지 마십시오. 가치가 없습니다. 이전 Fortran 90을 사용할 수 없다면 C로 물건을 할당하고 Fortran 서브 루틴으로 전달하십시오. –

+1

레거시 시스템에서 FORTRAN 77을 사용하는 이유가 있습니다. 인텔 포트란을 사용할 때 FORTRAN 77을 사용할 이유가 없습니다. –

답변

2

실제로 Fortran 77로 제한된 경우 동적 할당을 수행하지 않습니다. 대신 타겟 시스템에서 프로그램이 실행되는 것을 방지하기에는 너무 크지 않으면 서 필요하다고 생각하는 것보다 큰 배열을 선언하십시오. 그런 다음 큰 배열에 값을 저장하고 사용하는 큰 배열의 요소 수를 개별적으로 추적하십시오. 선택한 배열 크기가 충분하지 않은 경우 사용자에게 프로그램을 알리고 종료하십시오.

사람들은 Fortran 77에서 동적 할당이 부족하다는 사실을 매우 제한적으로 인식하여 비표준 언어 확장을 사용하는 경우가 많았습니다. 언어 확장 경로를 결정했다면 요즈음 Fortran 77의 가장 좋은 확장은 Fortran 90에서 소개 된 할당 가능한 배열 기능입니다. Fortran 77은 Fortran 90 할당 배열을 처리 할 것이다.

+0

고마워요. 이미 정적으로 할당하는 것이 더 쉽다고 생각했습니다. 나는 두 가지 방법을 시도 할 것이지만, 정적으로 기울인다. – ingenium

0

많은 사람들이 지적했듯이, 이미 작성된 내용 중 많은 부분이 Fortran77과 호환되는 경우에도 Fortran77을 고수 할 필요가 없습니다. Fortran 95 See Wikipedia for a list에서 삭제 된 몇 가지 기능조차도 고정 된 양식에서 동일한 파일의 자유 양식으로 전환하지 않는 한 컴파일러는 계속 작동합니다.

Pre-F90, 사람들이하는 일은 어떤 유스 케이스에 대해서 충분히 큰 (기대되는) 배열을 선언 한 다음 그 배열의 첫 번째 요소 만 사용하는 것입니다.

내가 알지 못하지만 유용 할 수있는 한 가지는 범위 변경입니다. 짧은 예 :

 subroutine main(n) 
      implicit none 
      integer n 
      integer a(n) 
      print*, "Please enter the ", n, " numbers" 
      read*, a 
      print*, "Sum is ", sum(a) 
     end subroutine main 

     program dynamic 
      implicit none 
      integer n 
      print*, "Enter size of array:" 
      read*, n 
      call main(n) 
     end program dynamic 

이것이 Fortran77 호환인지 여부를 알고 싶습니다. 나는 정직하게 모른다. @francescalus는 내가 그렇지 않다고 확신했습니다.

+0

마지막 단락의 경우 : F77이 아닙니다. – francescalus

+0

메시지가 섞여 있습니다. 오라클은 조정 가능한 로컬 어레이가 F77을 준수한다고 생각하는 것 같습니다 : https://docs.oracle.com/cd/E19957-01/805-4939/z40007367199/index.html 다른 리소스는 조정 가능한 배열은 가짜 인수 일 뿐이며, 로컬 배열이 아닙니다. 여기 : https://www.obliquity.com/computer/fortran/procedure.html – chw21

+1

오라클 설명서에서 "local array @"를 참고하십시오. "@"는 비표준 확장을 나타냅니다. – francescalus