728x90
반응형

논리 데이터형 (Logical data type)

 

Fortran에는 .TRUE. , .FALSE. 두가지 논리형 상수가 있다.

 

형식

    LOGICAL :: V1, V2, ...

 

    V1 은 논리형으로 선언되는 변수

 

다른 형선언문들처럼 프로그램의 선언부에 위치해야 한다. 

또한 자동서식 입출력이 가능하다. 

 

예문

    logical :: Trues, Falses   

        Trues = .true.

        Falses = .false.

   print *, Trues, Falses, .true., .false.

 

 

자동서식 입력을 사용할때는 .T..F.를 입력해야 한다. 

    logical :: True, False   

    read *, A, B, C

 

입력값이

   .T., fall, .TRUE 이면

 

결과

    T F F

 

    

 

   print *, A, B, .true., .false.

 

 

반응형
728x90
반응형

CASE 구문

IF-ELSE IF 구문과 같이 광범위하게 사용하지는 않지만, 몇몇 선택구조를 구현하는데 유용한 CASE 구문

 

 SELECT  CASE (선택자 index)

        CASE (expression 1)

          statement 1

        CASE (expression 2

            statement 2

                :

        CASE(expression n)

            statement n

  END SELECT

 

선택자 index는 정수, 문자, 논리식이 될 수 있다. expression은 선택자가 가질 수 있는 값의 목록 또는 DEFAULT 이다. 

CASE 구문이 실행될 때, 선택자가 expression 1 값에 해당된다면, 문블럭1이 실행되고 END SELECT 문 다음에 나오는 문으로 이동한다.

선택자가 expression 1값에 해당되지 않을 경우,

DEFAULT 문이 있으면 DEFAULT 와 연관된 문블럭이 실행되고,

DEFAULT 문이 없으면 SELECT CASE  구문 다음의 문으로 이동한다. 

 

 

 

기명 CASE 구문

CASE 구문에도 이름을 붙일 수 있다. 

형식

구문명: SELECT CASE (index)
                       
            END SELECT 구문명

 

 

예문

Heros : select case (HeroCode)
        case(1) 
            print *, "Superman"
        case (2) 
            print *, "Spyderman"
        case (3) 
            print *, "Ironman"
        case (4) 
            print *, "Batman"
        default
            print *, "Wonder Woman"
end select Heros

   

            

 

 

연습문제 

1. 점수 (score)90점 이상이면 ’excellent’ , 80점 이상이면,  ’good’, 70점 이상이면 ’fair’를  70점 미만이면 “bad”를 출력하는 프로그램을 작성하시오. 이를 case문을 이용해서 작성하시오

반응형
728x90
반응형

단순 논리 IF 구문

      IF (논리식) 실행문

(논리식)이 참이면 실행문이 실행되고, 거짓이면 넘어간다.

 

 if (2.0 <= x .and. x <= 4.0) print *, x

 

이는 아래의 블럭 IF 문과 같다. 

      IF (논리식) THEN

          문블럭

      END IF

(논리식)이 참이면 문블럭이 실행되고, 거짓이면 넘어간다. 두 경우 모두 END IF 문 다음 부터 실행이 계속된다. 

단순 if문의 경우, 문블럭에 다른 if문을 사용할 수 없다. 

 

   if (a >= 0) then 
       x = a * a
       y = sqrt(a) 
   end if

   

블럭 IF 문 (일반적인 형태의 IF문)   

   IF (논리식) THEN

       문블럭1

    ELSE

      문블럭2

   END IF

(논리식)의 참, 거짓을 구별하여 명령문 수행.

논리식이 이 참이면 문블럭1만 실행되고, 거짓이면, 문블럭2만 실행됨. 두 경우 모두 END IF문 다음으로 실행이 이어짐. 

Program test_if
  implicit none
	real :: a=1, b=2, c=3,d
	d = b**2 – 4 * a* c
	if ( d>=0 ) then
		print*,’실근’
	else
		print*,’허근’
	endif
End program test_if

IF-ELSE IF 구문

       IF (논리식1) THEN

            문블럭1

       ELSE IF (논리식2) THEN

                 문블럭2

       ELSE IF (논리식3) THEN

                 문블럭3

               :

       ELSE

                 문블럭n

       END IF

주의! 들여쓰기를 통해서 if, else, end if 간의 혼돈을 줄여야 한다.

 

 

기명 IF 구문(named construct)

구문명 : IF (논리식) THEN

              :

             END IF 구문명

 

예)

outer: if (x > longer ) then 

                 longer = x

                 y = longer * 2

      inner: if (y < shorter) then 

                       print *, " Short "

                 else

                       y = 2.0

                 end if innner

          end if outer

 

 

 

연습문제

1. 다음 IF 문이 타당한지 결정하라.

  • if(a>b) print*, a
  • If b<c n= n+1
  • If(x<=y) stop
  • If(a=x) read*,y
  • If(1<=N<=10) N= 10

2. 점수 (score)가 90점 이상이면 ’excellent’ 를, 80점 이상이면,  ’good’을, 70점 이상이면 ’fair’를  70점 미만이면 “bad”를 출력하는 프로그램을 IF문을 사용하여 작성하시오.

 

3-5. 아래 IF문 실행 결과를 쓰시오. 

