* FILE MATR.FOR
* SCOPO: SOLUZIONE ESERCIZIO 4 COMPITO ESAME 16/09/1999

      SUBROUTINE MINMAX (MAT,N,R,C)
* MAT E N SONO PARAMETRI DI INPUT
* R E C SONO PARAMETRI DI OUTPUT
      IMPLICIT NONE
* DICHIARAZIONE PARAMETRI
      INTEGER N, R, C, MAT(N,N)
* DICHIARAZIONE VARIABILI
      INTEGER I, J
      REAL MEDIAMAX/0/, MEDIA
* NOTE:
* 1. LA MEDIA DI RIGHE E COLONNE E' REALE.
* 2. POICHE' LA MATRICE E' DI INTERI POSITIVI, LA MEDIA DI RIGHE E COLONNE
*    E' SEMPRE >=0

* PRIMA FASE: CALCOLO INDICE DELLA RIGA LA CUI MEDIA ARITMETICA E' MASSIMA
      DO 10 I = 1, N
* CALCOLO MEDIA RIGA I-ESIMA
        MEDIA = 0
        DO 20 J = 1, N
          MEDIA = MEDIA + MAT(I,J)
 20     CONTINUE
        MEDIA = MEDIA / N
        IF (MEDIA .GE. MEDIAMAX) THEN
          R = I
          MEDIAMAX = MEDIA
        ENDIF
 10   CONTINUE

* SECONDA FASE: CALCOLO INDICE DELLA COLONNA LA CUI MEDIA ARITMETICA E' MASSIMA
      MEDIAMAX = 0
      DO 30 I = 1, N
* CALCOLO MEDIA COLONNA I-ESIMA
        MEDIA = 0
        DO 40 J = 1, N
          MEDIA = MEDIA + MAT(J,I)
 40     CONTINUE
        MEDIA = MEDIA / N
        IF (MEDIA .GE. MEDIAMAX) THEN
          C = I
          MEDIAMAX = MEDIA
        ENDIF
 30   CONTINUE

      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)
      INTEGER RIGAMAX, COLMAX

      MATRICE(1,1) = 1
      MATRICE(2,1) = 0
      MATRICE(3,1) = 1

      MATRICE(1,2) = 1
      MATRICE(2,2) = 1
      MATRICE(3,2) = 1

      MATRICE(1,3) = 0
      MATRICE(2,3) = 1
      MATRICE(3,3) = 1

      CALL MINMAX(MATRICE,DIM,RIGAMAX,COLMAX)

      WRITE(*,*) 'INDICE RIGA LA CUI MEDIA ARITMETICA E'' MASSIMA: '
      WRITE(*,*) RIGAMAX
      WRITE(*,*) 'INDICE COL. LA CUI MEDIA ARITMETICA E'' MASSIMA: '
      WRITE(*,*) COLMAX

      STOP
      END
