[英]How to write the formatted matrix in a lines with fortran77?
假設我有矩陣c(i,j)。 我想用最古老的Fortran77語言在屏幕上用逗號后的三個符號書寫。 我寫
do i=1,N
write(*,"(F8.3)") ( c(i,j), j=1,N )
end do
但輸出形式為
c(1,1)
c(1,2)
...
c(1,10)c(2,1)
c(2,2)
...
最后,我可以簡單地寫
do i=1,N
write(*,*) ( c(i,j), j=1,N )
end do
然后輸出就像矩陣一樣,但是當然不格式化。
如何在Fortran77中獲得正確的輸出?
編輯。 解決方法之一似乎是寫
do i=1, N
do j=1, N
write(*,'(F9.3,A,$)') c(i,j), ' '
end do
write(*,*) ' '
end do
您的格式僅指定一個浮點數,但實際上您想在每行寫入N
對於這種簡單情況,一個相當通用的解決方案是
program temp
implicit none
integer, parameter :: N=3
real, dimension(N,N) :: c
integer :: i,j
character(len=20) :: exFmt
c = 1.0
write(exFmt,'("(",I0,"(F8.3))")') N
do i=1,N
write(*,exFmt) (c(i,j), j=1,N)
end do
end program
這將使exFmt
為'(3(F8.3))'
exFmt
'(3(F8.3))'
,它指定打印三個浮點數(請注意,您可能真的希望'(3(F8.3," "))'
顯式地包含一些間距)。
請注意,某些編譯器將exFmt
設為'(*(F8.3))'
。 這是fortran 2008規范的一部分,因此可能無法由您有權訪問的所有編譯器提供。 有關編譯器支持的摘要,請參見此處 (請參見Unlimited format item ,這要歸功於HighPerformanceMark)
最后,一個簡單的選擇是使用格式聲明,例如'(1000(F8.3))'
,其中1000比您所需要的大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.