FORTRAN:在WRITE语句中控制新行

时间:2014-12-23 17:22:00

标签: matrix fortran

我需要用fortran中的新行解决倒置的常见问题。就像在屏幕上打印一个矩阵一样。我正在使用:

do i=1,n
 do j=i,m
  write(*, fmt="(f0.2, tr2)", advance="no") matrix(i,j)
 end do
end do

这样就可以将整个矩阵放在同一条线上。我需要将每一行都放在自己的行中,我想知道是否有一种优雅的方式来做到这一点。我的解决方案是:

do i=1,n
 do j=i,m
  write(*, fmt="(f0.2, tr2)", advance="no") matrix(i,j)
 end do
 write(*, fmt="(a)") " "    <---------- NOT ELEGANT
end do

1 个答案:

答案 0 :(得分:1)

在我的脑海中,我会提取最后一个写声明,但这并不比你的解决方案更优雅:

program test
  implicit none
  integer,parameter :: n=3, m=3
  real    :: matrix(n,m)
  integer :: i, j

  call random_number( matrix )

  do i=1,n
    do j=i,m-1
       write(*, fmt="(f0.2, tr2)", advance="no") matrix(i,j)
    end do
    write(*, fmt="(f0.2, tr2)") matrix(i,m)
  end do

end program

如果您的编译器支持它,Fortran 2008有一个很好的功能,称为unlimited format item.那么,您的问题可以通过一个do循环来解决:

program test
  implicit none
  integer,parameter :: n=3, m=3
  real    :: matrix(n,m)
  integer :: i

  call random_number( matrix )

  do i=1,n
    write(*, fmt="(*(f0.2, tr2))") matrix(i,i:m)
  enddo ! i

end program