• ベストアンサー

fortranで長いプログラムを書き、コンパイルはできたのですが

fortranで長いプログラムを書き、コンパイルはできたのですが 実行の際、実行時間がかなりかかり実行がなかなか終わりません。 プログラムが長いと言っても、30分以上かかるようなプログラムではないと思うのですが。 実行時間が長くかかってしまう原因についてご存知の方は教えて下さい。 よろしくお願いします。

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (7992/17078)
回答No.2

#1さんが言ってる無限ループの他には、 何らかの理由でループのカウンターが壊れていてとんでもない回数のループになっているとか、 入力待ちになっているのに気が付いていないとか、 が考えられますね。 紙上デバックもいいけど、デバッガがあるのならそれを使えばよいし、デバッガが近くになくても適当なところにPRINT文を入れてどこまで進んでいるのかを確認するだけでも見直すべき範囲が絞り込めます。

その他の回答 (2)

  • drsupple
  • ベストアンサー率38% (48/126)
回答No.3

普通のFortranプログラムの実行時間は、作った人が考えるよりはるかに短いです。 せいぜい数秒で全ての処理が終わってしまうと思います。 私も初めて作った時は10分で終わらなくて、30分回しても終わらなかったことがありました。 他の回答者様の言われるように無限ループに入っていました。 修正したところ、1000分の1秒以下で処理が終わりました。

  • FEX2053
  • ベストアンサー率37% (7987/21353)
回答No.1

単純に無限ループに入りこんでいる。 フォートランコンパイラはそれほど頭がよくない場合があって、無限ループを見落とすことがあります。 まずはソースコードを紙上でデバックして下さい。単純なデバックでは見つからなくても、無限ループがあるかも、と思って探すと一発で見つかる場合が多いです。

528612
質問者

補足

do ループの中にwrite(*,*)文を書きどこで問題がおきているのか確認しました。 やはり、ループが終わらない状態でした。 プログラムの構造は単純に書くと、 program main call sub 1 call sub 2 stop end sub1 do call sub 3 do; do;do enddo;enddo;enddo;enddo return end sub1 sub 3 do; do; do; do enddo; enddo; enddo; enddo return end sub 3 sub 1でsub 3を呼び出しています。 これが原因になる事はあるのでしょうか? よろしくお願いします。

