は、派生型使用のプログラム例である:
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です。
追加するだけです。 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))' –
@JonathanDursi提案に感謝します - 私はこれを答えに加えました。 – milancurcic
大変ありがとうございます。これは非常に役に立ちます。したがって、派生型を使用すると、メインストリーム/既定の型から自分自身の型を構築することができます。その型/次元は、定義で記述できます。プログラムの実行方法に基づいて後で割り当てることもできます。甘い。 –