2011-12-19 8 views

答えて

7

は、派生型使用のプログラム例である:

TYPE mytype 
    INTEGER,DIMENSION(3) :: ints 
    REAL,DIMENSION(5)  :: floats 
    CHARACTER,DIMENSION(3) :: chars 
ENDTYPE mytype 

TYPE(mytype) :: a 

a%ints=[1,2,3] 
a%floats=[1,2,3,4,5] 
a%chars=['a','b','c'] 

WRITE(*,*)a 

END 

出力は次のとおり

 1   2   3 1.000000  2.000000  
3.000000  4.000000  5.000000  abc 

EDIT:ジョナサン・ダーシーによって提案あたりとおり

有するために各要素がint、float、およびchar要素を持つ配列の場合は、次のようになります。

TYPE mytype 
    INTEGER :: ints 
    REAL  :: floats 
    CHARACTER :: chars 
ENDTYPE mytype 

TYPE(mytype),DIMENSION(:),ALLOCATABLE :: a 

ALLOCATE(a(10)) 

あなたの要素は、たとえば次のように参照してください。 a(i)%ints,a(i)%floats,a(i)%chars。 関連する回答はAllocate dynamic array with interdependent dimensionsです。

+2

追加するだけです。 IRO-botの答えは、int、float、およびcharの配列を含む派生型を正しく返します。配列(int + float + charを含む型)が必要な場合は、上記のようにタイプを定義します。たとえば、int型、float型、char型などの型にDIMENSIONSを指定しないでください。 TYPE(mytype)、DIMENSION(10):: aまたはTYPE(mytype)、ALLOCATABLE、DIMENSION(:)、:: a'そしてそれ以降の 'allocate(a(10))' –

+0

@JonathanDursi提案に感謝します - 私はこれを答えに加えました。 – milancurcic

+0

大変ありがとうございます。これは非常に役に立ちます。したがって、派生型を使用すると、メインストリーム/既定の型から自分自身の型を構築することができます。その型/次元は、定義で記述できます。プログラムの実行方法に基づいて後で割り当てることもできます。甘い。 –

関連する問題