2011-04-13 103 views
1

上Fortran 95個的顯示星號代替數字這個程序的輸出星號和索引的輸出。另外,我無法像實驗那樣打印實驗#實驗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 

回答

5

F5.3格式要求的值在0和9.999之間。如果平均值超過這個值,或者是負值,那麼就會出現這種情況。要找到合理的格式規範,請暫時將格式更改爲F15.3,以便至少可以看到這些值。

我不明白爲什麼實驗失敗數量遞增。呃哦!子程序中使用的主程序的範圍是i ?!它們沒有本地聲明,並且implicit none已生效,所以我傾向於認爲這是一個問題。一個簡單的實驗,以確認將在主程序改變i名稱完全不同的東西,像expidx,並查看是否有編譯錯誤。 (有需要改變四個地方。)

+3

當開發一個程序,它可以方便地使用表式IO:「寫(*,*)」。那麼你可以不用擔心項目是否適合輸出字段。當您確信該程序正在運行時,您可以使用格式使輸出看起來更好。 – 2011-04-13 04:59:47

+0

你剛剛擊敗我的答案與編輯=) – steabert 2011-04-13 05:24:25

+0

我從來沒有見過'包含'之前。我認爲這是一個錯誤的評論或發表評論。 – wallyk 2011-04-13 05:38:30

3

把你的子程序一個包含語句內的程序,你讓他們訪問的是在你的程序中聲明的數據。因此,使用i和j的子例程實際上會在程序本身內改變它們的值。不要這樣做!

'正確'的方法是將你的子程序作爲單獨的程序單元或模塊放在主程序中使用。

+2

或者只是在過程中聲明單獨的循環變量。 – eriktous 2011-04-13 10:56:11