我需要用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
答案 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