来自列的矩阵

Matrix from column

文件中给出了以下数据:

1 7 5 4 11 0 1 -13 -7

我想从这些列中形成一个 3x3 矩阵。我已尝试 advance=no 但收到运行时错误。

program form_matrix
  implicit none
  integer:: col,A(9)
  open(unit=12,file='q10.txt')

  do col=1,9
    read(12,*,advance='no')(A(col))
  end do

  7 format(3i4)
  write(*,7)(A(col),col=1,9)
  close(12)
end program

嗯,有几件事:

  • 要读入变量,您需要指定该变量而不是包含该变量的语句。 A(col) 而不是 (A(col))

  • 然后,您不能使用带有 advance 说明符的列表定向格式 (*),您需要一种格式(这在您的情况下会很困难,因为列的宽度不同)。

  • 一次性将整行读入数组可能会更容易,无需循环并使用列表定向格式:

program form_matrix
  implicit none
  integer:: col,A(9)
  open(unit=12,file='q10.txt')

  read(12,*) A

  7 format(3i4)
  write(*,7)(A(col),col=1,9)
  close(12)
end program

* 启用列表定向格式,其中各个值由逗号或空格分隔。类型由语句的 RHS 决定。因此,您读入了一个包含九个整数(因为 A 是九个元素长)的列表(因为 A 是整数)。有关这方面的更多详细信息,我建议 Fortran 2008 Standard,Cl。 10.10"List-directed formatting"