      PROGRAM TEMPERATURAS
      IMPLICIT NONE
      INTEGER N, M, NMAX, I, J
      PARAMETER (NMAX = 9)
      REAL A(NMAX,NMAX), AP(NMAX,NMAX), AR(NMAX,NMAX)
      REAL PROM, RAIZ
      CHARACTER*20 NOMENT
      EXTERNAL PROM, RAIZ
 20   FORMAT(7X,I1,3X,I1)
 21   FORMAT(9(F7.4,2X))
      WRITE(*,*) "Ingresar el nombre del archivo con la matriz"
      READ(*,*) NOMENT
      OPEN(10, FILE = NOMENT)
      OPEN(11, FILE = "Temperaturas.sal")
      READ(10,20) N, M
      DO I = 1, N
         READ(10,*) (A(I,J), J = 1, M)
      ENDDO
      DO I = 1, N
         DO J = 1, M
            AP(I,J) = A(I,J)
            AR(I,J) = A(I,J)
         ENDDO
      ENDDO
      CALL COMPLETA(PROM, AP, NMAX, N, M)
      CALL COMPLETA(RAIZ, AR, NMAX, N, M)
      WRITE(11,*) "Completado con el promedio."
      DO I = 1, N
         WRITE(11,21) (AP(I,J), J = 1, M)
      ENDDO
      WRITE(11,*)
      WRITE(11,*) "Completado usando la raíz cuarta."
      DO I = 1, N
         WRITE(11,21) (AR(I,J), J = 1, M)
      ENDDO
      CLOSE(10)
      CLOSE(11)
      END
      

      REAL FUNCTION PROM(X, Y, Z, W)
      REAL X, Y, Z, W
      PROM = (X + Y + Z + W) / 4
      RETURN
      END
      

      REAL FUNCTION RAIZ(X, Y, Z, W)
      REAL X, Y, Z, W
      RAIZ = (X * Y * Z * W)**0.25
      RETURN
      END


      SUBROUTINE COMPLETA(F, T, NMAX, N, M)
      IMPLICIT NONE
      INTEGER  N, M, NMAX, I, J
      REAL T(NMAX,NMAX), F
      DO I = 1, N
         DO J = 1, M
            IF (T(I,J) .LT. 0.0) THEN
               T(I,J) = F(T(I,J-1), T(I,J+1), T(I-1,J), T(I+1,J))
            ENDIF
         ENDDO
      ENDDO
      RETURN
      END
      