3.

If ( x> 3 ) then
	if ( x< 6 ) then
		print*,’x:’,x
	endif
endif

4.

If ( x<3) then
	print*,’x:’,x
else if (x>6) then
	print*,’x:’,x
endif

5.

If ( x<3) then
	if ( x>6) then
		print*,’x:’,x
	endif
endif

6-8. 다음 순서도를 보고 코딩하라.

6. 

7.

 

8.

9.

반응형
728x90
반응형

논리식 (logical expression)

단순 논리식(simple logical expression)

형식

 

1. 논리상수 (.TRUE. 또는 .FALSE.)

2. 논리변수

3. 아래 관계식 형태  

      expr1 관계연산자 expr2    (expr는 수치 또는 문자식)

 

관계 연산자

기호 의미
<
>
<=
>= 
==
/=
.LT.
.GT.
.LE.
.GE.
.EQ.
.NE.
~보다 작은
~보다 큰
~보다 작거나 같은
~보다 크거나 같은 
~와 같은
~와 같지 않은

주의!

  • == 는 같음을 표시하는 관계 연산자 
  • = 은 대입 연산자

 

수치형 데이터

x < 7 에서 x 가 5 이면 참, 8이면 거짓이다. 

 

a ** 3 >= 3.0 * b * c  의 경우, 수치연산이 논리식보다 우선 실행되므로, (a ** 3) >= (3.0 * b * c ) 와 같다. 

 

문자형 데이터

문자 데이터는 각 문자마다 할당된 ASCII코드 값으로 프로그램 내부에서 사용된다. 

A, B, ..., Z를 각각 65,66,..., 90

a, b, ..., z 를 97,98, ... 122

 

"A" < "F"        => 참

"dog" > "cat"  => 참   ("d" > "c" 이므로)

 

길이가 다른 두 문자열은 공백을 추가하여 큰 길이 문자열과 동일하게 만들어 비교한다. 

"treat" < "treatment"    은 참이고 "treat฿฿฿฿" < "treatment"   로 해석된다. 왜냐하면 공백은 모든 문자에 선행하기 때문이다. 

 

 

 

복합 논리식 (compound logical expression)

논리 연산자

논리연산자 의미 우선순위
.NOT.
.AND.
.OR.
.EQV.
.NEQV.
(부정)
(논리곱)
(논리합)
(논리등가)
(논리비등가)
1
2
3
4
4

진리표

p q p .AND. q p .OR. q p .EQV. q p .NEQV. q
.TRUE.
.TRUE.
.FALSE.
.FALSE.
.TRUE.
.FALSE.
.TRUE.
.FALSE.
.TRUE.
.FALSE.
.FALSE.
.FALSE.
.TRUE.
.TRUE.
.TRUE.
.FALSE.
.TRUE.
.FALSE.
.FALSE.
.TRUE.
.FALSE.
.TRUE.
.TRUE.
.FALSE.

만약 논리식이 수치연산자, 관계연산자, 논리연산자가 섞여있다면, 실행 순서는 아래와 같다.

1. 수치(함수)연산

2. 관계연산

3. 논리연산

 

예)

   a ** 2 + 1 > 10 .and. .not. a < 3 은 참이고,   ( a ** 2 + 1 > 10 ) .and. .not.  (a < 3 )으로 해석된다. 

   b == 1 .or. 2 은 (b == 1) .or. 2 와 같으나 유효하지 않다. 왜냐하면 2가 논리식이 아니기 때문이다. 

 

예문 (복합논리식)

program logical_appl

	implicit none
	real :: X=-3.56, Y=0.0, Z=44.7
	integer :: M=-5, N=8

	print*, "1)"
	if (M <= N) print*, "M 은 N 보다 작거나 같다."
	
	print*, "2)"
	if (2 * abs(M) <=8) then
		print*, "절대값 M의 두배는 8보다 작거나 같다."
	else
		print*, "절대값 M의 두배는 8보다 크거나 같다."
	endif
	
	print*, "3)"
	if ( nint(z) == (6 * N - 3) ) print*, "Z에 가장 가까운 정수는 N의 6배에서 3을 뺀 것과 같다."
	
	print*, "4)"	
	if (.not. (X < Y)) then 
		print*, "X가 Y보다 작지 않다."
	else 
		print*, "X가 Y보다 작지 않은 것이 아니다."
	endif
	
	print*, "5)"
	if (.not. ((M > N) .and. (X < Z)) .neqv. ((M <= N) .and. (X >= Z))) then
		print*, "'M이 N보다 크고 동시에 X가 Z보다 작은것'과 'M이 N보다 작거나 같고 동시에 X가 Z보다 크거나 &
	    같다는 것'이 논리적으로 서로 같지 않다는 것이 아니다."
	endif	  
		
end program logical_appl

 

 

연습문제

1. 다음의 표현식을 써라.

  • x 는 3보다 크다.
  • y 는 2 와 5 사이의 값이다.
  • r 은 음이고 z 는 양이다.
X > 3
Y > 2.and. Y<5
R < 0.and. Z > 0

 

2. 다음의 표현식을 써라.

  • alpha 와 beta 는 둘 다 양이다.
  • alpha 와 beta 는 같은 부호를 가진다.
  • –5 < x < 5
  • A는 6보다 작거나 혹은 10보다 크다
