Il seguente programma array.f90 contiene una matrice m di grandezza 4x6.
PROGRAM vettori IMPLICIT NONE INTEGER :: m(4,6) INTEGER :: i, j DO i=1, 4, 1 DO j=1, 6, 1 m(i, j) = i*10+j END DO END DO WRITE (*, fmt="(4i8)") m WRITE (*,*) SUM(m) STOP END PROGRAM vettori
La matrice va dichiarata come tutte le altre variabili. Si mettono fra parentesi le dimensioni, separata da virgole.
INTEGER :: m(4,6)
Notare che (al contrario di Java) gli indici vanno da 1 a 4 e da 1 a 6. In altre parole, gli indici partono da uno e non da zero. Un possibile ciclo per riempire la matrice è il seguente:
DO i=1, 4, 1 DO j=1, 6, 1 m(i, j) = i*10+j END DO END DO
La stampa di una matrice si può fare con un'unica istruzione:
WRITE (*, fmt="(4i8)") m
Esistono delle funzioni specifiche per le matrici. Per esempio, è possibile calcolare la somma di tutti gli elementi della matrice m usando la funzione predefinita SUM. Quindi, SUM(m) restituisce la somma di tutti gli elementi della matrice.
È anche possibile definire delle matrici senza specificare subito le dimensioni. Il seguente programma array2.f90 contiene una matrice bidimensionale a che viene inzialmente dichiarata senza specificare le sue dimensioni.
PROGRAM array2 IMPLICIT NONE INTEGER, ALLOCATABLE :: a(:,:) INTEGER :: n, m n=3 m=5 ALLOCATE(a(n, m)) a(1,2)=-1 a(3,5)=12 WRITE (*, "(3i8)") a STOP END PROGRAM array2
Nella dichiarazione va specificato il nome della matrice e il numero di dimensioni (in questo caso due, dato che si tratta di una matrice bidimensionale). Si aggiunge ALLOCATABLE, e questo permette di creare la matrice in un secondo momento.
INTEGER, ALLOCATABLE :: a(:,:)
La creazione della matrice viene fatta con l'istruzione ALLOCATE, nella quale vanno specificate le dimensioni della matrice.
ALLOCATE(a(n, m))
Notare che come dimensioni è anche possibile usare variabili o in generale espressioni intere. Se n e m valgono per esempio quattro e sei, rispettivamente, allora verrà creata una matrice 4x6. Da questo momento in poi, è come se a fosse stata dichiarata come una matrice 4x6, per cui è possibile effettuare su di essa tutte le normali operazioni su matrici:
a(1,2)=-1 a(3,5)=12 WRITE (*, "(3i8)") a