В момента превеждам ръчно код от Fortran на MATLAB и не съм сигурен как да преведа част от него. (Целият код всъщност е подпрограма от 2000 реда.) Кодът е по-долу.
C Has series crossed neckline?
120 neckext=x(trough(peaknum-1))+
* dydx*real((t-trough(peaknum-1)))
if(x(t).lt.neckext) goto 130
C NO. Here if series has not crossed neckline, nor new trough found
C Check to see if new trough has been found.
t=t+1
if(t.ge.lastobs) goto 900
if(x(t).lt.min) then
min=x(t)
mindate=t
end if
troughid=min*(1.0+cutoff)
if(x(t).ge.troughid) goto 150
goto 120
C YES. Here if series crossed neckline before new trough found
130 dblcount=0
if(poscount.ge.1) then
DO 132 i=1,poscount
if((enterdt(i)-2.le.t).and.(t.le.enterdt(i)+2)) then
dblcount=dblcount+1
end if
132 continue
if(dblcount.ge.1) then
C write(30,2583) t,Cutnum
2583 format('DoubleCounting episode occurred at ',I5,
* ' with Cutoff = ',F3.1)
goto 150
end if
end if
Проблемът ми е с тази част от кода:
if(x(t).ge.troughid) goto 150
goto 120
Когато превеждах тази част в MATLAB, пишех нещо като:
if x(t,:)>=troughid
t=marker;
minimum=x(t,:);
end
Но не знам какво да правя с етикета 120. Като го превеждам, пак ли пиша тази част? Защото доколкото разбирам, когато се върна на 120, кодът ще се изпълнява отново. Благодаря!
РЕДАКТИРАНЕ: Като отговор на въпроса на Крис какво правят етикетите 150 и 900, ще ги публикувам тук.
150 t=marker
min=x(t)
И това е за етикета 900.
C Last observation found. This iteration finished.
900 continue
goto
правят кода труден за следване! - person High Performance Mark   schedule 04.09.2012goto
твърденията. - person John Alexiou   schedule 04.09.2012