Matrix FORTRAN:写语句时控制新行
我需要用fortran中的新行来解决这个倒转的问题。例如,在屏幕上打印矩阵。我正在使用:Matrix FORTRAN:写语句时控制新行,matrix,fortran,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)", a
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
do i=1,n
doj=i,m
写入(*,fmt=“(f0.2,tr2)”,advance=“no”)矩阵(i,j)
结束
写(*,fmt=“(a)”””在我的脑海中,我会提取最后一条写语句,但这并不比您的解决方案优雅多少:
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有一个很好的功能,叫做Then,您的问题可以通过一个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
至少4.10.0版的Gfortran编译了上面的第二个代码。感谢您提供的示例。@Fortranner此功能已添加到gfortran in…中。对于较旧的Fortran版本,只需将*替换为99999即可