25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

2.3 Istruzioni di ripetizione 103<br />

Una cosa su cui fare particolarmente attenzione è la necessità di non modificare mai la<br />

variabile indice all’interno di un ciclo. Modificare il valore di questa variabile può portare a<br />

risultati inaspettati come, ad esempio, il generarsi di un ciclo infinito. <strong>Il</strong> seguente programma<br />

mostra un esempio di tale tipo di errore:<br />

PROGRAM errore<br />

IMPLICIT NONE<br />

INTEGER :: i<br />

DO i=1,4<br />

...<br />

i = 2 ! Errore: e’ vietato modificare il contatore<br />

...<br />

END DO<br />

END PROGRAM errore<br />

Come si nota, ad ogni passaggio del ciclo il valore della variabile i viene impostato a 2 per cui<br />

l’indice del ciclo non potrà mai essere maggiore di 4. Si noti, però, che quasi tutti i compilatori<br />

sono in grado di riconoscere un errore di questo tipo e generano, di conseguenza, un errore in<br />

fase di compilazione.<br />

Due cicli si dicono annidati quando un ciclo giace interamente all’interno dell’altro. Un<br />

”nido” di DO è, ad esempio, il seguente:<br />

DO i=1,3<br />

DO j=1,3<br />

prod = i*j<br />

PRINT*, prod<br />

END DO<br />

END DO<br />

In questo esempio, il ciclo esterno assegna il valore 1 all’indice i, poi viene eseguito il ciclo<br />

interno, per tre volte, con l’indice j che assume in successione i valori 1, 2 e 3. Quando il ciclo<br />

interno è stato completato, il ciclo esterno assegna il valore 2 alla variabile i e viene eseguito<br />

nuovamente il ciclo interno. <strong>Il</strong> processo viene iterato fino ad esaurimento del ciclo esterno.<br />

In ogni caso il ciclo interno viene sempre eseguito completamente prima che l’indice del ciclo<br />

esterno venga incrementato.<br />

Dal momento che non è possibile modificare la variabile indice all’interno del corpo di un<br />

ciclo DO non è possibile utilizzare lo stesso indice per due cicli annidati in quanto il ciclo interno<br />

tenterebbe di cambiare il valore dell’indice all’interno del corpo del ciclo esterno.<br />

In presenza di cicli annidati può tornare particolarmente utile assegnare un nome a ciascun<br />

ciclo così da avere un ”riferimento” a ciascuno di essi. Ciò può facilitare la manutenzione di<br />

programmi complessi e l’individuazione di eventuali errori commessi in fase di editing. Le regole<br />

da seguire per assegnare un nome ad un ciclo sono le stesse viste con i costrutti IF: il nome può<br />

essere lungo al massimo 31 caratteri, deve essere unico all’interno della unità di programma<br />

che ospita il ciclo, non può coincidere con il nome di una variabile o di una costante usata<br />

all’interno della stessa unità di programma. Inoltre, se il nome è presente nell’istruzione DO

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!