こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Do文で副プログラムの増やす【Fortran】

Fortranを使用してます。

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

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

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

do x=0,10

SUBROUTINE test+x

y=x+10

retun
end
end do


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

投稿日時 - 2012-02-14 12:07:33

QNo.7304465

困ってます

質問者が選んだベストアンサー

サブルーチンに引数として変化させたい値を渡すので良いのではないでしょうか?
(例えば以下のような感じ)

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がわたってきます。

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

以上、参考になれば幸いです。

投稿日時 - 2012-02-14 15:00:18

お礼

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

投稿日時 - 2012-02-15 13:57:05

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

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

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

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

投稿日時 - 2012-02-14 14:06:30

補足

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

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

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

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

投稿日時 - 2012-02-14 14:38:33

お礼

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

投稿日時 - 2012-02-15 13:59:56

ANo.1

こんにちは。

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

では。

投稿日時 - 2012-02-14 12:46:23

お礼

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

投稿日時 - 2012-02-15 13:59:55

あなたにオススメの質問