2011-11-11 4 views
11

일부 포트란 코드를 읽으려고하지만 % (백분율 기호)이 무엇인지 확인할 수 없습니다.포트란에서 "%"는 무엇을 의미합니까?

그것은 같은 라인에 있습니다

x = a%rho * g * (-g*a%sigma + m%gb * m%ca * (1.6 * a%rho+g)) 

은 무엇입니까?

답변

23

Fortran 90에서는 C++와 같은 구조를 만들 수 있습니다. 기본적으로 점 (.) 연산자로 작동합니다. http://www.lahey.com/lookat90.htm에서

:

구조 (파생 유형)를 그룹화 할 수

파생 된 형식을 사용하여 데이터. 이를 통해 사용자는 내장 유형 (배열 및 포인터 포함)을 퍼센트 기호를 구분 기호로 사용하여 개별 구성 요소에 액세스 할 수있는 새로운 유형으로 결합 할 수 있습니다. (파생 된 유형은 VAX Fortran에서 레코드로 알려져 있습니다.) ! 파생 된 유형 및 모듈을 사용하는 예. 토큰 등

module pipedef 
    type pipe       ! Define new type 'pipe', which 
    real diameter     ! is made up of two reals, an 
    real flowrate     ! integer, and a character. 
    integer length 
    character(len=10) :: flowtype 
    end type pipe 
end module pipedef 

program main 
    use pipedef    ! Associate module pipedef with main. 
    type(pipe) water1, gas1 ! Declare two variables of type 'pipe'. 
    water1 = pipe(4.5,44.8,1200,"turbulent") ! Assign value to water1. 
    gas1%diameter = 14.9      ! Assign value to parts 
    gas1%flowrate = 91.284     ! of gas1. 
    gas1%length = 2550 
    gas1%flowtype = 'laminar' 
    . 
    . 
    . 
end program 
+0

죄송하지만, 대답은 사람이 익숙하지 않은 경우 어떻게 다른 언어를, 무언가를 설명 할 수있는 방법 C++ 또는 도트 연산자 사용? –

+0

이것은 모듈의 내부 변수에 액세스하는 간단한 방법입니다. 이 예제에서와 같이 필요한 모든 변수를 사용하지 않고 _i.e._ 전체 생성자를 사용하지 않고 "객체"'gas1'에서 하나의 단일 변수를 직접 수정할 수 있습니다 ('water1 = pipe (4.5,44.8,1200, "난기류")). – Garini

1

% 밀접하게 관련된 다수의 용도를 갖는다. Fortran이 개발 한대로 이러한 용도가 증가했습니다.

Fortran 90으로 돌아가서 질문에 사용 된 내용 인 %은 파생 된 유형의 구성 요소에 액세스하는 데 사용됩니다. 그 타입의 객체에 a 파생 형 a_t를 고려

type a_t 
    real rho, sigma 
end type 
type(a_t) a 

성분 rhoasigmaa%rhoa%sigma와 함께 접속 될 수있다. 질문에서 볼 수 있듯이 이러한 구성 요소는 표현식 (예 : a%rho * g)에서 사용되거나 할당의 왼쪽 (a%rho=1.) 일 수 있습니다.

파생 된 타입의 구성 요소 자체 유도 유형의 객체 일 수있다 :

type b_t 
    type(a_t) a 
end type 
type(b_t) b 

때문에 단일 참조에 % 여러 모습이 될 수있다 : 여기

b%a%rho = ... 

상기 도 유형 객체 a의 구성 요소 rho (자체는 b의 구성 요소 임)이 할당 대상입니다. 하나의 참조에서 %의 상당히 끔찍한 계산을 볼 수 있지만 부분 참조는 항상 왼쪽에서 오른쪽으로 해석됩니다. 포트란 2003 예정

한 후 % 다른 몇 가지 방법으로 유도 된 타입에 관한보고 :

  • 오브젝트의 바인딩을 참조;
  • 매개 변수화 된 유형의 매개 변수를 묻는 중입니다.

파생 형

type a_t(n) 
    integer, len :: n=1 
    real x(n) 
contains 
    procedure f 
end type 
type(a_t(2)) a 

오브젝트 a 단일 길이 타입 파라미터 유형 바인딩 절차를 고려 갖는다.

x = a%f() 

과 같은 표현식에서 유도 유형 객체의 바인딩 f이 참조됩니다.

성분 x 참조 할 수 있으므로 an 훨씬

print *, a%n, SIZE(a%x) 

로 참조 될 수있는 파라메터이다.

마지막으로, 포트란 2008, %은 복잡한 객체의 실수 부와 허수 부분에 액세스하기 위해 사용될 수있다 :

complex x, y(3) 
x%im = 1. 
x%re = 0. 
y = (2., 1.) 
print *, y(2)%im+y(3)%re