【发布时间】:2022-01-02 03:20:24
【问题描述】:
我有一个算法来订购一个向量l(i),其中的组件按升序排列,我还生成了一个向量顺序D(i),它告诉我每个组件来自哪里,所以我可以回到原来的(无序)向量。
顺序和顺序向量很好,当我想回到原来的时候出现问题。由于某种原因它不起作用,它重复向量的组件而不是按特定顺序。我不知道它是什么。
代码如下:
program order
implicit none
integer i,j,k,q
integer l(7),D(7)
real x
do i=1,7
call random_number (x)
l(i)=1+FLOOR(13*x)
enddo
Write(*,*) "Without order"
do i=1,7
Write(*,*) l(i)
enddo
do i=1,7
D(i)=i
enddo
do i=1,6
do j=i+1,7
if(l(i).gt.l(j))then
k=l(i)
l(i)=l(j)
l(j)=k
q=D(i)
D(i)=D(j)
D(j)=q
endif
enddo
enddo
Write(*,*) "Ordered"
do i=1,7
Write(*,*) l(i)
enddo
Write(*,*) "Order vector"
do i=1,7
Write(*,*) D(i)
enddo
do i=1,7
l(D(i))=l(i)
enddo
Write(*,*) "The original vector is"
do i=1,7
Write(*,*) l(i)
enddo
endprogram order
【问题讨论】:
-
Fortran 支持向量下标。如果
D持有原仓位,那么I(D)就是原订单。 -
欢迎您,请拨打tour 并阅读How to Ask。请更好地解释问题。不要说“它不起作用”,它没有说任何有用的东西。告诉我们出了什么问题。结果不正确吗?究竟有多不正确?还是有一些错误信息?你写道它发生在最后一步,但实际发生了什么?顺序不正确吗?有多不正确?或者有什么问题?
-
语句:`l(D(i))=l(i)` 将导致
l的元素已经有一个替换值但它的值还没有被替换放在后面的某个地方。 (请注意,您的程序无法编译,因为您没有声明k和q。此外,我不会在代码中使用像6和7这样的数字,而是在此处使用nmax的值。 -
请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
-
“nota un a specific perder”是什么意思。您关于用
7替换nmax的编辑与我的一般建议相反,即在任何地方使用数字6和7, better to use instead of7` 而不是nmax而不是6nmax -1
标签: arrays sorting vector fortran