Alpha  > 0 .and. beta >0
(Alpha > 0 .and. beta > 0).or. 
    (Alpha < 0 .and. beta < 0)
X> -5.and.X<5
A <= 6.or. A > 10
 
반응형
728x90
반응형
입력문 : 변수값들을 입력 - read
  • 표준입력문 : 키보드로 입력
출력문 : 변수값들을 출력 – print / write
  • 표준출력문 : 화면으로 출력

입력(input)과 출력(output) - 자동서식 입출력문

1. 입력문

형식

read *, input-list    
또는
read(* , *)  input-list

  input-list에는 변수 등이 올 수 있고,  input값들은 키보드를 통해서 입력되고 input-list에 할당된다.

  프로그램이 실행 중 read문을 만나면, input-list의 모든 변수값의 입력이 될 때까지, 프로그램 실행은 일시 중지되고, 입력이 완료되면 다음 실행지점으로 자동 이동한다. 

input 값을 입력할 때의 규칙

1. read문이 실행될 때 마다, 입력대기 줄(line)에 데이터를 입력할 수 있다.

2. 입력목록의 변수 갯수 보다 입력된 데이터 수가 적으면, input-list의 모든 변수에 값이 입력될 때까지 새로운 줄을 만들고 입력을 대기한다. 

3. 입력목록의 변수 갯수 보다 입력된 데이터 수가 많으면, 먼저 입력된 데이터 순서로 입력되고 나머지 데이터는 무시된다. 

4. 입력될 자료는 input-list에 있는 변수들과 갯수 및 데이터형이 일치해야 한다.단, 정수와 실수 형을 따르지 않으면 형선언에 따라 자동 변환된다.

5. 입력 대기 줄에서 연속되는 데이터 입력은 콤마( , )나 하나 이상의 공백으로 구분해야 한다. 

 

수치형 자료 입력

read*, x, y, z  
!   => 입력창에서 10., 20., 30.  을 입력하면
!   => x=10. y=20. z=30.                        
read*, velocity, distance 
!   => 입력창에서 20.5, 500., 40.  을 입력하면
    => velocity =20.5 distance=500. (40은 무시)
character(8) :: unit_1, unit_2
read*, unit_1, unit_2
!   => 입력창에서 meter, centimeter 입력
!   => unit_1 = “meter   “
!   => unit_2 = “centimeter”

  

문자형 자료 입력

문자열도 자동서식 입력을 이용할 수 있다. 그러나, 다음의 경우 따옴표(' ') 나 쌍따옴표(" ")로 묶어야 한다. 

1. 문자열의 길이가 한 줄을 넘는 경우

2. 문자열이 빈칸, 콤마( , ), 사선( / )을 포함하고 있는 경우

3. 문자열이 생략부호, 쌍따옴표, period( . ) 로 시작하고 asterisk(*) 가 이어 나오는 경우

 

   character(7) :: chr_1, chr_2

   read *, chr_1, chr_2

 

   입력창에 다음과 같이 입력하면 

    meter, kilometer 

 

    chr_1에는 "meter฿฿", chr_2에는 "kilomet"이 입력(할당)된다.

 

2. 출력문

output 형식

   print *, output-list, ...     
   또는
   write (*,*) output-list, ...

   output-list 에는 변수, 문자형 상수, 수식 등이 올 수 있다.  output-list 없이 사용하면 빈 줄이 출력된다. 

 

예문1

distance=500
print*,distance
print*, “distance is”, distance
print*, “distance  is”, distance, “meters.”

예문2

   print *, "The speed of sound is ", velocity, " m/sec."
   print *, "The distance of travel is ", distance, " m."

 출력 

   The speed of sound is 340.0 m/sec.
   The distance of travel is 1000.0 m.

 

 

 

>>>>> 연습문제 p47

 

반응형
728x90
반응형

할당문 (Assignment statement) 또는 대입문

변수(v)에 식(e)을 부여하는데 아래와 같은 형식을 사용

                                   v = e

 

정수형, 실수형 변수 할당

   real :: xloc, yloc

   integer :: number, calc

 

   xloc = 5.23

   yloc = sqrt(25.0)              ! yloc 에 5.0이 할당

   number = 20                    ! number 에는 20이 할당

   calc = number / 4+1         ! calc에 5가 할당

   xloc =  2.0 *  xloc              ! xloc 에 10.46이 할당

 

선언된 변수형에 따라, 변수 내 할당된 값이 달라질 수 있음에 유의해야 한다. 

   real :: a, b 

   a = 3                           !  a는 실수형 변수이므로 a에 3.0이 할당된다. 

 

   iron = 3.14    ! iron 에 3이 할당. implicit none을 선언하지 않았으므로 explicit 규칙을 따름

   kiss = 4.0/2.0  ! kiss 에 2가 할당

 

 

문자형 변수 할당

  character(5) :: string, over, less*10

  string = "Alpha"        ! string 에 "Alpha"가 할당.

 

  string(3 : 5) = "ter"    ! 또는 string(3 : ) = "ter"

  string에 할당된 "Alpha"를  "Alter" 로 변경시킴

 주의: 대입문 오른쪽에 인용된 문자식에 포함된 위치에는 새로운 값이 할당될 수 없다. 

  string(2 : 3) = string(4 : 5)는 가능하지만, 

  string(2 : 4) = string(3 : 5) 는 불가능. 왜냐하면 참고되는 내부 문자열이 수정되는 내부 문자열과 중복되기 때문

 

 

