ここから本文です

配列の受け渡しについてお尋ねします。言語はフォートランなのですが。 メイン...

skm********さん

2014/7/721:41:45

配列の受け渡しについてお尋ねします。言語はフォートランなのですが。

メインの方で
abc(3,100)と宣言して使用している配列があり、これをサブルーチンに引き渡します。

call xxx(abc)

受け側のサブルーチンは
subroutine xxx(abc)
dimension abc(3,1)
となっています。メインとサブルーチンでサイズが異なります。サブルーチンの方がサイズが小さいです。

コンパイラのエラーは出ません。私のプログラムではないので何が意図されているのか確かめる必要がありますが、アルゴリズムとしてはあり得るという理解でよろしいものでしょうか。
1次元配列だったらあり得るかなと思いますが、2次元配列ではどうでしょうか。(多次元配列も結局はデータの並びとしては1次元なのだろうと思いますが。)
メインでabc(100,3) サブルーチンでabc(1,3)でも良いのかなとも思えてきます。

逆の場合すなわち、メイン側でabc(3,1)でサブルーチン側でabc(3,100)はあり得ないだろうと思いますが。
考え方が整理できていないので解説をお願いできればと思っています。よろしくお願いします。

閲覧数:
44
回答数:
1

違反報告

ベストアンサーに選ばれた回答

cip********さん

2014/7/722:22:30

FORTRANの配列の順序は
a(1,1) a(2,1) a(3,1) a(1,2) …
のように前の番号から変わので、
dimension abc(3,1)
は、引数で渡した配列abc(3,100)の先頭3つ、つまり
abc(1,1) abc(2,1) abc(3,1)
のことじゃないかと思います。
配列は値渡しでなく、参照で渡されているのでこれができるのだと思いますが…なんだけ危険な(メモリリークを起こしそうな)匂いがしますね。

  • 質問者

    skm********さん

    2014/7/1123:27:46

    回答有難うございます。物理数値計算のアルゴリズムに有限要素法というものがあり、a(100,100)という配列(行列の成分)の値を決めていくときにまずaa(3,3)という小さな行列で係数を決めて大きな行列a(i,j)の成分に対応させて足し込んでいくというような操作をします。そのようなときに使うようなのですが。

  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる