- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:fortran90 の簡単なコード)
FORTRAN90コードでの数値書き出しエラー
このQ&Aのポイント
- FORTRAN90を使用して数値の書き出しプログラムを作成していますが、実行時に予想外の結果が出力されます。
- コンパイルエラーは発生しておらず、プログラムを一つずつ確認しましたが、原因が分かりません。
- 質問の内容は、FORTRAN90を使って任意の数で割るプログラムを作成しようとしている際に、実行時にn+1個の数値が書き出される問題です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>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個だけ超えているはずです。 訳のわからない値を出力するのは必然かと。
その他の回答 (2)
- Hayashi_Trek
- ベストアンサー率44% (366/818)
回答No.3
>どうしてもとのnより1大きくなるのでしょうか。 doループを続けるか、抜けるかを判断する箇所が、ループの先頭にあるからです。 つまり「 do i=1.n」の場合では iに、1を加算して、nを超えたから、ループを抜けるのです。 したがって、ループを抜けた時点では、iはn+1になっています。
質問者
お礼
なるほど!! DO文の本質がやっとわかりました!! ご丁寧にありがとうございました
- asuncion
- ベストアンサー率33% (2127/6290)
回答No.2
というわけで、 INTEGER :: n, i do i = 1, n x(i) = dx * REAL(i) enddo と書けばうまくいくのではないか、という、 Fortran77までしか知らない素人のたわごとでした。
お礼
ありがとうございました、これで詰まっていた課題を次の段階に進めさせられます!
補足
早速のご回答ありがとうございます!やはり別の変数にしなければいけないのですね、いろいろな可能性を考えて「同じ変数にしないといけないのか?」というふとした疑問でそのように変えていました。 ”doループを抜けたときのnの値はもともとのnよりも1大きい” どうやらここに原因がありそうですね。 doループというのは do i=1.n と書けば ”iを1からnまで一つずつ大きくしていく” という意味ではないのですか?どうしてもとのnより1大きくなるのでしょうか。