2015-11-11 190 views
-2

如何將以下代碼轉換爲matlab?我對goto聲明感到困惑。將fortran代碼轉換爲matlab

do 57 i=1,10 
     statement 1 
     if(k .eq. nx) then 
      statement 2 
      go to 58 
     end if 
57 continue 
     statement 3 
58 continue 
+0

MATLAB沒有'goto',但有一個小moficitation和使用'你應該能夠達到類似的效果 – gregswiss

回答

0

使用GOTO命令不被視爲一種很好的過程編程。 使用下列程序來代替:

i=1; 
t=true; 
while (i<=10)&&t 
    statement1; 
    t=k~=nx; 
    i=i+1; 
end 

if t 
    statement2; 
else 
    statement3; 
end 
0

這個Fortran代碼片段有一個非常糟糕的代碼味道。

但這裏有幾件事情:

true在這裏似乎是一個變量。 Fortran中的正確值爲.TRUE.(或.true.)。假設該變量始終是.TRUE.,那麼代碼可以很容易地改寫:

statement 1 
statement 2 

就是這樣。您的代碼會立即跳出循環並超過statement 3,因此每個語句只會執行一次。

但是假設true是一些變量或表達已經在循環的每次迭代中重新評估,這是一種更好的方式:

do i = 1, 10 
    statement 1 
    if (true) exit 
end do 
if (true) then 
    statement 2 
else 
    statement 3 
end if 

現在這仍然假定true是一個靜態表達,那就是它不會改變它在呼叫之間的價值。

+0

break'謝謝你的解決方案..其實'true'是返回bool值的邏輯表達式。 –

+0

看看他之前的版本,他在'if'中有一個有效的邏輯語句。他將其編輯爲「true」可能僅僅是他缺乏Fortran知識的人爲因素,沒有意識到這不是我們如何說「真」。 – casey