* FILE: quadmag.for
* SCOPO: Soluzione esercizio 4 compito esame 14/07/1999

      LOGICAL FUNCTION QuadMag (MAT, N)
      IMPLICIT NONE

* DICHIARAZIONE PARAMETRI
      INTEGER n, mat(n,n)

* DICHIARAZIONE VARIABILI
      INTEGER sommadia/0/, sommarig, i, j

      QuadMag = .TRUE.
      DO 10 i = 1, n
        sommadia = sommadia + mat(i,i)
 10   CONTINUE
      i = 1
      DO WHILE ((i .LT. n) .AND. QuadMag)
        sommarig = 0
        DO 30 j = 1, n
          sommarig = sommarig + mat(i,j)
 30     CONTINUE
        i = i + 1
        IF (sommarig .NE. sommadia) QuadMag = .FALSE.
      ENDDO
      RETURN
      END

* TEST (PARTE NON RICHIESTA DAL TESTO)
      PROGRAM Main
      IMPLICIT NONE

* DICHIARAZIONE COSTANTI
      INTEGER DIM
      PARAMETER (DIM = 3)

* DICHIARAZIONE VARIABILI
      INTEGER matrice(DIM,DIM)

* DICHIARAZIONE FUNZIONI ESTERNE
      LOGICAL QuadMag
*       parametri: INTEGER(*), INTEGER

      matrice(1,1) = 1
      matrice(2,1) = 1
      matrice(3,1) = 1

      matrice(1,2) = 1
      matrice(2,2) = 1
      matrice(3,2) = 1

      matrice(1,3) = 1
*     matrice(1,3) = 0
      matrice(2,3) = 1
      matrice(3,3) = 1

      IF (QuadMag(matrice, DIM)) THEN
        WRITE(*,*) 'VERIFICA LA PROPRIETA'''
      ELSE
        WRITE(*,*) 'NON VERIFICA LA PROPRIETA'''
      ENDIF

      STOP
      END
