2012-01-05 11 views
10

Ho un frammento di Fortran77 che assomiglia a questo:Fortran fare ciclo con goto interna

DO 1301 N=NMLK-2,2,-1              
     Some code... 
     IF(NB1(N).EQ.50) GOTO 1300                
     Some code... 
     IF(BS(N).EQ.0.0) GOTO 1301             
     some code...                
     GOTO 1301                 
    1300 NW(M)=NB1(N)                
     Some code...                
    1301 CONTINUE 

Quando questo colpisce l'istruzione GOTO 1301, fa questo salto alla prossima iterazione del ciclo o lo fa uscire dal ciclo ? Per quanto ne so, la parola chiave return non fa nulla, quindi presumo che questo termini solo per uscire dal ciclo e continuare l'esecuzione del codice dall'etichetta 1301, è corretto?

sto traducendo questo per C# e mi chiedo se questo è equivalente:

for (N = NMLK; N >= 2; N--) 
{ 
    Some code... 
    if (NB1[N] == 50) 
     goto l1300; 
    Some code... 
    if (BS[N] == 0) 
     return; 
    Some code... 
    return; 
l1300: 
    NW[M] = NB1[N]; 
    Some code... 
} 

o se avrei dovuto "continuare" invece di "ritorno"?

risposta

10

Sì, l'istruzione GOTO 1301 fa passare il programma alla successiva iterazione.

Il DO label, label CONTINUE è un modo obsoleto per scrivere un blocco più contemporaneo DO ENDDO. In questo caso il ciclo verrà iterato sulle variabili specificate sulla linea DO e la riga label CONTINUE funge da segnaposto "ENDDO".

+0

Grazie. Giusto per essere assolutamente chiaro su questo, le istruzioni GOTO 1301 continueranno effettivamente l'esecuzione del ciclo fino a quando la condizione per la fine del ciclo è soddisfatta? –

+0

Sì. GOTO 1301 porta a 1301 CONTINUE, che verrà reiterato fino alla fine del ciclo. – milancurcic

+0

Eccellente. Grazie mille, è stato molto utile. –