2011-04-13 69 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