integer i, n, suma : : : suma = 0 do 10 i = 1, n suma = suma + i write(*,*) 'i =', i write(*,*) 'suma =', suma 10 continueEl número 10 es una sentencia de etiqueta. Típicamente, podría haber varios ciclos y otras sentencias en un programa que requierean una sentencia de etiqueta. El programador es responsable de asignar un número único a cada etiqueta en cada programa (o subprograma). Recordar que las posiciones de las columnas 2-5 son reservadas para sentencias de etiquetas. El valor numérico de las sentencias de etiqueta no tienen ningún significado, por lo que cualquier valor entero puede ser usado. Por lo general, los programadores incrementan las etiquetas de 10 en 10 cada vez.
La variable en la sentencia do es incrementada en 1 por default. Sin embargo, se puede usar cualquier otro entero para el paso o incremento. El siguiente segmento de programa muestra los números pares en forma decreciente entre el 1 y 10:
integer i do 20 i = 10, 1, -2 write(*,*) 'i =', i 20 continue
La forma general del ciclo do es la siguiente:
do etiqueta var = expr1, expr2, expr3 sentencias etiq continuedonde:
Nota: La variable del ciclo do nunca deberá ser modificada por otras sentencias dentro del ciclo, ya que puede generar errores de lógica.
Muchos compiladores de Fortran 77 permiten que los ciclos do sean cerrados por la sentencia enddo. La ventaja es que la sentencia etiqueta puede ser omitida, ya que en este caso la sentencia enddo cierra la sentencia do más cercana. La construcción enddo es ampliamente usada, pero no es parte del ANSI Fortran 77.
while (expr lógica) do sentencias enddoo de forma alterna
do while (expr lógica) sentencias enddoLas sentencias en el cuerpo serán repetidas mientras la condición en el ciclo while sea verdadera. A pesar de que esta sintaxis es aceptada por muchos compiladores (incluyendo el de Linux), no forma parte del ANSI Fortran 77. La forma correcta es usando las sentencias if y goto:
etiq if (expr lógica) then sentencias goto etiq endif
A continuación se tiene un ejemplo que calcula y muestra el doble de todos los número anterior comenzando con el 2 y que son menores a 100:
integer n n = 1 10 if (n .lt. 100) then n = 2*n write (*,*) n goto 10 endif
haz sentencias hasta (expr lógica)lo cual nuevamente, puede ser implementado en Fortran 77 usando las sentencias if y goto:
etiq continue sentencias if (expr lógica) goto etiqObservar que la expresión lógica en la última versión deberá ser la negación de la expresión dada en pseudocódigo.
do i = 10, 1, -2 write(*,*) 'i =', i enddopara simular los ciclos while y until se puede usar la construcción do-enddo, pero se tiene que agregar una sentencia condicional de salida exit (salida). El caso general es:
do sentencias if (expr lógica) exit sentencias end doSi se tienen la condición de salida al principio es un ciclo while, y si esta al final se tiene un ciclo until.
i = 1 mientras (i<100) haz suma = suma + i i = i+2 fin_mientras i = 0 x = 1.0 repite x = f(x) i = i+1 hasta que (x<0) muestra i, x
i = 1 suma = 0 10 do 20 i = 1, 50 if (i .gt. 10) goto 30 suma = suma + i 20 continue 30 if (i .le. 20) then suma = suma - 1 goto 20 else suma = 2*suma endif write(*,*) 'Suma =', suma