문자형의 경우, 선언된 변수의 길이는 할당되는 값의 길이와 같다. 만약 문자열의 길이가 선언된 길이보다 작으면 공백으로 채우고, 선언된 길이보다 크면 잘리게 된다. 

  less = "particle"         ! less에는 "particle฿฿" 가 할당됨. (฿는 공백)

  over = "concentration"    ! over 에는 "conce" 가 할당됨

 

예문

program print_name
      character :: fname = "Park"
      character(2) :: iname = "Park"
      character(3) :: jname = "Park"
      character(3) :: kname = "park"

      print *, fname
      print *, iname
      print *, jname
      print *, kname
   end program print_name

 

 

 

반응형
728x90
반응형

연산(Operation)과 함수(Function)

연산자

  • 산술연산자  ( **, *, /, +, -  )
  • 관계연산자  ( ==, /=, >=, <=, > , < )
  • 논리연산자   (.not. , .and. , .or. , .eqv. , .neqv.  )
  • 문자연산자  ( // )
* 연산자들의 계산 우선 순위: 산술연산자, 관계연산자, 논리연산자
 
산술식: 산술연산자 ( **, *, /, +, - ) 와 결합된 표현식
관계식: 관계연산자(==, /=, >=, <=, > , < ) 와 결합된 표현식
논리식: 논리연산자 (.not. , .and. , .or. , .eqv. , .neqv.  ) 와 결합된 표현식
문자식: 문자연산자(//)와 결합된 표현식

 

기호 우선순위 이름 사용법
수학식 Fortran 표기
( ) 1 괄호 a+b(x+y) a+b*(x+y)
** 2 거듭제곱 xa x**a
* 3 곱셈 a x b a * b
/ 나눗셈 a a/b
b
+ 4 덧셈 a+b a+b
- 뺄셈 a-b a-b

 

수치연산

주의: 

산술연산을 하면 결과는 피연산자의 유형과 같아진다.

3 + 4    => 7

3.0 + 4.0  => 7.0

 

9.0 / 4.0    => 2.25

9/4    => 2

 

1.0 / 2.0    => 0.5

1/2.0    => 0

 

정수와 실수를 혼합해서 사용하면, 정수는 실수로 전환되고 결과도 실수형이 된다. 

아래는 같은 연산이지만 결과가 다른 예이다. 

3.0 + 8 / 5    =>    3.0 + 1            =>    3.0 + 1.0    =>   4.0

3 + 8.5 / 5    =>    3 + 8.0 / 5.0    =>    3 + 1.6       =>   3.0 + 1.6      =>   4.6

 

2.0 ** 3       =>    2.0 * 2.0 * 2.0    => 8.0

(-4.0) ** 2   =>    (-4.0) * (-4.0)       => 16.0

(7.0) ** (1/2) 는 (7.0) ** 0 = 1.0 으로 계산될 수 있다. 주의!

 

산술 표현의 우선순위 규칙

1. 모든 지수계산은 제일 먼저 실행된다. 연속적인 지수항은 오른쪽에서 왼쪽 순서로 실행

2. 그 다음으로 곱셈과 나뭇셈이 왼쪽에서 오른쪽으로 실행된다.

3. 마지막으로 덧셈, 뺄셈이 왼쪽에서 오른쪽으로 실행된다. 

 

 

 

문자연산 (Character operation)

두개의 문자열을 결합하려면 연결연산자 (//)를 사용한다. 

예) "Kilo" // "meters" => "Kilometers"

 

문자열에서 특정 문자를 추출하는 경우, 

   character(4) :: last_name = "Park"

   character(11) :: first_name = "Chang-Hyoun"

   print *, first_name//" "//last_name

 

   source = "sugar"

   source(:3) => "sug" 값을 가짐

   source(4:) => "ar฿฿" 값을 가짐 (฿은 공백을 의미)

 

내장함수 또는 수치함수(Numerical Functions)

포트란 내장함수

  • abs(x) x의 절대값
  • cos(x) x 라디안의 코사인 함수 값
  • sin(x)
  • tan(x)
  • exp(x) 지수함수
  • int(x) x의 정수부
  • fraction(x) x의 소수부
  • floor(x) x보다 작거나 같은 가장 큰 정수
  • log(x) x의 자연로그
  • mod(x,y)  int(x/y) * y
  • nint(x) x에 가장 가까운 정수
  • real(x) x를 실수형으로 변환
  • float(x) x를 실수형으로 변환
  • sqrt(x) x의 제곱근
  • max(x1, x2, x3, ...) 최대값
  • min(x1, x2, x3, ...) 최소값

 

연습문제

1. 주어진 표현식의 결과를 구하여라
  • 2+3/5
  • (2+3)**2
  • 25.01**1/2
  • (2.0 + 3**2 ) /( 8-2+1)
  • abs (1-2-4)
  • int (5.0 + 4.0/ 3.0 )
  • “one”//”two”

2. 다음과 같이 변수가 주어졌을 때, 다음 표현식의 결과?

    TWO=2.0

    THREE=3.0

    FOUR=4.0

    IntEight=8

    IntFive=5

    Str_1 = For

    Str_2 = tran

    Label_1=foot

    Label_2=lbs

 

1)    TWO+THREE * THREE

2)    IntFive/3

