簡體   English   中英

如何用fortran77編寫格式化的矩陣?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM