2011-11-11 12 views
11

Bazı Fortran kodlarını okumaya çalışıyorum ancak %'un (yüzde işareti) ne yaptığını belirleyemiyorum.Fortran'da "%" ne demek/yapmak?

Sanki bir çizgide geçerli:

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

o ne yapar?

cevap

23

Fortran 90'da C++ gibi yapıları oluşturmanıza izin verir. Temelde nokta (.) Operatörü olarak davranır. http://www.lahey.com/lookat90.htm itibaren

:

Yapılar (Türetilmiş Türleri) Sen grup can

türetilmiş türlerini kullanarak verileri. Bu, kullanıcıların içsel türleri (diziler ve işaretçiler dahil) ayrı ayrı bileşenlere yüzde işareti kullanılarak bir sınırlayıcı olarak erişilebilen yeni türlere birleştirilmesini sağlar. (Türetilmiş tipler VAX Fortran'da kayıt olarak bilinir.) ! Türetilmiş türler ve modüller kullanarak örnek. bir göstergesi olarak

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

üzgünüm ama bir cevap birisi tanıdık değilse nedir Başka bir dil, bir şeyler kapalı tarif nasıl C++ veya nokta operatörleri ile? –

+0

Sadece bir modüle ait olan bir değişkene erişmenin bir yoludur. Örnekte olduğu gibi, tüm değişkenleri kullanmadan _i.e._ tüm yapısını kullanmak zorunda kalmadan "object" 'gas1'den tek bir değişkeni doğrudan değiştirebilirsiniz (' water1 = pipe (4.5,44.8,1200,) ') "türbülanslı". – Garini

1

% yakından ilişkili bir dizi kullanıma sahiptir. Fortran'ın geliştirdiği gibi, bu kullanımların sayısı artmıştır.

Fortran 90'a geri dönmek ve soruda görülen kullanım, türetilmiş bir türe ait bileşenlere erişmek için % kullanılır. bu tür nesne a ile türetilmiş tür a_t göz önünde bulundurun:

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

bileşenleri rho ve a arasında sigmaa%rho ve a%sigma ile erişilebilir. Soruda görülebileceği gibi, bu bileşenler (a%rho * g gibi) ifadelerde kullanılabilir veya bir ödevin sol tarafı olabilir (a%rho=1.).

türetilmiş bir tür bir bileşenin kendisi türetilmiş bir tür bir amacı olabilir:

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

ve bu nedenle tek bir referans % çoğul görünmeler olabilir: Burada

b%a%rho = ... 

, Kendisinin b'un bir bileşeni olan türetilmiş a türetilmiş nesnesinin rho numaralı bileşiği, atama hedefidir. Bir referansta oldukça korkunç sayıda % s görebilirsiniz, ancak parça referansları her zaman soldan sağa doğru çözülür. Fortran2003'ten gelme

, bir sonra % diğer yollarla bir çift türetilmiş tipleri ile ilgili görür:

  • bir nesnenin bağlanma referans; Parametreli tipin parametrelerinin sorgulanması
  • .

türetilen tip

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

nesne a tek uzunlukta tipi parametresi ve bir tip bağlı prosedür vardır düşünün.

x = a%f() 

gibi bir ifade olarak türetilmiş tip nesnesinin f bağlayıcı başvurulmaktadır.

bileşen x referans edilebilir a arasında n çok

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

olarak ifade edilebilir parametresi.

Son olarak, Fortran 2008 tarihinden itibaren % karmaşık bir nesnenin gerçek ve hayali kısımlarına erişmek için kullanılabilir:

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