1

fortran 95でのこのプログラムの出力には、数字ではなくアスタリスクが表示されます。また、Experiment#を意図したとおりに印刷することもできません。実験1、実験2、実験3など。代わりに、次のように出力します。実験1、実験1、実験1。

この問題を解決する方法について何かアイデアはありますか?以下は私のプログラム全体です。

御時間ありがとうございます。

PROGRAM numbersgen
    IMPLICIT NONE

        !Variable declaration
        INTEGER, DIMENSION(:,:),ALLOCATABLE::numarray
        INTEGER, DIMENSION(:),ALLOCATABLE::temparray
        INTEGER:: numrolls, numexps
        INTEGER:: i=0, j=0
        REAL:: avg=0, sdv=0, variance=0, sum=0
        INTEGER:: k, min, pos, temp

        .............
        ------

        REAL, INTENT(IN):: sum
        REAL, INTENT(IN):: avg, variance, sdv

        PRINT*, " "
        PRINT*, "Sum: ",sum
        PRINT '(1X,A,F5.3)', "Average: ",avg
        PRINT '(1X,A,F5.3)', "Variance: ",variance
        PRINT '(1X,A,F5.3)', "Standard Deviation: ",sdv

        END SUBROUTINE

END PROGRAM
4

2 に答える 2

5

このF5.3形式では、値が0〜9.999である必要があります。平均がそれよりも大きいか、または負の場合、代わりに飛び散ります。妥当なフォーマット仕様を見つけるには、フォーマットを一時的にに変更してF15.3、少なくとも値が表示されるようにします。

実験番号が増えない理由がわかりません。 ええとああ!メインプログラムからのスコープはiサブルーチンで使用されていますか?!それらのローカル宣言はなくimplicit none、有効になっているので、これは問題だと思う傾向があります。確認する簡単な実験iは、メインプログラムの名前を、のようなまったく異なる名前に変更し、expidxコンパイルエラーがあるかどうかを確認することです。(変更が必要な場所は4つあります。)

于 2011-04-13T03:29:10.177 に答える
3

プログラムのcontainステートメント内にサブルーチンを配置することにより、プログラムで宣言されているデータへのアクセスをサブルーチンに与えることができます。そのため、iとjを使用するサブルーチンは、実際にはプログラム自体の中でそれらの値を変更します。これをしないでください!

「適切な」方法は、サブルーチンを個別のプログラムユニットとして、またはモジュールに配置し、メインプログラム内で使用することです。

于 2011-04-13T05:22:36.100 に答える