! 프로시저를 사용한 프로그램의 예
! 각 프로시저의 프로그램 작성 순서는 아래와 같다.
- 프로시저의 시작문 (module, program, subroutine, function, block data)
- 선언문(use 문, implicit none 문, 변수 선언문, ...)
- 실행문 (표현식, 선택구조, 순환구조, ...)
- 프로시저의 종료문 (end 문)
! 포트란 95는 1~132 칼럼 중 임의의 위치에 코딩할 수 있다.
! 한줄에 여러 명령문을 작성하려면, 각 명령문을 세미콜론(;)으로 구분한다.
! 내부 프로시저는 반드시 상위 프로시저에서만 사용가능
! 외부 프로시저는 별도로 컴파일되는 독립 프로시저. 반드시 주프로시저 밖에서 작성함.
! 프로시저 종료는 반드시 end 문 사용
! 각 프로시저에서 모듈을 호출할때는 use 문 사용하고, 프로시저 시작문 바로 다음 줄에 작성해야 함.
! 사용자가 변수 형과 속성을 정의하고 사용하겠다는 의미로 반드시 implicit none 문을 사용
! 변수선언은 변수형 :: 변수명들 로 표기한다. 이중 콜론(::)은 변수형과 변수명을 구분하는 용도
!모듈 프로시저 (반드시 주프로그램 앞에 위치해야)
module variablegroup
implicit none
integer :: i, j
real(kind=16) :: a, b
end module variablegroup
! 주 프로시저 (모든 연산과정을 제어하는 기능)
program mainprocedure
use variablegroup
implicit none
integer :: k
real(kind=16) :: c
i=1; j=2; a=3; b=4
call internalprocedure(c)
call externalprocedure(k)
write(*, "(' a+b = ', f10.2)") c
write(*, "(' +j=', i10)") k
contains ! 이하 프로그램이 내부 프로시저임을 나타내는 명령어
! 내부 프로시저 (주 프로시저의 일부분에 해당하는 프로시저)
subroutine internalprocedure(d)
use variablegroup !주 프로시저와 공유하므로 생략 가능
implicit none !주 프로시저와 공유하므로 생략 가능
real(kind=16) :: d
d=a+b
end subroutine internalprocedure
end program mainprocedure
! 외부 프로시저
subroutine externalprocedure(p)
use variablegroup
implicit none
integer :: p
p=i+j
end subroutine externalprocedure