3.4 DO...END DO

Fortran

A única estrutura de controle cíclica do Fortran é a construção DO, que possui a forma geral:

    DO [controle da execução]
        bloco de declarações
    END DO

Permitindo as três seguintes variações:

    DO
        bloco de declarações
    END DO
    
    DO i = inicio, fim, incremento
        bloco de declarações
    END DO
    
    DO WHILE (expressão lógica)
        bloco de declarações
    END DO

No código do programa exemplo abaixo, que calcula os números primos de 5 a 40, estão presentes as duas últimas variações da construção DO:

PROGRAM num_primos
    ! NÚMEROS PRIMOS DE 5 A 40
    IMPLICIT NONE
    INTEGER :: numero, divisor
    procura_numero: DO numero = 5, 40, 2
       divisor = 1
       DO WHILE (divisor .LT. (numero/2))
          divisor = divisor + 2
          IF (MOD(numero, divisor) .EQ. 0) THEN
             CYCLE procura_numero
          END IF
       END DO
       PRINT *, numero, ' É primo'
    END DO procura_numero
END PROGRAM num_primos

Abaixo está mostrada outra versão do programa visto acima utilizando somente a primeira variação da construção DO, ou seja, as duas últimas variações não são essenciais, podem sempre ser substituídas pela primeira variação acrescida das declarações EXIT, que termina a execução da construção DO, e CYCLE, que termina a execução do ciclo atual indo para o ciclo seguinte.

PROGRAM num_primos
    ! NÚMEROS PRIMOS DE 5 A 40
    IMPLICIT NONE
    INTEGER :: numero, divisor
    numero = 3
    procura_numero: DO
       numero = numero + 2
       IF (numero .GT. 40) THEN
          EXIT procura_numero
       END IF
       divisor = 1
       procura_divisor: DO
          divisor = divisor + 2
          IF (divisor .GT. (numero/2)) THEN
             EXIT procura_divisor
          END IF
          IF (MOD(numero, divisor) .EQ. 0) THEN
             CYCLE procura_numero
          END IF
       END DO procura_divisor
       PRINT *, numero, ' É primo'
    END DO procura_numero
END PROGRAM num_primos

Makefile:

num_primos: num_primos.f90
	gfortran -std=f95 num_primos.f90 -o num_primos
clean:
	rm num_primos

Execução:

           5  É primo
           7  É primo
          11  É primo
          13  É primo
          17  É primo
          19  É primo
          23  É primo
          29  É primo
          31  É primo
          37  É primo