首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用fortran77在行中写入格式化矩阵?

如何用fortran77在行中写入格式化矩阵?
EN

Stack Overflow用户
提问于 2016-06-07 12:07:24
回答 1查看 2.4K关注 0票数 0

假设我有矩阵c(i,j)。我想用最古老的Fortran77语言把它写在屏幕上,在逗号后面有三个符号。我写

代码语言:javascript
复制
         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)

..。

最后,我可以简单地写

代码语言:javascript
复制
         do i=1,N
         write(*,*) ( c(i,j), j=1,N )
         end do

然后输出就像矩阵,但是,当然,它没有格式化。

如何在Fortran77中获得正确的输出?

编辑。似乎解决办法之一就是写

代码语言:javascript
复制
   do i=1, N
   do j=1, N
    write(*,'(F9.3,A,$)') c(i,j), ' '
   end do
    write(*,*) ' '
   end do
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-07 14:30:31

您的格式只指定一个浮点,但实际上希望每行编写N

对于这个简单的情况,一个相当普遍的解决方案是这样的

代码语言:javascript
复制
  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))',它指定打印三个浮动(请注意,您可能真的希望'(3(F8.3," "))'显式地包含一些间隔)。

注意,一些编译器将允许exFmt只是'(*(F8.3))'。这是fortran 2008规范的一部分,所以您可以访问的所有编译器都不能提供该规范。有关编译器支持的摘要,请参见这里 (请参阅无限格式项,这要感谢HighPerformanceMark )。

最后,一个简单的方法是使用像'(1000(F8.3))'这样的格式状态,其中1000比你所需要的要大。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37678950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档