Force 2.0 컴파일러와 편집기를 사용하고 있습니다. 다음 서브 루틴에서 기존 배열 KM(1:M)
의 값을 주 프로그램 EIKM(1:M)
의 계산에 사용하려하지만 얻은 값은 배열의 값과 일치하지 않습니다. 무엇이 잘못되었으며 무엇을해야합니까?서브 루틴에서 배열 값 호출
PROGRAM GENERATES_EIKM
IMPLICIT NONE
INTEGER I, M, N
PARAMETER (M=65, N=3)
REAL EIKM(1:M)
REAL ALFA, EPSILON, NU, PI
REAL U2RMS, KE, KEFISIENSI, KALI, KALE
REAL KM(1:M), LS
REAL KMLOW, KMHIGH, DELTAKM
KMLOW=100
KMHIGH = 10000
DELTAKM = (KMHIGH-KMLOW)/(M-1)
PI = 3.14
ALFA = 1.453
EPSILON = 10
NU = 7
LS = 23
KE = ALFA*9*PI/(55*LS)
KEFISIENSI = (EPSILON**(1/4))/(NU**(-3/4))
CALL CALLING_THE_VALUE_OF_KM (M)
WRITE (*,*) 'CHECKING THE VALUE OF KM AT DATA NUMBER 2 : ', KM(2)
DO I=1,M
U2RMS = (2/3*KM(I))**2
KALI = KM(I)/KE
KALE = KM(I)/KEFISIENSI
EIKM(I) = ALFA*(U2RMS/KE)*((KALI**4)/((1+KALI**2)**(17/6)))*
& EXP(-2*(KALE**2))
WRITE (*,*) 'THE VALUE OF EIKM AT (I) ', I, EIKM(I)
END DO
PAUSE
END
SUBROUTINE CALLING_THE_VALUE_OF_KM (M)
REAL KM(1:M)
INTEGER I
REAL KMLOW, KMHIGH, DELTAKM
KMLOW=100
KMHIGH = 10000
DELTAKM = (KMHIGH-KMLOW)/(M-1)
WRITE(*,*) 'START OF CALLING_THE_VALUE_OF_KM'
DO I=1,M
KM(I) = KMLOW + DELTAKM*(I-1)
WRITE(*,*) I, KM(I)
END DO
WRITE(*,*) 'END OF CALLING_THE_VALUE_OF_KM'
WRITE(*,*) '--------------------'
RETURN
END
프로그램 문과 일치하는'end'을 소스 파일의 끝으로 이동하십시오. 그 자리에 '포함하다'라는 단어를 씁니다. 컴파일러가 찾은 오류를 다시 컴파일하고 수정하십시오. 코드가 구조화되어 있으므로 컴파일러는 서브 루틴에 전달 된 인수가 예상 한 것과 일치하는지 확인할 수 없습니다. –
또한 2016 년 초보자는 Fortran 77을 배우지 않아야합니다. 최신 버전의 언어에 추가 된 많은 유용한 기능이 있으며 40 년 된 버전의 40 년 버전으로 제한하는 것이 의미가 없습니다. 언어. 그렇습니다. 여전히 막대한 기존 코드베이스와의 통합을 위해 포트란 77을 알아야하지만, 아예 쓰지 않아도됩니다. 재미 있어요,하지만 그 시작에 대한 질문을 볼 수 없어요. * Java 2를 배우고 있습니다. * –
누군가 어딘가 사람들 F77을 가르치고있는 것 같습니다. –