!! 포트란95는 구조화된 프로그래밍이 가능하다.
구조의 종류
- 프로시저구조
- 변수선언구조 (type)
- 선택구조 (if-then-elseif-then-else-endif)
- 순환구조 (do-loop, do-while, forall)
1. 프로시저구조
프로시저는 특정 기능을 발휘하는 프로그램 단위나 블록을 의미
대표적인 프로시저: program, subroutine, function, module, block data
내부 프로시저
- 내부 프로시저는 contains로 호출한다.
- 내부 프로시저 내에서 서브루틴과 함수 프로시저를 사용할 수 있다.
- 내부 프로시저는 호출하는 프로시저의 변수명을 고유할 수 있다.
- 내부 프로시저는 호출하는 프로시저에만 작용할 수 있다.
- 내부 프로시저 내에서 독립적인 변수 선언도 가능하다
- 모든 내부 프로시저를 외부 프로시저로 작성할 수도 있다.
외부 프로시저
- 외부 프로시저로 작성하면 모듈 프로시저를 반드시 호출하여 인수로서 자료값을 전달할 수 있고, 이 값들의 기억장소만 공유할 수 있다.
- 외부 프로시저는하나의 프로그램 단위이므로 독립적으로 컴파일 된다.
2. 변수형 선언구조
사용자가 직접 사용할 변수를 정의하는 선언문들을 하나의 블록에 모아 작성한 프로그램 구조
종류:
1) 모듈 프로시저 (부프로시저들을 하나의 구조로 작성한 module)
변수, 배열, 부프로그램, 함수 프로시저도 선언할 수 있다.
각 프로시저에서 use 문으로 호출하여, 모듈 프로시저에서 정의한 변수 및 프로시저를 사용할 수 있다.
2) 파생형 변수 선언구조
3. 변수형
기본 5가지: integer, real, complex, chracter
복소수형 변수는 실수부와 허수부를 각각 4, 8, 16 바이트로 선언할 수 있다.
배정도 실수형 변수 선언을 위한 logical, double precision
기본 5가지 변수형을 이용하여 변수 속의 변수를 선언하는 파생변수 선언구조 (파생형) 를 작성할 수 있다. 예를 들어, 성적표를 작성하는 프로그램의 경우, 학번(정수형), 이름(문자형), 과목당 성적(실수형), 총점과 평균 (실수형), 학점(문자형)의 복합적인 변수형을 임의로 선언할 수 있다. 이때, 변수(a) 속의 변수값(b)을 사용할 때는 특수문자 %를 사용하여 a%b 로 표기하여 변수속의 변수값에 접근할 수 있다 (예제 생략)
! 변수선언구조를 이용한 프로그램의 사용예
module username
implicit none
real(kind=16) :: a, b, c ! 4배정도 실수형 변수 선언
end module username
program mainprocedure
use username ! use문은 작성 우선순위가 높아 반드시 implicit none 보다 먼저 위치해야 함.
implicit none
! 변수 선언부
real(kind=16) :: d
write(*,*) a, b, c
read(*,*) a, b, c
d = b * b -4 * a * c ! 판별식
write(*,*) d
if (d < 0) then
call complexroots
else
call realroots
end if
pause
contains ! 내부 프로시저를 호출
subroutine realroots
implicit none
real(kind=16) :: r1, r2
if (d > 0) then
r1 = (-b + sqrt(d))/(2*a)
r2 = (-b - sqrt(d))/(2*a)
else
r1 = -b/(2*a)
r2 = r1
end if
write(*,*) ' roots : ' , r1, r2
end subroutine realroots
subroutine complexroots
implicit none
real(kind=16) :: r1, r2
r1 = cmplx(-b/(2*a), sqrt(-d)/(2*a))
r2 = cmplx(-b/(2*a), sqrt(-d)/(2*a))
write(*,*) ' coplex roots : ' ,r1, r2
end subroutine complexroots
end program mainprocedure