C***********************************************
C     Ejercicio 1
C***********************************************
      PROGRAM EJERCICIO1
      IMPLICIT NONE
      INTEGER NMAX, N, I, J
      PARAMETER (NMAX=20)
      CHARACTER*24 ARCHIVO
      CHARACTER*14 CIUD(NMAX), PAIS(NMAX), RIESGO(NMAX,3)
      REAL TEMP(NMAX), VELOC(NMAX)
      REAL ST, F, C, MAKM, V
      EXTERNAL ST
C     funciones de sentencia para cambio de unidades.
      F(C) = 9/5.*C+32.0
      MAKM(V) = V/1.60934 

C     Lectura del archivo y cambio de unidades
      WRITE(*,*) 'INGRESE EL NOMBRE DEL ARCHIVO DE ENTRADA'
      READ(*,*) ARCHIVO
      WRITE(*,*) 'Ingrese la cantidad de líneas del archivo incluyendo 
     &el encabezado'
      READ(*,*) N
      
      OPEN(10, FILE=ARCHIVO)
      READ(10,*)
      DO I=1, N-1
         READ(10,100) CIUD(I), PAIS(I), TEMP(I), VELOC(I)
 100     FORMAT(A14, 4X, A14, 2X, F5.1, 12X, F5.1)
         TEMP(I) = F(TEMP(I))
         VELOC(I) = MAKM(VELOC(I))
      END DO
      CLOSE(10)
      
C     Llamado a la subrutina y escritura de los resultados.
      CALL EVALUAR(ST, NMAX, N, CIUD, PAIS, TEMP, VELOC, RIESGO)
      
      OPEN(20, FILE = 'RIESGO_CONGELACION.SAL')
      WRITE(20,200) 'CIUDAD', 'PAIS', 'RIESGO'
 200  FORMAT(A6,10X,A4,12X,A6)
      DO I = 1, N-1
         WRITE(20,300) (RIESGO(I,J), J=1,3)
 300     FORMAT(A14,2X,A14,2X,A14)
      END DO
      CLOSE(20)
      END

C     --------------------------------------------------------------------
      SUBROUTINE EVALUAR(FUNC, NMAX, N, CIUD, PAIS, TEMP, VELOC, RIESGO)
      IMPLICIT NONE 
      INTEGER NMAX, N, I
      CHARACTER*14 CIUD(NMAX), PAIS(NMAX), RIESGO(NMAX,3)
      REAL TEMP(NMAX), VELOC(NMAX), TC
      REAL FUNC, C, F

C     Función de sentencia para pasar de Farenheit a Celcius.
      C(F) = 5/9.*(F-32.0)

C     Armado de la matriz.
      DO I = 1, N-1
         RIESGO(I,1) = CIUD(I)
         RIESGO(I,2) = PAIS(I)
         TC = C(FUNC(TEMP(I), VELOC(I)))
         
         IF ((TC.LT.-10.0).AND.(TC.GE.-28.0)) THEN
            RIESGO(I,3) = 'BAJO'
         ELSEIF ((TC.LT.-28.0).AND.(TC.GE.-39.0)) THEN
            RIESGO(I,3) = 'MODERADO'
         ELSEIF ((TC.LT.-39.0).AND.(TC.GE.-54.0)) THEN
            RIESGO(I,3) = 'ALTO'
         ELSEIF (TC.LT.-54.0) THEN
            RIESGO(I,3) = 'MUY ALTO'
         ELSE
            RIESGO(I,3) = 'SIN RIESGO'
         ENDIF
         
      END DO
      RETURN
      END

C     --------------------------------------------------------------------
C     Función para la sensación térmica.
      REAL FUNCTION ST(T,V)
      REAL T, V
      ST = 35.74+0.6215*T-35.75*V**(0.16)+0.4275*T*V**(0.16)
      RETURN
      END
 
         
