MÓDULO DE PROCEDIMIENTOS DE PROCEDIMIENTOS 

Anuncio
MÓDULO DE PROCEDIMIENTOS
Los módulos también pueden contener subrutinas y funciones → MÓDULO
DE PROCEDIMIENTOS
 PROCEDIMIENTOS → son compilados como parte del modulo.
 Se ponen disponible a través de USE
 Están precedidos por CONTAINS → Le indica al compilador que siguen
sentencias de procediendo.
Ej:
MODULE mi_sub
(declaración de los datos)
REAL, ……………
…………………….
CONTAINS
SUBROUTINE sub (a, b, c, x, error)
IMPLICIT NONE
REAL, DIMENSION (3), INTENT(IN) : : a
REAL, INTENT(IN) : : b, c
REAL, INTENT(OUT) : : x
LOGICAL, INTENT(OUT) : : error
…………
END SUBROUTINE sub
La subrutina incluida en el modulo puede ser usada con el CALL
Ej
PROGRAM prog_principal
USE mi_sub
IMPLICIT NONE
…………………
CALL sub(a, b, c, x, error)
…………………….
END PROGRAM prog_principal
FUNCIONES FORTRAN
es un procedimiento cuyo resultado es un número, un valor lógico, un texto, o un
arreglo.
Las funciones pueden ser → Funciones intrínsecas
Funciones definidas por el usuario o Subprograma
función
FUNCTION nombre (lista_argumentos)
…
Sección de declaración
….
Sección de ejecución
…
nombre = expresión
RETURN
END FUNCTION [nombre]
 En la FUNCTION es obligatorio poner el nombre
 El nombre en el END FUNCTION es opcional
Cuando la ejecución se encuentra con RETURN o END FUNCTION ésta vuelve al
programa principal → el RETURN es opcional
 El nombre de la función debe aparecer del lado izquierdo a menos que aparezca
en una sentencia de asignación.
 La función puede no necesitar argumentos, pero igualmente los paréntesis tienen
que figurar.
Ya que la función da como resultado un valor es necesario signarle un tipo a
la función.
 Si se usa IMPLICIT NONE se debe declarar el tipo de variable en la función
y en el llamado a la función
Si no se usa IMPLICIT NONE usa las reglas del FORTRAN a menos que se
declare el tipo.
Ej
INTEGER, FUNCTION mi_función(i, j)
o
FUNCTION mi_función(i, j)
INTEGER : : mi_función
REAL, FUNCTION cuad( x, a, b, c)
! Propósito: evaluar la ecuación cuadrática
!
cuad= a* x**2 + b * x +c
!
IMPLICIT NONE
! Diccionario y declaración de variables
REAL, INTENT(IN) : : x ! Valor para evaluar la ec.
REAL, INTENT(IN) : : a
! Coeficiente de x**2
REAL, INTENT(IN) : : b
! Coeficiente de x
REAL, INTENT(IN) : : c
! Coeficiente independiente
!
! Evaluar a* x**2 + b * x +c
cuad= a* x**2 + b * x +c
!
END FUNCTION cuad
PROGRAM ejemplo_fun
!
! Proposito: ver como se trabaja con FUNCIONES
!
IMPLICIT NONE
! Diccionario y declaración de variables
REAL : : cuad
REAL : : x, a, b, c
WRITE (*, *) “Entre los coeficientes de la ec. cuadratica”
READ( *, * ) a, b, c
WRITE (*, *) “Entre el valor para el cual quiere calcular la ec cuadratica”
READ (*, *) x
!
! Escribo el resultado
WRITE ( *, *) “ El resuldao es:”, cuad(x, a, b, c)
END PROGRAM ejemplo_fun
! Escribo el resultado
Pepe= cuad(x, a, b, c)
WRITE ( *, *) “ El resuldao es:”, pepe
!
Definir en la función y en el programa principal cual es el tipo de
variable que resulta.
Los valores de entrada pasan a la función a través de los argumentos de
entrada y la manera de pasarlos es apuntar a su lugar en la memoria como
las subrutinas.
!
Una FUNCTION bien definida debe producir un solo valor de salida de
acuerdo con los valores de entrada. Nunca se deben modificar(dentro
de la función) los argumentos de entrada. Para asegurarse de que
esto no ocurre accidentalmente usar el atributo INTENT(IN)
Ej Calcular la la funcion sinc( x ) = sin( x )/x
Es función es calculable fácilmente salvo en 0 o en su entorno, donde:
sinc(x) = lim sin(x)/x =1
x→0
1. Escribir una función FORTRAN que calcule sinc(x)
2. Definir las entradas y salidas
La entrada de la función es un número real . La función da un resultado real
3. El algoritmo
|x|>Epsi
si
sinc( x ) = sin( x )/x
no
sinc( x ) = 1
Epsi puede ser por ej 1.0e-30
4. Paso a lenguaje FORTRAN
FUNCTION sinc(x)
! Propósito: Calcular la sinc( x ) = sin( x )/x
IMPLICIT NONE
! Diccionario y declaración de variables
REAL, INTENT (IN): : x
REAL : : sinc
REAL, PARAMETER : : Epsi= 1.0e-30
IF (abs(x)>Epsi) THEN
Sinc= sin(x)/x
ELSE
Sinc=1
END IF
END FUNCTION sinc
5. Verificar la función
Construir un programa para la verificación
PRGRAM verificación
! Propósito: verificar la función sinc
IMPLICIT NONE
! Diccionario y declaración de variables
REAL : : x
! variable de entrada
REAL : : sinc
! Función
! Leo
WRITE(*,*) “Entre x”
Read(*;*) x
! Imprimo
WRITE(*,*) “sinc(x)=” sinc
END PRGRAM verificación
Ahora pruebo con los valores:
x
Sinc(x)
0
1.00000
10-29
1.00000
π/2
0.63662
π
0.00000
Descargar