我多次查看此代码,无法弄清楚如何纠正它。
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 section
。
error #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
。
答案 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