我有一个从1到n的do循环,它包含一个if语句。 如果满足要求,则某些参数(包括n)已更改。 所以我想再次从i = 1开始整个do循环,直到i = n,直到不再满足要求并且我达到n。 但我不知道如何在fortran中编程。 因为在当前情况下,在if语句之后do循环继续,如果if语句满足另一个i,它将覆盖先前的数据。如果每次满足要求时do-loop都会重新启动,则不再是这种情况。 有人知道如何在fortran 90中编程吗?
所以有一个数组包含一列数字。如果满足if语句,我想在列中插入一个额外的数字。因此,在该点之前的所有数字应保持在原位,此额外点之后的所有点应向下移动一个,然后在创建的自由点中,额外的点出现。一切正常。 但是,如果if语句满足两次,则必须添加两个点,但是在必须添加第二个点时,它将覆盖添加第一个点的数据。因此,如果可以从第一次从结果开始从头开始完全重启if-loop,包括额外的点,它将起作用。 所以它应该从i = 1开始然后继续运行直到满足if语句,执行if语句,再次从i = 1开始,然后重复这个直到i = n(每次点数增加时增加加) 我不知道代码是如何相关的,但特别适合你: prevnumbers是起始数字,它遵循一些导致数字的步骤。如果那么数字不符合if语句,则必须更改原始数字(prevnumbers),然后再次执行步骤。
do i = 1,n
if (numbers(i,1) >= x) then
!this part will transfer the previous numbers to the new numbers until the new point
do j=1,i
numbers(j,1)=prevnumbers(j,1)
end do
!This part will move the numbers after the new number one ahead so a free spot is created
do j=n,i,-1
numbers(j+1,1)=prevnumbers(j,1)
end do
!this part adds the new number and increases n by 1.
numbers(i+1,1)=(prevnumbers(i,1)+prevnumbers(i+1,1))/2
n=n+1
end if
end do
答案 0 :(得分:2)
如果您事先不知道确切的迭代次数,那么您可能不应该首先使用带索引的do循环。未经测试。
i = 0
do
i = i + 1
if (i>n) exit
if (numbers(i,1) >= x) then
!this part will transfer the previous numbers to the new numbers until the new point
do j=1,i
numbers(j,1)=prevnumbers(j,1)
end do
!This part will move the numbers after the new number one ahead so a free spot is created
do j=n,i,-1
numbers(j+1,1)=prevnumbers(j,1)
end do
!this part adds the new number and increases n by 1.
numbers(i+1,1)=(prevnumbers(i,1)+prevnumbers(i+1,1))/2
n=n+1
end if
end do
答案 1 :(得分:1)
for循环不适合您的问题,请使用do-while循环。
i=1
do while(i<=n)
! if the condition is met
! do all the stuff
! set the new value of n
! set i to 1 to restart the loop
end do
确保你不会永远循环,这意味着在某些时候我从1变为n而没有满足条件。