2011-11-11 40 views
11

Tôi đang cố gắng đọc một số mã Fortran, nhưng không thể xác định những gì % (dấu phần trăm)."%" có nghĩa là gì/làm ở Fortran?

Đó là trong một dòng như:

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

nó làm gì?

Trả lời

23

Trong Fortran 90, chúng cho phép bạn tạo cấu trúc như trong C++. Về cơ bản nó hoạt động như toán tử dấu chấm (.).

Từ http://www.lahey.com/lookat90.htm:

cấu trúc (các loại nguồn gốc)

Bạn có thể nhóm dữ liệu của bạn sử dụng các loại có nguồn gốc. Điều này cho phép người dùng kết hợp các loại nội tại (bao gồm mảng và con trỏ) vào các kiểu mới mà các thành phần riêng lẻ có thể được truy cập bằng dấu phần trăm làm dấu phân cách. (Các loại có nguồn gốc được gọi là các bản ghi trong VAX Fortran.) ! Ví dụ sử dụng các loại và mô-đun có nguồn gốc.

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

xin lỗi nhưng làm thế nào một câu trả lời có thể mô tả một cái gì đó ra một ngôn ngữ khác, nếu một người nào đó là không quen thuộc với toán tử C++ hoặc dấu chấm? –

+0

Nó chỉ đơn giản là một cách để truy cập vào một biến nằm bên trong một mô-đun. Vì vậy, như trong ví dụ bạn có thể trực tiếp sửa đổi một biến duy nhất từ ​​"đối tượng" 'gas1' mà không cần phải sử dụng toàn bộ hàm tạo _i.e._ mà không sử dụng tất cả các biến cần thiết (' water1 = pipe (4.5,44.8,1200, "turbulent") '). – Garini

1

% làm mã thông báo có một số công dụng liên quan chặt chẽ. Như Fortran đã phát triển những ứng dụng đó đã tăng lên tính.

Quay lại Fortran 90 và sử dụng được nhìn thấy trong câu hỏi, % được sử dụng để truy cập vào các thành phần của loại có nguồn gốc. Hãy xem xét nguồn gốc loại a_t với đối tượng a loại rằng:

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

Các thành phần rhosigma của a có thể được truy cập với a%rhoa%sigma. Như có thể thấy trong câu hỏi, các thành phần này có thể được sử dụng trong các biểu thức (chẳng hạn như a%rho * g) hoặc chúng có thể là bên trái của một bài tập (a%rho=1.).

Một thành phần của một loại có nguồn gốc có thể tự là một đối tượng của loại hình xuất phát:

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

và do đó có thể có nhiều sự xuất hiện của % trong một tham chiếu duy nhất:

b%a%rho = ... 

Ở đây, thành phần rho của đối tượng loại có nguồn gốc a, chính nó là một thành phần của b, là mục tiêu của nhiệm vụ. Người ta có thể thấy một số lượng khá đáng sợ là % trong một tham chiếu, nhưng phần tham chiếu luôn được giải quyết từ trái sang phải.

Đến với Fortran 2003, một sau đó thấy % liên quan đến các loại có nguồn gốc trong một vài cách khác:

  • tham khảo một ràng buộc của một đối tượng;
  • tìm hiểu thông số của loại tham số.

Hãy xem xét các loại có nguồn gốc

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

Đối tượng a có một tham số chiều dài kiểu duy nhất và một thủ tục loại-bound. Trong một biểu thức như

x = a%f() 

đối tượng loại có nguồn gốc được tham chiếu.

Tham số n của a có thể được tham chiếu như

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

nhiều như các thành phần x có thể được tham chiếu.

Cuối cùng, từ Fortran 2008, % có thể được sử dụng để truy cập vào phần thực và phần ảo của một đối tượng phức tạp:

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