Fortran中的矩阵生成

时间:2015-04-05 15:10:08

标签: fortran fortran77

问题:我需要生成一个M * N矩阵,其中M代表行,N代表列。 该矩阵的元素应该类似于(i-1.0)* N + j。 这段代码不起作用,我无法理解为什么。 我使用Compaq Visual Fortran 6。

我除了这个代码必须生成一个矩阵。生成后,矩阵应该像

一样打印

1.0 2.0 3.0

4.0 5.0 6.0

至于3 * 2矩阵。

现在这段代码根本无法正常工作,向我展示了一系列Windows执行错误。

INTEGER M, N, I, J
COMMON /BLK1/ MATA (256, 256)
READ (7, 100) M
READ (7, 100) N
100 FORMAT (I3)
CALL MATGEN (M, N)
DO 90003 I = 1, M
DO 90004 J = 1, N
WRITE (8, 101) MATA(I, J)
101 FORMAT (F8.1, ' ', \)
90004 CONTINUE
WRITE (8, 102)
102 FORMAT (/, /)
90003 CONTINUE
END



SUBROUTINE MATGEN (M, N)
REAL DUM
INTEGER I, J
COMMON /BLK1/ MATA (256, 256)
DUM = 1.0
DO 90001 I = 1, M
DO 90002 J = 1, N
MATA (I, J) = DUM + 1.0
90002 CONTINUE
90001 CONTINUE
RETURN
END

COMMON BLK1
REAL MATA (256, 256)
END

1 个答案:

答案 0 :(得分:2)

您的代码存在一些问题:

  • 该程序并未真正启动(在下面的代码中为PROGRAM TEST
  • MATA(隐含地)是一个整数。我添加了声明。请在将来使用IMPLICIT NONE
  • 最后有一些奇怪的代码并不真正属于那里......
  • 正如francescalus所说,分配不会增加,因此MATA会填充2
  • 我的gfortran版本不接受反斜杠来禁止换行。我不得不使用$。有关详细信息,请参阅here
  • Agentp注意到您没有打开第七单元进行输入。我将这些行更改为从STDIN读取。
  • 缩进没有伤害!
      PROGRAM TEST
      IMPLICIT NONE
      INTEGER M, N, I, J
      REAL MATA
      COMMON /BLK1/ MATA(256, 256)
      WRITE(*,*) 'Please enter M:'
      READ (*, 100) M
      WRITE(*,*) 'Please enter N:'
      READ (*, 100) N
100   FORMAT (I3)

      CALL MATGEN (M, N)
      DO 90003 I = 1, M
        DO 90004 J = 1, N
          WRITE (8, 101) MATA(I, J)

101   FORMAT (F8.1, ' ', $)
90004   CONTINUE
        WRITE (8, 102)
102   FORMAT (/, /)
90003 CONTINUE
      END

      SUBROUTINE MATGEN (M, N)
      IMPLICIT NONE
      INTEGER M, N
      REAL DUM
      INTEGER I, J
      REAL MATA
      COMMON /BLK1/ MATA(256, 256)
      DUM = 0.0
      DO 90001 I = 1, M
        DO 90002 J = 1, N
          DUM = DUM + 1.
          MATA (I, J) = DUM
90002   CONTINUE
90001 CONTINUE
      RETURN
      END

这导致:

$ ./a.out 
 Please enter M:
2
 Please enter N:
3

$ cat fort.8 
     1.0      2.0      3.0 


     4.0      5.0      6.0