を選択し、私は2次元配列配列:現在、私のコードにエントリー
integer, allocatable :: elements(:,:)
を持っているし、いくつかの定数
integer, parameter :: TYP = 1
integer, parameter :: WIDTH = 2
integer, parameter :: HEIGHT = 3
! ...
integer, parameter :: NUM_ENTRIES = 10
を定義し、その
allocate(elements(NUM_ENTRIES,10000))
のようなものを割り当てるI
などの要素にアクセスできますここでは、整数だけでなく、すべての要素にタイプの混合が必要です。 だから私は、派生型
type Element
logical active
integer type
real width
! etc
end type
を定義し、私が使用するエントリにそれを伝えるサブルーチンを呼び出すことができ、2D配列バージョンを持つ要素
type(Element), allocatable :: elements(:)
の配列を使用します。 など。
subroutine find_average(entry, avg)
integer, intent(in) :: entry
real, intent(out) :: avg
integer i,
real s
s = 0
do i = lbound(elements,1), ubound(elements,1)
if (elements(TYP,i) .gt. 0) s = s + elements(entry,i)
end do
avg = s/(ubound(elements,1)-lbound(elements,1))
end subroutine
は、だから私は
call find_average(HEIGHT)
平均高さを見つけるか、平均の幅を取得するために
WIDTH
を渡すことができます。 (私のサブルーチンは、平均の高さや幅を見つけるより高度な処理を行いますが、これは単なる例です)
質問:どのようにして異なるタイプを使用できますか?異なるエントリで(例のサブルーチンのように)?
'entry'は常に同じタイプのエントリを指しています(たとえば、常に' real')。だから幸いにもこの問題はありません。しかし、最初の2つの文章は私には分かりません。配列の場合、スライスに 'elements(WIDTH、:)'を渡すことができるのですか?派生型の場合、私は1つの要素を必要としません、私はすべての要素が必要です。私のサンプル関数の修正版を追加できますか?私はあなたが意味することを理解していますか?ありがとうございます –
編集:いいえ申し訳ありませんが、これは私が欲しいものではありません。 –
ユーザー定義型の指定されたサブ項目のすべての要素を渡しています。必要に応じて、Fortranはサブ項目のタイプに応じて異なるプロシージャを選択できます。これはあなたがしたいこととどのように違うのですか? –