Controllo del flusso: cicli DO

  • I cicli DO in F90 non differiscono sostanzialmente dal F77, ma si consiglia di usare la variante in cui il ciclo si chiude non con un'istruzione etichettata ma con l'ENDDO.
  • F95 mette al bando i cicli DO con l'indice reale, di scarsa utilità e che non garantiscono un numero esatto di iterazioni, possono essere rimpiazzati con un minimo di aritmetica intero/reale.
  • F90 ufficializza anche i cicli DO WHILE, già presenti in molte estensioni non standard F77; il ciclo viene eseguito finché il valore dell'espressione logica in WHILE rimane vera; l'espressione viene valutata anche prima dell'eventuale prima iterazione.
  • L'istruzione CYCLE permette di saltare immediatamente all'iterazione successiva del ciclo più interno, mentre EXIT fa terminare immediatamente il ciclo più interno
  • I cicli possono essere etichettati nel DO e, volendo, anche nell'ENDDO; l'etichetta può essere usata da CYCLE e EXIT per riferirsi ad un ciclo più esterno
PROGRAM cicli
INTEGER :: i, ni, nj
REAL :: t(:,:), delta, somma

DO i = 1, 10
  PRINT*,i
ENDDO

trovato = .FALSE.
extern: DO j = 1, nj
  DO i = 1, ni
    IF (t(i,j) < 273.15) THEN
      trovato = .TRUE.
      EXIT exter
    ENDIF
  ENDDO
ENDDO extern

IF (trovato) PRINT*,'Prevedo gelate'

delta = 0.
DO WHILE(delta < 1.)
  somma = funz(x,y)
  IF (somma < 0.) CYCLE
  delta = delta + SQRT(somma)
END WHILE

END PROGRAM cicli

L'indenting dei cicli DO non è obbligatorio, ma può migliorare la leggibilità del codice e, al solito, emacs lo fa gratis e in quantità programmabile (file .emacs); consiglio di limitare comunque l'indenting a 2 caratteri.