모듈을 서브루틴의 인수로 사용

사다리꼴 적분 근사

모듈 부분

Module Integrand_Function

CONTAINS

FUNCTION Integrand(X)
REAL :: Integrand
REAL, INTENT(IN) :: X
Integrand = EXP(X**2)
END FUNCTION Integrand

END MODULE Integrand_Function

위 소스를 07_05_Inte_Mod.f95로 저장

메인 프로그램

PROGRAM Integral

USE Integrand_Function

IMPLICIT NONE

REAL :: A, B
INTEGER :: Number_of_Subintervals

WRITE (*, '(1X, A)', ADVANCE = "NO") &
"적분 구간의 처음과 끝, 그리고 구간 수를 입력하시오(ex 0, 1, 100 : "

READ * , A, B, Number_of_Subintervals

CALL Integrate(Integrand, A, B, Number_of_Subintervals)

CONTAINS

SUBROUTINE Integrate(F, A, B, N)

REAL, INTENT(IN) :: A, B
INTEGER, INTENT(IN) :: N
REAL :: F, DeltaX, X, Y, Sum
INTEGER :: I

DeltaX = (B - A) / REAL(N)

X = A
Sum = 0.0

DO I = 1, N - 1
X = X + DeltaX
Y = F(X)
Sum = Sum + Y
END DO

Sum = DeltaX * ((F(A) + F(B)) / 2.0 + Sum)

Print '(1X, I4, "개의 구간을 이용한 면적 = ", F10.5)', Number_of_Subintervals, Sum

END SUBROUTINE Integrate

END PROGRAM Integral

위 소스를 07_04_Integral.f95로 저장

모듈 소스로 오브젝트 파일을 만들고 메인 프로그램을 컴파일 해 봤음

프로그램 테스트



+ Recent posts