fortran数组代码中的未知错误

时间:2015-11-07 15:38:31

标签: arrays fortran

我多次查看此代码,无法弄清楚如何纠正它。

program main
implicit none

real, parameter :: dx=1
real, parameter :: dy=1

real :: a1, a2, a3, a4, a5
a1=dy/dx
a2=dx/dy
a3=-2*(dy/dx+dx/dy)
a4=dx/dy
a5=dy/dx

REAL, DIMENSION(5,1):: a
DATA a/a1,a2,a3,a4,a5/

!write (*,*) a(1),a(2)
pause
endprogram 
非常感谢你和错误:
error #6236:A specification statement cannot appear in the executable sectionerror #6404: This name does not have a type, and must have an explicit type。 [一个] error #6211: A symbol must be a defined parameter in this context

1 个答案:

答案 0 :(得分:2)

您正在混合规范(数据声明)语句和可执行语句。声明语句必须首先执行,并且可执行语句只能在每个编译单元或块中跟在它们之后。

此外,DATA语句中用于初始化的实体必须是常量表达式。

修复代码的一种方法是:

program main
  implicit none

  real, parameter :: dx=1
  real, parameter :: dy=1

  real, parameter :: a1=dy/dx
  real, parameter :: a2=dx/dy
  real, parameter :: a3=-2*(dy/dx+dx/dy)
  real, parameter :: a4=dx/dy
  real, parameter :: a5=dy/dx

  REAL, DIMENSION(5,1):: a
  DATA a/a1,a2,a3,a4,a5/

  !write (*,*) a(1),a(2)

end program

请勿使用PAUSE语句。它从现代Fortran中删除,并且(即使在旧版本中)它实际上应该做什么也不清楚()。

您还可以使用数组构造函数初始化数组。在这种情况下,您不需要常量表达式:

program main
  implicit none

  real, parameter :: dx=1
  real, parameter :: dy=1
  REAL, DIMENSION(5,1) :: a

  a = reshape([dy/dx, dx/dy, -2*(dy/dx+dx/dy), dx/dy, dy/dx], [5,1])
end program