PASANDO PROCEDIMIENTOS A OTROS PROCEDIMIENTOS Tanto funciones como

  • Slides: 4
Download presentation
PASANDO PROCEDIMIENTOS A OTROS PROCEDIMIENTOS Tanto funciones como subrutinas pueden ser pasados como argumentos

PASANDO PROCEDIMIENTOS A OTROS PROCEDIMIENTOS Tanto funciones como subrutinas pueden ser pasados como argumentos Ej : PROGRAM : : test REAL, EXTERNAL : : fun 1, fun 2 REAL : : x, y, salida ………. . CALL evaluar( fun 1, x, y, salida) END PROGRAM : : test ******************** SUROUTINE evaluar( fun, a, b, resultado) REAL , EXTERNAL : : fun REAL, INTENT(IN) : : a, b REAL , INTENT (OUT) resultado= b * fun(a) END SUROUTINE evaluar fun 1 y fun 2 → funciones definidas por el usuario EXTERNAL → Le comunica al compilador que en vez de una variable, el argumento es una función compilada separadamente.

Puede ser una sentencia de declaración o una sentencia REAL, EXTERNAL : : fun

Puede ser una sentencia de declaración o una sentencia REAL, EXTERNAL : : fun 1, fun 2 o EXTERNAL fun 1, fun 2 Si se usa esta última opción tiene que usarse antes del llamado por la subrutina Ej: REAL, FUNCTION valor_medio (fun, val_1, val_ fin, n) ! Propósito: calcular el promedio de fun ! ! Diccionario y declaración de variables REAL, EXTERNAL : : fun ! Función a ser evaluada REAL, INTENT(IN) : : val_1 ! Primer valor en el rango REAL, INTENT(IN) : : val_fin !último valor en el rango INTEGER, INTENT(IN) : : n ! REAL : : DELTA INTEGER : : i REAL : : sum ! delta= (val_fin - val_1) / REAL(n - 1)

! Calculo la sum=0 DO i=1, n sum = sum + func (REAL( i

! Calculo la sum=0 DO i=1, n sum = sum + func (REAL( i – 1 )* delta) END DO ! Saco el promedio valor_medio = sum / REAL(n) END FUNCTION valor_medio PROGRAM test_ valor medio ! Propósito: evaluar la función valor_medio IMPLICIT NONE ! Diccionario y declaración de variables REAL, EXTERNAL : : mi_función ! Función a ser evaluada REAL, INTENT(IN) : : valor_medio ! Valor medio de la función REAL : : medio ! promedio de la función medio = valor_medio (mi_funcion, 0. , 101) WRITE( *, * ) “mi función”, medio END PROGRAM test_ valor medio

REAL FUNCTION mi_funcion(x) IMPLICIT NONE REAL, INTENT(IN) mi_funcion =3* x END FUNCTION mi_funcion

REAL FUNCTION mi_funcion(x) IMPLICIT NONE REAL, INTENT(IN) mi_funcion =3* x END FUNCTION mi_funcion