3)    (THREE+TWO/ FOUR )**2

4)    IntFive**2 / TWO**2

5)    Str_1//Str_2//-90

6)    Label_1// //Label_2

7)    Str_2(2:3)//ndom

 

 

3. 다음 식을 fortran 표현식으로 써라

1) 10+5B-4AC
2) A2 + B2 – 2AB cos T
 
4. 다음 식의 계산값을 구하는 프로그램을 작성하라. 
   Y=7x4 + 3x3 + 4x2 + 2x + 1

   x=40, y=?

 
 
반응형
728x90
반응형

Fortran의 기본적인 5가지 데이터 유형

수치형 상수 

  • 정수형 integer
  • 실수형 real
  • 복소수형 complex

비수치형 상수 

  • 문자형 character
  • 논리형 logical

 

사용 예

 

  정수형 실수형
고정형 지수형
바른 예 0
137
-2315
+17745
1.234
-0.01536
+56473.
3.372E2
0.3372E3
337.2E0
33720E-2
잘못된 예 9,999
16.0
--5
7-
12,345
63

 

  문자형 (문자열) 논리형
바른 예 PDQ123-A
‘C.H. Park
Dont
.TRUE.
.FALSE.
잘못된 예 PDQ123-A
Dont

.T.
.F.
True
False

 

정수형

소수점(.), 콤마(,)를 갖지 않는 십진수

 

실수형

십진수나 지수표현으로 나타냄.

소수점(.)은 허용되나 콤마(,)는 허용되지 않음.

예) 2.37456E2, 23745.6E-2 모두 2.37456x10^2을 의미

 

문자열 (또는 문자형 상수)

쌍따옴표(" ") 또는 따옴표(' ')로 둘러싸야함.

상수의 길이는 문자의 갯수이고 공백도 문자로 포함시킴.

예) "C.H. Park", "Don't"

 

 

변수 (Variable)

수치형 변수 

  • 정수형 integer
  • 실수형 real
  • 복소수형 complex

비수치형 변수 

  • 문자형 character
  • 논리형 logical

형식

     형선언 :: 변수명1, 변수명2, ...

      형선언 :: 변수명1 = 값1, 변수명2 = 값2, ...

 

컴파일러는 변수를 메모리 위치와 연결시킨다. 어떤 변수의 값은 연결된 메모리에 저장되어 있는 값이다.

각 변수에 대해서 부여되는 값의 유형을 정하기 위해서 형선언을 사용한다. 

변수는 주어진 데이터 유형에 맞게 사용되어야 하고, 그렇지 않으면 프로그램이 올바로 작동하지 않을 수 있다. 따라서, 개개의 변수형을 정확히 지정하는 것은 매우 중요하다. 이렇게 하지 않으면, 서로 다른 유형의 값이 결합(연산)되거나 어떤 변수에 그 변수형과 다른 형의 값이 할당되면 혼합모드 오류(mixed-mode error)를 야기할 수 있다. 

 

변수명 작성 규칙 

첫 글자는 반드시 영문자로 시작하고 30개까지의 문자, 숫자, 밑줄(_)로 구성할 수 있으나 나머지 특수문자 사용 불가. 

Fortran은 문자형 외에는 상수 대소문자를 구분하지 않는다.

예) Lightening_McQueen

 

예문 

    integer :: record_number, ...

    real :: temperature_1st, pressure_sfc

    character(len = 15) :: first_name, last_name, ...

    character(len=15) :: initial*12  이라고 지정하면 변수 initial 의 크기는 20이 아니고 12이다. 

    logical :: True_or_False

 

implicit none 문

Fortran은 내부적으로 지정자(또는 변수명)가 i,j,k,l,m,n 으로 시작하면 그 지정자는 자동으로 정수형으로 지정되고, 그 외 문자는 실수형으로 지정된다. 따라서, 이런 내부 명명 규칙을 무력화 시키기 위해서 implicit none 문을 사용한다. Fortran 77 때 부터 지정된 규칙이므로, implicit none 문을 사용해서 명시적으로 형을 선언하겠다고 하고 프로그래밍하도록 한다.

 

변수 초기화 

변수는 초기에 정의되지 않은 상태이므로 초기화가 필요하다. 초기화를 하지 않은 경우 잘 못 된 값이 계산될 수 있다. 

예문

    integer :: numvalues=1, Sum=0  

    real :: W=1.0, X=2.5, Y=7.73, Z=-2.956

    character(len=9) :: name =“C. H. Park

    logical :: flag = .true.

 

명명된 상수 : parameter 속성

어떤 상수는 주어진 이름을 가지고 있다. 예를 들어 "pi"는 원주율 상수 3.141592... , "e"는 2.71828... 이다. 

아래와 같이  parameter 속성을 부여함으로 명명된 상수로 지정하는 것을 허용할 수 있다.

