Le matrici

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