• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:fortran90 の簡単なコード)

FORTRAN90コードでの数値書き出しエラー

このQ&Aのポイント
  • FORTRAN90を使用して数値の書き出しプログラムを作成していますが、実行時に予想外の結果が出力されます。
  • コンパイルエラーは発生しておらず、プログラムを一つずつ確認しましたが、原因が分かりません。
  • 質問の内容は、FORTRAN90を使って任意の数で割るプログラムを作成しようとしている際に、実行時にn+1個の数値が書き出される問題です。

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

>do n=1,n ループの制御変数がnでいいんでしょうか? nとは別の変数を使って、 例えば do i = 1, n とかいう風にしないとまずいのでは? でもって、このdoループを抜けたときのnの値は もともとのnよりも1大きいはずなので、 >PRINT *,x(1:n) このPRINT文で最後に出力する x(n) は、ALLOCATE文で定義してあった x(n) の領域の範囲を1個だけ超えているはずです。 訳のわからない値を出力するのは必然かと。

question-ok9
質問者

お礼

ありがとうございました、これで詰まっていた課題を次の段階に進めさせられます!

question-ok9
質問者

補足

早速のご回答ありがとうございます!やはり別の変数にしなければいけないのですね、いろいろな可能性を考えて「同じ変数にしないといけないのか?」というふとした疑問でそのように変えていました。 ”doループを抜けたときのnの値はもともとのnよりも1大きい” どうやらここに原因がありそうですね。 doループというのは do i=1.n と書けば  ”iを1からnまで一つずつ大きくしていく” という意味ではないのですか?どうしてもとのnより1大きくなるのでしょうか。

その他の回答 (2)

回答No.3

>どうしてもとのnより1大きくなるのでしょうか。 doループを続けるか、抜けるかを判断する箇所が、ループの先頭にあるからです。 つまり「 do i=1.n」の場合では iに、1を加算して、nを超えたから、ループを抜けるのです。 したがって、ループを抜けた時点では、iはn+1になっています。

question-ok9
質問者

お礼

なるほど!! DO文の本質がやっとわかりました!! ご丁寧にありがとうございました

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.2

というわけで、 INTEGER :: n, i do i = 1, n x(i) = dx * REAL(i) enddo と書けばうまくいくのではないか、という、 Fortran77までしか知らない素人のたわごとでした。

関連するQ&A