25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

6.4 Array automatici 317<br />

REAL, DIMENSION(n), INTENT(INOUT) :: x ! explicit-shape<br />

REAL, DIMENSION(:), INTENT(INOUT) :: y ! assumed-shape<br />

! Variabili Locali<br />

REAL, DIMENSION(SIZE(y,1)) :: a ! automatico<br />

REAL, DIMENSION(n,n) :: b ! automatico<br />

REAL, DIMENSION(10) :: c ! explicit-shape<br />

...<br />

END SUBROUTINE mia_sub<br />

In questa procedura, gli array a e b non sono parametri formali, tuttavia i limiti dei loro indici<br />

non sono costanti (in particolare, il limite superiore di a dipende dalla forma del parametro<br />

formale y, mentre entrambi i limiti di b sono pari al parametro formale n). Dunque, le variabili<br />

(locali) a e b sono array automatici, mentre l’array c, avendo dimensioni costanti, non lo è.<br />

Può giovare riportare un secondo esempio:<br />

PROGRAM stringhe<br />

CHARACTER(LEN=20), PARAMETER :: a="Questo e’ un esempio"<br />

PRINT*, double(a)<br />

CONTAINS<br />

FUNCTION double(a)<br />

CHARACTER(LEN=*), INTENT(IN) :: a<br />

CHARACTER(LEN=2*LEN(a)) :: double<br />

double=a//a<br />

END FUNCTION double(a)<br />

END PROGRAM stringhe<br />

Gli array automatici sono utili quando in una procedura è richiesto, in forma temporanea,<br />

spazio in memoria per un array la cui forma non è nota a priori. Per tale ragione gli array<br />

automatici sono spesso chiamati array di lavoro. In tali situazioni l’uso degli array automatici<br />

può notevolmente semplificare la sequenza di chiamata di una procedura eliminando la necessità<br />

di passare, come argomenti, array di forma talvolta ”complicata”. Inoltre, gli array automatici<br />

possono essere passati come argomenti ad altre procedure che vengano invocate dalla procedura<br />

all’interno della quale detti array sono dichiarati.<br />

E’ doveroso sottolineare che non è possibile inizializzare gli array automatici nelle istruzioni<br />

di dichiarazione di tipo, ma è possibile farlo nelle istruzioni di assegnazione all’inizio della<br />

procedura in cui gli array vengono creati. Inoltre, dal momento che un array automatico è,<br />

per definizione, un oggetto temporaneo, non è possibile specificare per esso l’attributo SAVE.<br />

Tuttavia, gli array automatici possono essere passati come argomenti ad altre procedure che<br />

vengano invocate dalla procedura all’interno della quale detti array sono dichiarati.<br />

Un ulteriore problema associato agli array automatici è che non esiste alcun modo per sapere<br />

se un tale array sia stato creato con successo o meno. Infatti, se non c’è sufficiente memoria<br />

per allocare un array automatico, il programma abortirà in maniera piuttosto subdola. In caso<br />

di dubbio circa la capacità del processore di creare un array di dimensioni considerevoli, è bene<br />

optare per la dichiarazione dei più complessi array allocabili i quali, al contrario, prevedono un<br />

meccanismo di check riguardo la riuscita dell’operazione di allocazione.

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

Saved successfully!

Ooh no, something went wrong!