이는 프로그램 전체에서 사용할 상수를 지정해서 상수명만 불러오면 되므로, 숫자가 바뀌면 모든 값이 자동으로 변하기 때문에 프로그래밍이 간단해 진다. 

    integer,  parameter :: limit = 30

    real, parameter :: pi = 3.141592, TwoPi = 2.0 * pi

    character(2), parameter :: units = "km"

    character(*), parameter :: units= "km" 

               !여기서 별표(*)는  명명된 문자형 상수(unit)의 길이가 할당된 문자열 상수 ("km") 의 길이인 2라는 뜻이다. 

 

 

 

선언문 

implicit none 문

   Default 형선언 (i,j,k,l,m,n 으로 시작하는 모든 변수는 정수형 변수임)을 사용하지 않고, 사용자 위주의 형선언을 사용하기 위한 명령문

형식

    program  program_name

        implicit none

 

상수 선언문 - parameter  문

    pi = 3.141592 와 같이 항상 동일한 값(상수)로 사용되는 변수를 선언할 때 사용 
형식 
    형선언, parameter :: 변수명 = 값
예문
    real, parameter :: pi = 3.14
    character(2), parameter :: units = "km"
 

 

연습문제 

1. 재코딩하기

    program reformatting; integer :: degreef &

        , degreec ; read *, &

         degreef ; degreec &

          =5*(degreef-32)/9; print*, &

          degreec; end program reformatting

 

 

2. 선언문 중 잘못된 부분 수정

1) ReAl :: x

2) CHARACTER :: name

3) CHARACTER(LEN=10) :: name

4) REAL :: var-1

5) integer :: 2a

6) logical :: wibble = .true.

7) logical (len=12) :: frisnet

8)character(len=6) :: you_know = yknow

9) integer :: ia ib ic id

 

name type initial value
feet   
miles  
town
home_town
in_Busan
sin_half
integer 
real
character (< 20 letters)
character ( < 20 letters)
logical 
real



your home town 
is your home town in Busan?
0.47942

 

 

 

 

 

 

반응형
728x90
반응형

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
반응형

순환구조의 종류

1. DO (횟수 제어 순환구조)

    (구조명 : ) do [var = 초기값, 끝값, (증분)]

                          실행문

                      end do

do 이후 [ ] 내용이 없는 구조도 가능

 

2. DO WHILE (조건적 순환구조)

    (구조명 : )  do while (조건)

                           실행문

                      end do 

 

 

 

!! f(x) = x^3 + 4x^2 - 10 = 0 근을 bisection method (이분법) 로 계산하는 프로그램(2)

program bisection
    implicit none
    integer :: i, maxit    ! 4바이트 정수형 선언
    real(kind=16) :: a, b, x, p, fa, fb, fp, tol, f    ! 16바이트 실수형 선언

    f(x) = ( x + 4 ) * x * x - 10       !   문함수로서 프로시저 내에서의 한줄 함수식을 표현
10  print *, ' type a and b : '
    read *, a, b
!! 이하 이분법 계산과정    
    if ( a > b ) then 
        x = a
        a = b
        b = x
    end if
    fa = f(a)
    fb = f(b)
    if ( fa * fb > 0.0 ) then 
        print *, 'f(a) and f(b) have same signs ! ' 
        goto 10
    else
        print *, ' Input tolerance '
        read *, tol
        print *, ' Input maximum number of iterations ' 
        read *, maxit
    end if


loop : do while (abs(fp) > 1.0e-20 .and. (b-a)/2 < tol .and. i <= maxit ) 
            i = i + 1    
            print *, ' ** p, i, f(p) ' , p, i, f(p)
            
inner :     if (fa * fp > 0) then        ! 구조명 inner 인 순환구조 시작
                a = p         
                fa = fp    
            else        
                b = p         
                fb = p    
            end if inner        
            p = a + (b-a)/2 
            fp = f(p)
          end do loop    
end program bisection


       


    

DO WHILE 순환구조

구조명 : do while (조건)

           실행문들 ...

              end do 구조명

 

조건의 자료값이 참일때만 실행

반응형
728x90
반응형

순환구조의 종류

1. DO (횟수 제어 순환구조)

    (구조명 : ) do [var = 초기값, 끝값, (증분)]

                          실행문

                      end do

do 이후 [ ] 내용이 없는 구조도 가능

 

2. DO WHILE (조건적 순환구조)

    (구조명 : )  do while (조건)

                           실행문

                      end do 

 

 

 

(예제)

f(x) = x^3 + 4x^2 - 10 = 0 근을 bisection method (이분법) 로 계산하는 프로그램
이분법 계산과정


1) 입력한 양 끝단점  a,b의 함수 f(a), f(b)의 부호가 같으면 a,b 사이에 근이 없다. 
2) f(a), f(b)의 부호가 다르면 a, b, 사이에 근이 존재
3) 근이 있는 경우, 중앙점 p를 계산하고 함수 f(p)를 계산한다. 
4) f(a)와f(p)의 부호가 같으면, 근은 p와 b사이에 존재하므로 p를 a라 놓고 다시 계산
5) f(a)와f(p)의 부호가 다르면, 근은 p와 a사이에 존재하므로 p를 b라 놓고 다시 계산
6) 근이 있는 점들의 간격이 허용치보다 작으면 계산은 종료
7) 반복횟구가 허용치를 넘어도 계산 종료
8) 함수 f(p)가 0에 가까우면 p가 근이 되므로 계산 종료. 

    
    program mainprocedure
    implicit none
    integer :: i, maxit    ! 4바이트 정수형 선언
    real(kind=16) :: a, b, x, p, fa, fb, fp, tol, f    ! 16바이트 실수형 선언

    f(x) = ( x + 4 ) * x * x - 10       !   문함수로서 프로시저 내에서의 한줄 함수식을 표현
