プロが教える店舗&オフィスのセキュリティ対策術

Fortranを使用してます。

DO文で副プログラムをループさせて増やしたいのですが、どうすればいいか分りません。

具体的には、副プログラムの「SUBROUTINE」文+サブルーチン名 であるサブルーチン名の後にループを使って番号を付けたいのですが・・・

簡易なイメージとして以下のソースでtest0、test1、test2、・・・・・test10となるようなサブルーチン名にしたいのです。

do x=0,10

SUBROUTINE test+x

y=x+10

retun
end
end do


Fortran初心者ですが、解決したいので難しい解説でも大丈夫です。
分る方は宜しくお願いいたします。

A 回答 (3件)

サブルーチンに引数として変化させたい値を渡すので良いのではないでしょうか?


(例えば以下のような感じ)

program main
implicit none
integer x
do x =0, 10
call test(x)
end do
contains
subroutine test(x)
integer,intent(in)::x
integer y
y = x + 10
end subroutine
end program

上記コードではサブルーチンtestが11回呼び出されます。
第一回目はxに0がわたってきます。
第2回目はxに1、...、第11回目にはxに10がわたってきます。

このようなイメージでやりたいと思われていることは実現できませんか?

以上、参考になれば幸いです。
    • good
    • 0
この回答へのお礼

まさにやりたいことそのものです。
例文ものしてもらいとても解りやすかったです。
ありがとうございました。

お礼日時:2012/02/15 13:57

その結果として何をしたいのかわかりませんが....



そもそも do文の中に副プログラムを書くことはできません.

contains を使えば「プログラム単位中に副プログラムを書く」ことはできるけど contains はプログラム単位の最後に書かなきゃならないから問題の解決にはなりません.

この回答への補足

目的を書き忘れていましたので補足です。

ある副プログラムの中の値を一定値で変えてプログラムを実行しています。具体的には、0から500までを5刻みづつ変えています。

その手間を省こうと、ループを使って副プログラムのサブルーチン名と中の値を変えてcallでそれぞれ呼び出そう考えました。

回りくどくなってしまいましたが、値を変える度に実行するのでは時間がかかるので、一度の実行で済むようなプログラミングを作りたいのが質問の本質です。

補足日時:2012/02/14 14:38
    • good
    • 0
この回答へのお礼

contains ですね。
知らない要素を言ってもらえると助かります。
ありがとうございました。

お礼日時:2012/02/15 13:59

こんにちは。



 サブルーチン名に変数を使うことは出来ないと思います。
  http://netnanet.info/fortran/n10.html
 また、サブルーチンはメインルーチンとは別に独立して記述するものです。

では。
    • good
    • 0
この回答へのお礼

説明不足で済みませんでした。
ご回答ありがとうございました。

お礼日時:2012/02/15 13:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!