2012-01-05 24 views
10

Tengo un fragmento Fortran77 que tiene este aspecto:Fortran hacer lazo 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 

Cuando esto golpea la sentencia GOTO 1301, hace este salto a la siguiente iteración del bucle o lo hace salir del bucle ? Por lo que yo entiendo, la palabra clave return no hace nada, así que supongo que esto saldrá del bucle y continuará la ejecución del código desde la etiqueta 1301, ¿es correcto?

estoy traduciendo esto a C# y estoy preguntando si esto es 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 si debería tener "continuar" en lugar de "retorno"?

Respuesta

10

Sí, la instrucción GOTO 1301 hace que el programa salte a la siguiente iteración.

DO label, label CONTINUE es una forma obsoleta de escribir un bloque más contemporáneo DO ENDDO. En este caso, el ciclo iterará sobre las variables especificadas en la línea DO, y la línea label CONTINUE sirve como un marcador de posición "ENDDO".

+0

Gracias. Para ser absolutamente claros al respecto, las instrucciones GOTO 1301 continuarán en realidad la ejecución del ciclo hasta que se cumpla la condición para la terminación del ciclo. –

+0

Sí. Su GOTO 1301 lo lleva a 1301 CONTINUAR, que se repetirá hasta la terminación del ciclo. – milancurcic

+0

Excelente. Muchas gracias, fue muy útil. –