简单代码中的恒定形状错误

时间:2017-10-31 21:40:25

标签: algorithm vector fortran

我对此代码有错误,我不明白为什么

- “(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

1 个答案:

答案 0 :(得分:0)

首先,Fortran是 IN 敏感的,所以nN是相同的,你不能声明两个不同的变量/参数{{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)。

解决评论中的问题:

  1. dimension(1:N)的目的告诉编译器在此函数中只读取dimension(N),而不是写入intent(in)。考虑到您希望将n用作数组n的大小,您需要这样做。
  2. 使用v我告诉编译器我想使用名称result(v)来引用函数的结果,而不是默认值(函数名称)。我这样做是为了避免混淆。
  3. vinteger :: v(n)
  4. 相同