10  print *, ' type a and b : '
    read *, a, b
!! 이하 이분법 계산과정    
    if ( a > b ) then 
        x = a
        a = b
        b = x
    end if
    fa = f(a)
    fb = f(b)
    if ( fa * fb > 0.0 ) then 
        print *, 'f(a) and f(b) have same signs ! ' 
        goto 10
    else
        print *, ' Input tolerance '
        read *, tol
        print *, ' Input maximum number of iterations ' 
        read *, maxit
    end if


loop : do i = 1, maxit         ! 구조명 loop 인 순환구조 시작. 다중 구조의 경우, 구조명으로 분리하는게 편리
        p = a + ( b - a ) /2 
        fp = f(p)

outer : if(abs(fp) <= 1.0e-20 .or. (b-a)/2 < tol) then  ! 구조명 outer 인 순환구조 시작
            print *, ' Final results ' 
            print *, 'p, i, tol ', p, i, tol
            exit loop                ! 순환구조를 완전히 벗어나는 분기 명령어
        else
            print *, 'p, i, tol ', p, i, tol    
inner :     if (fa*fp > 0) then        ! 구조명 inner 인 순환구조 시작
                a = p         
                fa = fp    
            else        
                b = p         
                fb = p    
            end if inner        
        end if outer
end do loop    
pause
end program mainprocedure
반응형
728x90
반응형

Select Case 문 

program mainprocedure
    implicit none
    intrinsic modulo           
    ! modulo(a,b)는 a를 b로 나눌때 나머지를 계산하는 내장함수. 값이 0이면 a는 b의 배수임.
    integer :: year, month, days
    
10  print *, ' type year and month ? '    
    ! print * 은 표준 출력장치(화면)을 사용할 경우. write(*,*)와 같은 의미
    if (year <= 0)   
    
    select case (month)
        case (4,6,9,11)
        days = 30
    case (2)
        if (modulo(year, 4) == 4) then 
            days = 29
        else 
            days = 28
        end if
    case default
        days = 31 
    end select
    
    print *, " The number of dasy in month : ", month, ' is ', days
    goto 10
end program mainprocedure

반응형
728x90
반응형

선택구조를 사용한 프로그램의 사용 예

  1. 간단한 IF 문 사용
  2. 블록 IF 문 사용

 

1. 간단한 IF문 사용

 

program mainprocedure
    implicit none
    integer :: month, days
10  print *, ' Tyep a month ?'   
    read *, month    ! 표준 입력장치(키보드)를 통해서 입력 받을 경우
    
    if(month ==1) days=31
    if(month ==2) days=29
    if(month ==3) days=31
    if(month ==4) days=30
    if(month ==5) days=31
    if(month ==6) days=30
    if(month ==7) days=31
    if(month ==8) days=31
    if(month ==9) days=30
    if(month ==10) days=31
    if(month ==11) days=30
    if(month ==12) days=31
    
    if (month < 1 .or. month > 12) stop    ! 해당하는 달이 존재하지 않으면 무조건 종료한다.
    print *, ' Month:days ', month, days
    goto 10   !! 결과 출력 후 무조건 goto 문에 의해 다음 자료를 입력받기 위해 문번호 10으로 분기한다. 
    
end program mainprocedure

 

 

 

2. 블록 IF문 사용  

앞의 코드를 아래와 같이 수정할 수 있다.

program mainprocedure
    implicit none
    integer :: month, days
10  print *, ' Tyep a month ?'
    read *, month
    
    if(month ==1) then ; days=31
    else if(month ==2) then ;  days=29
    else if(month ==3) then ; days=31
    else if(month ==4) then ;  days=30
    else if(month ==5) then ;  days=31
    else if(month ==6) then ;  days=30
    else if(month ==7) then ;  days=31
    else if(month ==8) then ;  days=31
    else if(month ==9) then ;  days=30
    else if(month ==10) then ;  days=31
    else if(month ==11) then ;  days=30
    else if(month ==12)  then ; days=31
    else ; stop
    endif
        
    print *, ' Month:days ', month, days
    goto 10
    
end program mainprocedure

 

 

 

반응형
728x90
반응형
반응형
728x90
반응형

!! 포트란95는 구조화된 프로그래밍이 가능하다.

 

