我对此代码有错误,我不明白为什么
- “(1)中的模块或主程序数组'u'必须具有恒定的形状。”
- 另外,如何通过选择参数来做这个代码,我的意思是[U] =向量(N),我可以选择N,然后返回给我。
program vector
!declaration
implicit none
integer :: n
integer, parameter :: N=10
real, dimension(N,1) :: U
do n=1,N
U(1,N)=n
end do
print*,U
end program vector
答案 0 :(得分:0)
首先,Fortran是 IN 敏感的,所以n
和N
是相同的,你不能声明两个不同的变量/参数{{1 }和n
。
然后,您声明N
具有U
形状,但似乎在(N, 1)
形式中使用它。
至于如何自动生成类似(1, N)
的内容,您可以使用以下内容:
U
还有一件事:
您声明function vector(n) result(v)
integer, intent(in) :: n
integer :: v(n)
integer :: i
v = [ (i, i=1, n) ]
return
end function vector
U
创建一个二维数组,其中一个维度的长度为1.我想知道您是否要创建范围从dimension(1, N)
到{的一维数组{1}},声明需要1
(或者,因为Fortran假设索引从1开始,只有N
)。
解决评论中的问题:
dimension(1:N)
的目的告诉编译器在此函数中只读取dimension(N)
,而不是写入intent(in)
。考虑到您希望将n
用作数组n
的大小,您需要这样做。v
我告诉编译器我想使用名称result(v)
来引用函数的结果,而不是默认值(函数名称)。我这样做是为了避免混淆。v
与integer :: v(n)