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.

128 Array<br />

3.3.2 Costruttore di array<br />

Un costruttore di array crea un array di rango uno (ossia un vettore) contenente dei valori<br />

specificati. Questi ultimi possono essere forniti da lista oppure attraverso un ciclo DO implicito,<br />

o, al limite, a mezzo di una combinazione dei due sistemi.<br />

La forma generale del costruttore di array è la seguente:<br />

(/ lista_dei_valori_del_costruttore di_array /)<br />

A titolo di esempio, si possono considerare le seguenti istruzioni di assegnazione di array:<br />

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

a=(/(i,i=1,5)/) != (/1,2,3,4,5/)<br />

a=(/7,(i,i=1,3),9/) != (/7,1,2,3,9/)<br />

a=(/1./REAL(i),i=1,5)/) != (/1./1.,1./2.,1./3.,1./4.,1./5./)<br />

a=(/((i+j,i=1,2),j=1,2),5/) != (/((1+j,2+j,3+j),j=1,2)/) = (/2,3,3,4,5/)<br />

a=(/a(i,2:4),a(1:4:2,i+3)/) != (/a(i,2),a(i,3),a(i,4),a(1,i+3),a(3,i+3)/)<br />

Esiste una restrizione secondo cui sono possibili unicamente costruttori di array monodimensionali.<br />

E’ possibile, tuttavia, ”trasferire” i valori di un array di rango unitario in un array di<br />

rango qualsiasi a mezzo della funzione intrinseca RESHAPE. La funzione RESHAPE ha la seguente<br />

sintassi:<br />

RESHAPE(SOURCE,SHAPE[,PAD][,ORDER])<br />

in cui l’argomento SOURCE può essere, in generale, un array di forma qualsiasi (nel caso specifico<br />

un array di rango unitario). <strong>Il</strong> risultato dell’applicazione della funzione RESHAPE al vettore<br />

SOURCE fa sì che gli elementi di quest’ultimo vengano ”riarrangiati” in modo da formare un<br />

array di forma SHAPE.<br />

Si noti che se SOURCE contiene un numero di elementi maggiori del risultato di RESHAPE,<br />

allora gli elementi superflui saranno ignorati. Se, al contrario, il numero di elementi del risultato<br />

di RESHAPE è maggiore di quelli di SOURCE, allora l’argomento PAD deve essere presente.<br />

L’argomento PAD è un array dello stesso tipo di SOURCE, ed i suoi elementi vengono usati (se<br />

necessario, in maniera ripetuta) in sostituzione degli elementi ”mancanti” di RESHAPE. Infine,<br />

l’argomento opzionale ORDER consente agli elementi di RESHAPE di essere disposti secondo un<br />

ordine alternativo rispetto al consueto ordinamento degli elementi di array. A tale scopo è<br />

necessario che l’argomento ORDER sia un array avente stessa ampiezza e stessa forma di SHAPE,<br />

e che contenga le dimensioni di RESHAPE nell’ordine desiderato.<br />

Un semplice esempio servirà a chiarire l’utilizzo della funzione RESHAPE. Le seguenti istruzioni:<br />

REAL, DIMENSION(3,2) :: arr<br />

arr=RESHAPE((/((i+j,i=1,3),j=1,2)/),SHAPE=(/3,2/))<br />

⎡ ⎤<br />

2 3<br />

creano l’array: arr = ⎣ 3 4 ⎦<br />

4 5<br />

Se venisse incluso anche l’argomento ORDER, come nel seguente esempio:

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

Saved successfully!

Ooh no, something went wrong!