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.

316 Array Processing<br />

Tuttavia, se un tale array è l’argomento di una procedura esterna allora è necessario fornire un<br />

interface block nell’unità di programma chiamante.<br />

Ad esempio, considerata la seguente procedura esterna definente gli array fittizi di forma<br />

presunta arr1, arr2, arr3:<br />

SUBROUTINE sub(arr1,arr2,arr3)<br />

IMPLICIT NONE<br />

REAL, DIMENSION(:,:), INTENT(IN) :: arr1, arr2<br />

REAL, DIMENSION(0:,2:), INTENT(OUT) :: arr3<br />

...<br />

END SUBROUTINE sub<br />

una unità di programma chiamante sintatticamente valida potrebbe essere la seguente:<br />

PROGRAM prova_sub<br />

REAL, DIMENSION (0:9,10) :: arr1 ! forma (/10,10/)<br />

INTERFACE<br />

SUBROUTINE sub(arr1,arr2,arr3)<br />

IMPLICIT NONE<br />

REAL, DIMENSION(:,:), INTENT(IN) :: arr1, arr2<br />

REAL, DIMENSION(0:,2:), INTENT(OUT) :: arr3<br />

END SUBROUTINE sub<br />

END INTERFACE<br />

...<br />

CALL SUB (arr1,arr2(1:5,3:7),arr3(0:4,2:6))<br />

...<br />

END PROGRAM prova_sub<br />

6.4 Array automatici<br />

Un array automatico (automatic array) è uno speciale tipo di explicit-shape array che può essere<br />

dichiarato soltanto in una procedura come oggetto locale ma non come parametro formale<br />

ed inoltre deve essere caratterizzato dall’avere almeno uno dei limiti di un indice non costante.<br />

Lo spazio in memoria per gli elementi di un array automatico è allocato dinamicamente quando<br />

l’esecuzione del programma entra nella procedura, ed è rimosso automaticamente all’atto dell’uscita<br />

dalla procedura. Durante l’esecuzione della procedura nella quale esso è dichiarato, un<br />

array automatico può essere usato allo stesso modo di un qualsiasi altro array, in particolare<br />

può essere passato come parametro attuale in una ulteriore chiamata di procedura.<br />

Si guardi il seguente esempio:<br />

SUBROUTINE mia_sub(x,y,n)<br />

IMPLICIT NONE<br />

! Parametri Formali<br />

INTEGER, INTENT(IN) :: n

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

Saved successfully!

Ooh no, something went wrong!