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.

3.4 Operazioni globali su array 131<br />

Infine, tutti gli elementi di un array possono essere inizializzati con un unico valore, specificando<br />

quest’ultimo nell’istruzione di dichiarazione di tipo. La seguente istruzione, ad esempio,<br />

imposta ad uno tutti gli elementi dell’array vett3:<br />

REAL, DIMENSION(50) :: vett3=1.<br />

3.3.4 Indici fuori range<br />

Ogni elemento di un array è identificato da uno o più indici interi. <strong>Il</strong> range dei numeri interi che<br />

corrispondono agli elementi dell’array dipende dalla dimensione dell’array così come specificato<br />

nella relativa istruzione di dichiarazione. Ad esempio, per un array reale dichiarato come:<br />

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

gli indici interi 1, 2, 3, 4 e 5 corrispondono agli elementi dell’array. Qualsiasi altro numero<br />

intero, minore di1omaggiore di5, non può essere utilizzato come indice poiché non corrisponde<br />

ad una locazione della memoria riservata all’array. Questi interi sono detti fuori range (out<br />

of bounds). Cosa accade quando un programma faccia uso di un indice fuori range dipende<br />

dallo specifico compilatore. In alcuni casi il programma viene interrotto immediatamente, in<br />

altri casi viene raggiunta la locazione della memoria che sarebbe stata utilizzata se fosse stato<br />

utilizzato quell’indice. Ad esempio, se si utilizzasse l’elemento a(6), essendo a l’array definito<br />

in precedenza, il computer accederebbe alla prima locazione ubicata dopo il confine dell’array<br />

a; dal momento che questa locazione potrebbe essere allocata per scopi totalmente diversi, il<br />

programma potrebbe fallire in maniera molto ”subdola”.<br />

E’ da precisare che alcuni compilatori prevedono un controllo sul programma per verificare<br />

che nessuno tra gli indici utilizzati sia fuori range. Normalmente questi controlli richiedono molto<br />

tempo e rallentano l’esecuzione dei programmi per cui, se il compilatore lo consente, è buona<br />

norma attivare tale controllo in fase di debugging ed escluderlo una volta che il programma sia<br />

stato testato in modo da avere un file eseguibile più ”snello” e veloce.<br />

3.4 Operazioni globali su array<br />

Una importante caratteristica del <strong>Fortran</strong> <strong>90</strong>/<strong>95</strong> è la possibilità di eseguire operazioni con<br />

interi array, ossia trattando l’array nel suo complesso come un singolo oggetto, anziché operare<br />

singolarmente su ciascun elemento. Si rimuove così la necessità di lavorare con una serie di cicli<br />

DO innestati che, tipicamente, sono più time-consuming e meno leggibili di operazioni ”globali”.<br />

Affinché possano avere luogo operazioni globali su array è necessario che (per operazioni<br />

binarie) i due array siano compatibili (giova ricordare, a questo proposito, che due array sono<br />

detti compatibili se hanno la stessa forma, anche se non hanno lo stesso range di indici in<br />

ogni dimensione, ed inoltre, che un qualunque array è sempre compatibile con uno scalare).<br />

Le operazioni tra due array compatibili sono sempre eseguite sugli elementi corrispondenti, ed<br />

inoltre tutti gli operatori intrinseci possono essere applicati ad interi array in forma globale con<br />

l’effetto che l’operatore è applicato elemento×elemento.

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

Saved successfully!

Ooh no, something went wrong!