구조의 종류 

  1.  프로시저구조 
  2. 변수선언구조 (type)
  3. 선택구조 (if-then-elseif-then-else-endif)
  4. 순환구조 (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

 

 

반응형
728x90
반응형

! 포트란95는 자유로운 형식으로 코딩할 수 있다.

 


! 3x2 배정도 실수형 배열 a, b의 요소 덧셈, 뺄셈, 곰셉 결과를 요소로 하는 배열을
    ! 각각 c,d,e 일때 자유형식으로 작성한 프로그램

! 자유형식 프로그램의 편리함을 보자 


    program freeform

    implicit none
    
    real(kind=8), dimension(3,2) :: a=1, b=2, c,d,e  ! 배열변수 선언
    
    write(*,*) a
    write(*,*) ' '
    write(*,*) b
    write(*,*) ' '
    write(*,*) c
    write(*,*) ' '
    write(*,*) d
    write(*,*) ' '
    write(*,*) e
       c = a + b; d = a - b ; e = a * b              ! 배열명만으로 계산 가능

       write(*,*) ' '
       write(*,*) a,b,c,d,e         ! 계산결과 출력
    
    pause
    end program freeform

 

 

 

 

반응형
728x90
반응형

! 프로시저를 사용한 프로그램의 예

! 각 프로시저의 프로그램 작성 순서는 아래와 같다. 

  • 프로시저의 시작문 (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

 

 

 

 

 

 

반응형
728x90
반응형

university of cambridge department of physics computational physics self-study guide 2 programming in fortran 95 dr. rachael padman michaelmas 2007 - Google 검색

 

university of cambridge department of physics computational physics self-study guide 2 programming in fortran 95 dr. rachael pad

University of Cambridge Department of Physics Computational Physics Self-study guide 2 Programming in Fortran 95 Dr. Rachael Padman Michaelmas 2007 Contents ...

www.google.co.kr

https://www.mrao.cam.ac.uk/~rachael/compphys/SelfStudyF95.pdf

 

 

https://www.tutorialspoint.com/fortran/index.htm

 

Fortran Tutorial

Fortran Tutorial Fortran was originally developed by a team at IBM in 1957 for scientific calculations. Later developments made it into a high level programming language. In this tutorial, we will learn the basic concepts of Fortran and its programming cod

www.tutorialspoint.com

Home - Fortran Programming Language (fortran-lang.org)

 

Home - Fortran Programming Language

Features High performance Fortran has been designed from the ground up for computationally intensive applications in science and engineering. Mature and battle-tested compilers and libraries allow you to write code that runs close to the metal, fast. Stati

fortran-lang.org

 

반응형
728x90
반응형

Intel Fortran 컴파일러와 MS Visual Studio 설치 

개발자는 코딩을 기계어로 번역해 주는 컴파일러와 프로그래밍을 편리하게 작업할 수 있는 IDE(Inegrated Development Environment) 두 가지를 개발환경으로 가지고 있어야 합니다. 

윈도우 상에서 작업하기 위해서, Intel 포트란 컴파일러와 MS Visual Studio 설치하는 방법을 소개합니다. 

MS Visual Studio 는 미리 설치해 뒀다는 가정 하에 설명합니다. 만약 설치하지 않았다면 oneAPI Toolkits 을 설치하는 중간에 설치하는 옵션이 있으니 바로 아래 순서대로 따라하면 됩니다. 

 

목차

1. Intel OneAPI Base Toolkit 설치

2. Intel OneAPI HPC Toolkit 설치

3. MS Visual Studio에서 연동하기 

 

 

1. Free intel Frotran compiler 설치 사이트 (아래 링크 접속)

 

Free Intel® Software Development Tools

Free software tools supporting developers of all types; students, educators, academic researchers, and open source contributors.

www.intel.com

 

2. Fortran 이 명시되어 있는 Get the Base Kit 클릭

 

아래 그림 처럼 Base 와 HPC Toolkit 모두 다운로드 해 둔다.

아래와 같이 윈도우 선택하고 다운로드 클릭

Download 시 Sign in 요구하면, 아래와 같이 Register 하기

3. Base Toolkit 설치 

 

30GB설치공간이 부족하거나, Fortran 기초 프로그래밍 연습을 위한 사용자라면, Custom Installation 을 선택한다.

포트란 컴파일러 설치와 관련있는 Intel Distribution for GDB 만 설치하여 전체 설치용량을 줄인다.

 

미리 설치한 Microsoft Visual Studio 2019 와 연동하도록 한다.

(Microsoft Visual Studio 2019 가 설치되어 있지 않다는 메세지가 나오면, 설치하고 연동한다.)

 

 

4. HPC Toolkit 도 위의 Base Toolkit 과 동일하게 설치한다.

이때도 포트란 컴파일러만 설치하여 용량을 줄인다. 

 

 

5. Visual Studio 상에서 Fortran 실행하기

 

 

아래와 같이 코드가 보이면 설치는 일단 성공이다. 

코드 내 실행창이 꺼지지 않도록 pause 명령문 삽입해 둔다.

시작을 눌러서 컴파일/실행한다.

아래와 같이 "Hello World" 가 출력되면, 모든 설치과정은 끝난다.

 

 

 

윈도우 GFrotran 설치

혹시 라이센스 문제가 걱정이면 GNU 라이센스 기반의 Gfortran을 설치해서 사용하기 바랍니다. 아래 링크 참조

 

 

개발환경 :: Gfortran 포트란 초간단 설치 (TDM-GCC)

윈도우즈 상에서 무료 포트란 컴파일러 설치하는 방법 MinGW, CygWin 등을 사용할 수 있으나, 여기서는 간단할 설치로 유명한 TDM-GCC를 설치하는 방법을 설명함. Gfortran 은 GNU 라이센스 기번의 무료

aeir.tistory.com

 

반응형

+ Recent posts