2014-06-24 131 views
1

例如,我想以1爲增量從1循環到500.然而,對於每8個循環,我想跳過接下來的18個循環(使do變化增加18)。我怎麼做?如何在Fortran的do循環中跳過幾次迭代

我的代碼是:

event = 0 
do i = 1,500,2 
    event = event + 1 
    if (event .eq. 8) then 
      i = i + 18 
      event = 0 
    endif 
enddo 

但是,我得到了錯誤:「一個DO體內的DO變量不應出現在變量定義背景」。基本上我不能改變循環中的變量「我」。那麼我應該如何編寫代碼來實現它呢?

謝謝。

+1

這是一個錯誤,因爲Fortran允許根據您的'do i ...'行完全基於計算出的數字來優化您的循環(並且必須知道迭代次數)。這是Fortran爲了優化目的而犧牲的(很多)事情之一。 – casey

回答

4

禁止修改循環索引。你可以用幾種方式解決你的問題。舉例來說,這裏是沒有明確的循環索引的解決方案:

i = -1 
do 
    i=i+2 
    if(i > 5000) exit 
    if (i == 15) i=i+18 
    ... 
enddo 
+2

同樣'做同時(我<5000)' – agentp

+0

輝煌!謝謝! – FalloutRanger

1

考慮這個例子嵌套循環,像

do k=0,15 
    do j=0,7 
     i=34*k+2*j ! 34 == 18+2*8 
     .... 
    end do 
    end do 

(可能是我沒有算術,其實你看到的想法)