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.

314 Array Processing<br />

6.2 Array di forma esplicita<br />

Un array di forma esplicita (explicit-shape array) è un array che si caratterizza per avere estensioni<br />

esplicitamente specificate per ciascuna delle sue dimensioni già all’atto della istruzione di<br />

dichiarazione di tipo. In aggiunta, esso può, opzionalmente, avere limiti inferiori dichiarati per<br />

alcune o tutte le sue dimensioni.<br />

Quando un array di forma esplicita viene dichiarato, ciascuna dimensione viene specificata<br />

come:<br />

[limite_inferiore]:limite_superiore<br />

in cui il limite_inferiore vale uno per default.<br />

Ad esempio, le seguenti istruzioni:<br />

INTEGER, DIMENSION(10,10,10) :: m<br />

INTEGER, DIMENSION(-3:6,4:13,0:9) :: k<br />

dichiarano due array,mek, entrambi di forma esplicita con un rango pari a3, un’ampiezza1000,<br />

e forma (/10,10,10/). L’array m usa il limite inferiore di default (1) per ciascuna dimensione,<br />

per cui nella sua dichiarazione compaiono soltanto i limiti superiori. Per ciascuna dimensione<br />

di m, invece, sono specificati entrambi i limiti.<br />

Un array di forma esplicita può essere dichiarato sia in un programma principale che in una<br />

procedura.<br />

I limiti inferiore e superiore di una dimensione di un’array di forma esplicita che sia dichiarato<br />

all’interno di una procedura possono essere specificati anche a mezzo di variabili o espressioni<br />

le quali verranno valutate ogni qualvolta il controllo del programma entri nella procedura. Successive<br />

assegnazioni di queste variabili non avranno, tuttavia, alcun effetto sui limiti degli array.<br />

Ad esempio, data la seguente subroutine:<br />

SUBROUTINE esempio(n,r1,r2)<br />

IMPLICIT NONE<br />

DIMENSION(n,5) :: a<br />

DIMENSION(10*n) :: b<br />

...<br />

n = r1+r2<br />

...<br />

END SUBROUTINE esempio<br />

quando essa viene invocata, gli array a e b verranno dimensionati in relazione al valore attuale<br />

del parametro formale n. La successiva istruzione di assegnazione che modifica il valore di n<br />

non avrà alcun effetto sulle dimensioni degli array a e b.<br />

Un explicit-shape array che venga dimensionato con variabili o espressioni deve necessariamente<br />

essere un argomento formale di una procedura oppure il risultato di una funzione oppure<br />

deve essere un array automatico. Un array automatico è un particolare array di forma esplicita<br />

dichiarato in una procedura come variabile locale e con limiti non costanti. Gli array a e b

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

Saved successfully!

Ooh no, something went wrong!