본문 바로가기
학부 강의 노트/포트란 프로그래밍 (보충예제)

포트란 강좌 :: 프로그램 구성과 코딩 방법

by Dr. STEAM 2022. 6. 9.
반응형

Fortran 프로그램의 일반적인 형식

형식

program 프로그램명
    선언 부분
    실행 부분
    부프로그램 부분
end program 프로그램명

 

예문

program Example
    implicit none
    
    real :: distance, velocity,  &
            time
    real :: list
    integer :: list
    character(len = n ) :: list       ! 또는
    character( n ) :: list
    
    형선언자 :: v_1 = e_1, .... , v_n = c_n
    형선언자, parameter :: n_1 = c1, ... n_n = c_n

    read *, input-list
    print *, output-list
 
    stop


end program Example

 

포트란95 기본 코딩 방법

  1. 포트란은 영문 대소문자 구분하지 않음. 
  2. 사용가능한 특수문자 (=  +  -  *  /  (  )  ,  .     !  $  :  ;  %  &  <  >  ?  \  _)
  3. 하나의 프로그래밍 line은 최대 132 문자까지 작성가능. 1~132 컬럼 사이에서 자유롭게 작성
  4. line과 line을 연결하기 위해서는 앰퍼샌드( & )를 첫 줄 맨앞과 다음 줄 맨 뒤에 사용. 최대 39개 줄까지 연결 가능
  5. 하나의 line에 하나 이상의 명령문을 포함하려면 세미콜론( ; )으로 구분한다. 
  6. 느낌표( ! ) 뒤의 내용은 주석이다. 
  7. 문번호가 필요하면 모든 문장의 맨 먼저 나와야 하고, 1~99999 정수를 사용할 수 있다. 
  8. 문법적 오류 감소를 위해서 각 변수 하나하나를 변수명, 변수형, 변수의 기억 장소 크기 등을 사용자가 철저히 명시적으로 정의할 것. implicit none 을 사용하면, 명시적 선언이 우선하게 됨.
  9. 다층화 및 블록화 시킨 변수구조형 선언 (do순환구조나 블록 if 구조를 사용하여 프로그램의 블록화 또는 구조화 가능)
  10. 철저한 구조화 프로그램 작성
  11. 문번호의 사용 제한 (문번호 사용하지 말것!)

프로시저를 이용한 포트란 코딩 법

  • 프로시저의 시작문 (module, program, subroutine, function, block data)
  • 선언문(use 문, implicit none 문, 변수 선언문, ...)
  • 실행문 (표현식, 선택구조, 순환구조, ...)
  •  프로시저의 종료문 (end 문)
  1. 내부 프로시저는 반드시 상위 프로시저에서만 사용가능
  2. 외부 프로시저는 별도로 컴파일되는 독립 프로시저.  반드시 주프로시저 밖에서 작성함.    
  3. 프로시저 종료는 반드시 end 문 사용
  4. 각 프로시저에서 모듈을 호출할때는 use 문 사용하고, 프로시저 시작문 바로 다음 줄에 작성해야 함.
  5. 사용자가 변수 형과 속성을 정의하고 사용하겠다는 의미로 반드시 implicit none 문을 사용
  6. 변수선언은 변수형 :: 변수명들 로 표기한다. 이중 콜론(::)은 변수형과 변수명을 구분하는 용도

예문

!모듈 프로시저 (반드시 주프로그램 앞에 위치해야)
    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

 

728x90
반응형