関連するQ&A

  • fortran77のプログラム時間を計測したい

    fortran77のプログラム時間を計測したい こんばんわ。fortran77で実行結果が出るまでの時間の測定をしたいのですが、どうすればいいのでしょうか? 調べてみるといろいろな方法があるようです。しかし、そのほとんどがlinuxでの環境においての説明です。 私はwindowsの環境でfcpadを使ってコンパイルしています。ですので、「a.out」のコマンドを打ってプログラムを実行したことがありません。windows環境でもfortran77で時間計測というのはできますでしょうか? また、今回linuxの存在の大きさを感じた次第です。linuxでコンパイルするというのはメリットがあるのでしょうか?

  • fortranについて

    fortranでプログラムをコンパイルし、実行したところRun-time Errorと出てきて、00401000 main [+0052]と書いてありました。何が原因なんでしょうか?

  • fortran90のコンパイルで困っています

    fortranの初心者です. コンパイルは上手くいくのでが、オブジェクトファイルが生成されません.名前も指定しているのですが... 原因がまったくわかりません. 詳しい方どうか助けてください.

  • fortran90のコンパイルで困っています

    fortranの初心者です. コンパイルは上手くいくのでが、オブジェクトファイルが生成されません.名前も指定しているのですが... 原因がまったくわかりません. 詳しい方どうか助けてください.

  • fortranでプログラムをつくったのですが

    fortranでプログラムをつくりました。 コンパイルは成功しているのですが、プログラムが途中で止まってしまいます。 そして「segmentation fault」とエラーが出ます。 このエラーは何を意味しているのでしょうか?

  • Fortran90/Fortran95→Fortran77

    大学の授業でFortranを使ったプログラミングを勉強しています。 以下の文が大学のPCに入っているコンパイラでは問題なくコンパイルでき実行できるのですが、家のPCだとコンパイルすることが出来ません(以下の文でエラーが出ます) 大学のPCの開発環境はFujitsu-FORTRANだと思います(^ ^; 家のPCはSalford FTN77 Personal Edition CompilerとCPad for Salford FTN77を組み合わせて使用しています なぜエラーがでるのか自分なりに考えた結果、Fortran90/Fortran95のプログラムをFortran77のコンパイラでコンパイルしているからだと思います(全くの勘違いだったら指摘して下さい) Fortran90/Fortran95の開発環境がフリーで整えばいいのですが、見つからないのでプログラムを修正したいと思います そこで、力を貸していただきたいのです 前置きが長くなりましたが、エラーが出る文は以下のところです open(8,file='freq_ex13.dat',action='write',status='replace') ここを、Fortran77のコンパイラでコンパイルできるようにアドバイスを下さい よろしくお願いします

  • Fortranで書かれたプログラムのコンパイル方法

    VAX FORTRAN(version 5.0)で書かれたプログラムをWindowsXPで動かしたいのですが、これって可能でしょうか? Windows用のLF95は所有しており、コンソール画面から試したのですが無理なので何か良い方法がありましたらどなたか教えていただけないでしょうか? コンパイル用のバッチファイルとして@COMPILE.comファイルというのがあり、このコマンドを叩けばすべてが動くはずなのですが・・・。

  • Fortranについて

    私は今大学生のものです。 今卒業研究でFortranのプログラムを用いています。しかし私はプログラミングには疎く、独学で勉強しようと思うのですがなにか初心者にわかりやすいお勧めの本、サイトなどはあるでしょうか? 本屋に行ってもFortranの本は販売されておらず、通販では手にはいるのですがどの本がいいのかわかりません。是非教えていただければと思いここに書き込ませていただきました。 また、家でもFortranのプログラムをコンパイル、実行できる環境をつくりたいのですがどうすればよろしいでしょうか? 学校ではcygwinをインストールして行っていますが家でもcygwinをインストールすればいいのでしょうか? また今もととなるプログラムはあるのですがこのプログラムはLinux上では正常にコンパイルされないところがあるらしく書き直さなければならないらしいのですがLinux上でのFortranのプログラムは普通のFortranのプログラムとは違うのでしょうか?ちなみに学校のパソコンのOSはWindows Vistaです。 初心者の質問ばかりになってしまってすみません。自分でしっかり学びたいと思うのでぜひ教えてください。

  • Fortran コンパイルエラー

    Cygwin上でFortranを用いて流体の数値解析を行っています。 先輩から引き継いだシミュレーションコードなのでプログラムをいじらなくても実行できるだろうと思ったのですが、コンパイル時に以下のエラーが出てしまい、いろいろ試行錯誤しましたが自力では解決できませんでした。 エラーは次のとおりです。何かご存知の方アドバイス頂けたらありがたいです。○はスペースです。カンマの下に1があります。 op.f:13.21: ○101 format(i,4e) ○○○○○○1      Error:Nonnegative width reqired in format string at (1)

  • FORTRANとC++の連動について

    私は,Fortranを用いて解析の業務をしている,プログラム初心者です。 購入したのは,Intel Visual Fortran8.0(VF)ですが,Windows環境でコンパイルリンクするには,Microsoft Visual C++ .NET 2003(VC++)が必要ということで,こちらも購入しました。 普段は,Fortranのコンソールで ifort **.f といったコマンドでコンパイルリンクし,実行しているだけです。 これからは,VC++の方に移行していきたいと考えていますが,しばらくはFortranで作成したサブルーチンを有効活用したと考えています。 そこで,VC++ベースのメインプログラムからFortranのサブルーチンを呼び出すプログラムの作成方法,コンパイルリンク方法をご教授ください。よろしくお願いします。 (1)ソースにどう記述するか? void CMyDlg::OnBnClickedOk() { ここで,FORTRANのサブルーチンを呼び出したい。     Fortranなら call subroutine( a, b ) } (2)コンパイルするときは, Visual Studio開発環境で,コンパイル→実行で良いのか? それとも,あらかじめVC++とVFで.objファイルを作成する必要があるのか?