17. 자료와 블록 자료 (data and block data)

data 문 (The data statement)

data 문은 프로그램을 작성할 때 알고 있는 자료를 입력하는 방법 중 하나이다. assignment 문과 비슷하다. 사용법은
      data list-of-variables/ list-of-values/, ...
로 여기서 세 개의 점은 이 형태가 반복된다는 것을 의미한다. 다음은 예이다.
      data m/10/, n/20/, x/2.5/, y/2.5/
또 이것을 다음과 같이 나타낼 수도 있다.
      data m,n/10,20/, x,y/2*2.5/
같은 것을 assignment로 할 수도 있다.
      m = 10
      n = 20
      x = 2.5
      y = 2.5
data 문은 더 간결하고 따라서 보통 더 편리하다. 특히 같은 값을 반복하여 사용할 때 간단히 사용하는 방법에 주의하라.

data 문은 단 한 번만 프로그램을 수행하기 직전에 읽어 들인다. 이런 이유로 data 문은 주로 main program에서 사용하고 subroutines에서는 사용하지 않는다.

data 문은 배열(vectors, matrices)을 초기화할 때 사용하기도 한다. 아래는 프로그램을 시작할 때 matrix를 모두 0으로 하는 법이다.

      real A(10,20)
      data A/ 200 * 0.0/
어떤 compiler는 자동으로 이런식으로 배열을 초기화하기도 하지만 모든 것이 다 그런 것은 아니다. 따라서 배열의 원소가 0이어야만 한다면 다음 예를 다르는 것이 좋다. 물론 0이 아닌 다른 값으로 초기화 할 수도 있다. 또는 각각의 원소를 초기화할 수도 있다.
      data A(1,1)/ 12.5/, A(2,1)/ -33.3/, A(2,2)/ 1.0/
또는 다음과 같이 작은 배열의 모든 원소를 나열할 수 있다.
      integer v(5)
      real B(2,2)
      data v/10,20,30,40,50/, B/1.0,-3.7,4.3,0.0/
이차원 배열은 다른 경우와 마찬가지로 column 우선에 따라 값을 지정할 수 있다.

block data 문(The block data statement)

data 문 common block의 변수에 대하여는 사용할 수 없다. 이런 목적으로는 block data라는 특별한 "subroutine"이 있다. 이것은 실제로는 subroutine이 아니지만 별개의 프로그램 단위로 나타나기에 subroutine처럼 보인다. 다음은 그 예이다.
      block data
      integer nmax
      parameter (nmax=20)
      real v(nmax), alpha, beta
      common /vector/v,alpha,beta
      data v/20*100.0/, alpha/3.14/, beta/2.71/
      end
data 문처럼, block data도 main program이 수행되기 시작할 때 한 번 수행된다. source code에서의 block data "subroutine"의 위치는 (main program이나 subprogram 안에 들어 있지 않기만 하다면) 어느 곳이든 상관없다..


[Fortran Tutorial]
충남대학교 물리학과 오 병성