PROGRAM Matrice
!--------------------------------------------------------------------------
! Lettura e scrittura di una matrice
!--------------------------------------------------------------------------
  IMPLICIT NONE
  REAL,DIMENSION(10,10) :: mat
!   L'attributo DIMENSION dichiara una matrice (qui di 10x10 elementi)
!   DEFINIZIONI:
!     Rango dell'array (rank): numero di indici (2 in questo caso)
!     Estensione di un indice (extent): n. di valori ammessi per l'indice
!     Forma dell'array (shape): sequenza delle estensioni (qui 10x10)
!     Ampiezza dell'array (size): numero di elementi (qui 100)
!   Un matrice viene memorizzata per colonne, cioe' le colonne si succedono
!   ordinatamente nelle parole di memoria.
  INTEGER :: N, M, I

  WRITE(*,*) "Dimensioni della matrice? "
  READ(*,*) N, M
  WRITE(*,*) "Dammi la matrice per righe: "
  DO I=1,N
    READ(*,*) mat(I,1:M)
!     mat(I,1:M): sezione di matrice, in questo caso la riga I-esima.
!     La sintassi 1:M indica tutti gli interi fra 1 ed M.
!     Gli indici degli elementi e delle sezioni vanno racchiusi tra
!     parentesi tonde, le uniche che il Fortran conosca.
!     NOTA: l'istruzione precedente legge singole righe, la cui
!     introduzione deve pertanto essere terminata con INVIO.
  END DO
  WRITE(*,*) "La matrice e': "
  DO I=1,N       ! Scrivi la matrice per righe
    WRITE(*,*) mat(I,1:M)
  END DO
  STOP
END PROGRAM Matrice
