Vous êtes sur la page 1sur 10

Captulo VII

Sub.-Programas Funciones Y Procedimientos

Contenido:
1 Funciones De Biblioteca ( Del Lenguaje)
2 Funciones Definidas por el Usuario
3 Comando Function y sus argumentos
4 Manejo y Uso de Sub Programas
5 Comando Subroutine
6 Manejo y Uso de Sus Parmetros
7 Comando Use
8 Programacin Estructurada
9 Comando Module
10 Comando Contains
11 Evidencias Para El Aprendizaje

1
Funcione

Existen en Fortran 90-95 dos tipos de funciones:


Funciones definidas por el usuario
Funciones De Biblioteca de librera Del

Funciones definidas por el usuario:


Tambin llamadas funciones usuario, son subprocesos semejantes a
los subprogramas, solo que estos funcionan de la misma forma que las
funciones internas del lenguaje, es decir solo se nombran con sus
parmetros y automticamente se procesan dejando el resultado en la
misma instruccin donde se le hizo mencin.
Su simbologa es la misma de la de llamada externa (funciones y
subprogramas)

Argumento ficticio en el valor o variable que se enva desde


un
programa principal que hace el llamado.
Argumento real des el valor o variable con el que realmente se defini
la funcin, es decir con la variable que realmente trabaja y se dise.
El nombre de la funcin sigue las mismas reglas de todas las
variables del Fortran 90-95.
Tanto el programa principal como la funcin deben tener declarados los
argumentos con el mismo modo (integer, real, logic, etc.).
Se recomienda que tanto la funcin como el programa principal lleven
la instruccin implicit none.
Una funcin usuario puede contener llamadas a funciones intrnsecas
y/o de librera, tanto como sea necesario.
Formato: Funcin (nombre) (lista de argumentos y parmetros)
Seccin de declaracin (se debe declarar el modo del
nombre) Seccin de ejecucin
Return
End function (nombre)

El nombre deber ser declarado su modo en el inicio de la funcin.


El nombre seguir las mismas reglas anteriores de las funciones.
El nombre formara la parte de la solucin de una expresin.
La funcin se recomienda siempre incluir la instruccin implicit none.
La function siempre termina con la instruccin return, end function.
End function se recomienda agregar el nombre de la funcin a

2
Para llamar a una funcin bastar con solo llamarla, dentro de alguna
expresin.
Las funciones pueden realizar cualquier tipo de proceso permitido por el
Fortran

Vgr.

PROGRAM ABSOLUTO
IMPLICIT NONE
INTEGER:: X
READ (*,*) X
ABSO = ABSOL (X)
WRITE (*,*) X
RETURN
END PROGRAM
ABSOLUTO

FUNCTION ABSOL(A)
IMPLICIT NONE
INTEGER, INTENT(InOut) :: A
INTEGER :: ABSOL
ABSOL =SQTR (ABSOL**2)
RETURN
END FUNCTION ABSOL

Aqu podemos

Uso de la simbologa grfica, tanto de llamada como de inicio de funcin.


El uso de distintos nombres en los argumentos:
Tambin notaremos que en el programa principal llamado absoluto,
el parmetro (x) en que se llama a la funcin (absol), es distinto
al
parmetro (a) con la que realmente trabaja la funcin. El parmetro
de llamada (x) llamado argumento ficticio, el parmetro con el cual
trabaja la funcin (a) llamado argumento real. Ambos pueden
llamarse igual o en forma distinta lo que siempre deben llevar, es el
mismo modo con el cual estn declarados.
El llamado a una funcin de librera (raz cuadrada), dentro de una
funcin definida por el usuario.
Intent (InOut) Significa que recibe y enva su contenido a donde se llam.

3
Funciones De Librera ( Del Compilador y/ de

Como ya habamos visto en temas anteriores existe una enorme cantidad


de
funciones ya creadas a disposicin de los programadores del lenguaje
Fortran
90-95 a este tipo se les denomina funciones De Librera, Del Compilador y/
de Biblioteca internas (Intrnsecas), y forman aparte de las llamadas
utileras del lenguaje Fortran 90-95 (ver apndice IV, libreras del Fortran 90-
Sqrt (x) Log (x) Mod (a,b) Real (x)
Abs (x) Log 10 (x) Nint (x)0 Max (a,b)
Sin (x) Achar (i) Atan (x) Min (a,b)
Cos (x) Iachar (c) Int (x) Random (x)

Se puede apreciar que algunas funciones hacen uso de ms de un


parmetro.
Lo que lo asemeja a los subprogramas, sin embargo las funciones regresan
el resultado en la misma instruccin a diferencia del subprograma.
Subprograma

Formato1: Formato de
Etiqueta: Call subroutine (nombre)(lista de argumentos
ficticios)

Etiqueta:Es opcional, puede ser cualquier nombre, siempre y cuando no


sea ya usado en el mismo programa.
Nombre: El nombre del subprograma (subrutina) es con el cual vamos a
llamar al subprograma y sigue las mismas reglas de variables de
Fortran 90-95
Argumentos ficticios: Es la lista de variables (valores) que van a enviar
(salida) al subprograma; aqu tambin se incluyen las variables
en las cuales se va a recibir los resultados (entradas). En
algunos casos las variables de envo se transforman en variables
de resultados (entrada / salida).

Formato2: Formato del subprograma.

SUBROUTINE (nombre)(lista de argumentos


reales)
:::: seccin de declaracin
:::: seccin de ejecucin (proceso)
end subroutine nombre
El nombre.- De la rutina (subprograma) es el mismo con el cual se llam,
siguiendo las mismas reglas de nombrar variables que usa
el

4
Lista de argumentos reales.- Aqu se encuentra la lista de argumentos que
el subprograma usa para su proceso. Pudiesen llegar a
coincidir en que se llamasen de igual forma que el programa
principal,
ms eso no tiene importancia.
Seccin de declaracin.- Aqu se declara el modo de cada variable, as
como si es de entrada de datos, salida o entrada salida.
Seccin de ejecucin (proceso).- En esta etapa debe incluirse la
expresin con la variable que contenga el resultado del
proceso pudiendo ser inclusive arreglos completos.
Return.-Nos indica que el resultado se regresa al programa que realiz la
llamada.
End Subroutine nombre.- Aqu damos por cerrado el proceso y el nombre

Reglas:
El orden en que se enlistan los argumentos ficticios, es de tipo
Posicional, es decir en esa posicin el auto programa interpreta que
recibe y enva. Es por ello que pueden llamarse distinto los
argumentos tanto en el programa principal como en los subprogramas.
En la seccin de declaracin se indica y refuerza que argumentos son
de entrada intent (in), de salida intent (out)y de entrada salida
intent
(inout), as como su modo de variable.
Es recomendable hacer uso del estatuto implicit none tanto en
el programa principal como en el subprograma.
Un subprograma puede contener todos los llamados que sean

Ejemplo:
PROGRAM MATRICES
IMPLICIT NONE
INTEGER:: N= 10, I, J
REAL, DIMENSIN (N,N):: A,B
READ (*,*) ((A(I, J), I=1, N), J=1, N)
READ (*,*) ((B(I, J), I=1, N), J=1, N)
CALL SMATRIZ (A, B, S, N) Aqu podemos apreciar el
CALL RMATRIZ (A, B, R, N) llamado a cuatro diferentes
CALL P MATRIZ (A, B, P, N) sub-programas ( sub-rutinas).
CALL SALIDAM (A, B, S, R, P, N)
END PROGRAM MATRICES

SUBROUTINE SMATRIZ (X, Y, SUMA, M)


IMPLICIT NONE
INTEGER, INTENT(IN)::M
REAL, INTENT(IN); DIMENSION (M, M)::
SUMA
SUMA = X + Y
RETURN

1
SUBROUTINE RMATRIZ (X, Y, RESTA, M)
IMPLICIT NONE
INTEGER, INTENT(IN)::M
REAL, INTENT(IN); DIMENSION (M, M):: RESTA
RESTA = X - Y
RETURN
END SUBROUTINE RMATRIZ

SUBROUTINE PMATRIZ (X, Y, PRODUCTO, M)


IMPLICIT NONE
INTEGER, INTENT(IN)::M
REAL, INTENT(IN); DIMENSION (M, M):: PRODUCTO
PRODUCTO = X * Y
RETURN
END SUBROUTINE PMATRIZ
Se deja de tarea elaborar el subprograma que despliegue resultados en
forma matricial.

Ayuda:

SUBROUTINE SALIDAM (X, Y, SUMA, RESTA, PRODUCTO, M)


IMPLICIT NONE
INTEGER:: I, J
INTEGER, INTENT (IN) ::M
REAL, INTENT (IN), DIMENSION (M, M) :: SUMA, RESTA, PRODUCTO
------
------
------
RETURN
ENDSUBROUTINE SALIDAM

DIAGRAMA DE FLUJO DEL PROGRAMA PRINCIPAL.

En este diagrama podemos apreciar:


Las lecturas de las matrices son iteradas (ver Cp.
El paso de parmetros se
IV) en la parte superior del smbolo
indica
llamada (programa externo)

2
La recepcin de resultados se indica en la parte inferior del smbolo
de
llamada (programa externo)
En la llamada el subprograma SALIDAM, carece de elementos en la
parte
inferior del inferior del smbolo. Esto es por que solo enva y no
regresa resultados, solo el control para terminar el proceso.

Programacin estructurada

Existen dos tipos de elaboracin de programas a


saber:
Lineal (TOP-DOWN, de arriba hacia abajo)
Modular (estructurada)
Programacin de tipo lineal.- Es aquella que el programa inicia
instrucciones, declara sus ejecuta sus instrucciones (clculos)
posteriormente Este tipo de programacin es muy socorrida
programadores que tienen que solucionar un problema muy especfico
y
normalmente en forma espordica.
Programacin de tipo modular.- Es aquella que el programador procura
crear
estructura de instrucciones que dan solucin a todo un tipo de problemas y
como
dice su definicin los modula (forma mdulos), procurando tenerlos
bien
Formato1: Descripcin de la estructura
MODULE nombre
Implicit none
save
:::seccin de declaracin
end MODULE nombre

Module.- Es el estatuto que describe que el programa esta estructurado.


Nombre.- Es el nombre asignado al modulo (estructura) y se rige por las
reglas

SAVE.- Es el comando que nos indica que va a grabar en forma voltil


(se
pierde al termino del proceso), en la memoria alta de la computadora, los datos
a
usarse en forma comn por las diferentes estructuras del proceso.
Seccin de declaracin.- Es donde declaramos el modo y que variables
y/o
USE nombre del modulo

3
USE.- Es el comando que nos permite el acceso a los comando
almacenados (voltilmente), en la memoria alta de la
computadora.
Nombre del mdulo.- Este es el nombre que el programador haya asignado
a la estructura que almacen los datos.

Ejemplo:
MODULE ARREGLO
IMPLICIT NONE
SAVE
INTEGER, PAREMETER:: N=10
REAL, DIMENSION (N,N):: VECTOR
END MODULE ARREGLO

PROGRAM APLICACIN
USE ARREGLO
IMPLICIT NONE
VECTOR = (/1,2,3,4,5,6,7,8,9,10/)
CALL SALIDA
END PROGRAM APLICACIN

SUBROUTINE SALIDA
USE SALIDA
IMPLICIT NONE
WRITE (*,*) VECTOR
RETURN
END SUBROUTINE

En el ejemplo anterior podemos


El uso del estatuto MODULE y su representacin grfica, dentro del
cual
tanto la entrada como la salida del smbolo conserva las mismas
variables y/o datos.
La aplicacin Esto esSAVE
del comando porque que
estarn disponibles
es quien en toda
almacena etapaen
los datos del
la
memoria.
La aplicacin del comando USE quien permite que el mdulo que
lo
llame, tenga acceso a los datos almacenados o por almacenar.
El programa principal, solamente asigna los valores y los pasa al
mdulo
de la memoria para que sean almacenados.
El programa principal hace una llamada a un subprograma y no pasa,
ni recibe parmetros, esto por que con el comando USE, los datos
estn disponibles en todo momento.
El subprograma salida no necesita los parmetros pues tiene
acceso a
Formato: CONTAINS

4
CONTAINS.- Es un estatuto que nos permite adicionar otra serie de
instrucciones no contenidas en una estructura. De tal manera que
podemos
incluir todo tipo de subprogramas previamente creados para poder

Ejemplo:
MODULE MATRIZ
IMPLICIT NONE
! DECLARAR (LOS DATOS QUE SE DEBEN COMPARTIR EN EL PROCESO)
CONTAINS
SUBROUTINE MATRIZS (K,Y, SUMA,M)
IMPLICIT NONE
INTEGER, INTENT (IN):: N
REAL, INTENT (IN) DIMENSION (M,M)::X,Y
REAL, INTENT (IOUT),DIMENSION (M,M)::SUMA
SUMA = X + Y
RETURN
END SUBROUTINE MATRIZS
END MODULE MATRIZ

PROGRAM PRINCIPAL
USE MATRIZ
IMPLICIT NONE
---
CALL MATRIZ (A,B,N)
---
END PROGRAM PRINCIPAL Tarea: Diagrame el ejemplo anterior.
Evidencias para el aprendizaje

7.1.- Qu es una funcin en Fortran 90-95?


7.2.- Cuntos tipos de funciones existen?
7.3.- Cmo se representa grficamente una funcin?
7.4.- Qu diferencia existe entre una funcin usuario y un subprograma?
7.5.- Qu es un subprograma?
7.6.- Cmo se representa grficamente un subprograma?
7.7.- Describa lo que sucede si un parmetro tiene nombre distinto en el
programa principal y en la funcin y/o subprograma?
7.8.- Qu sucede si el modo de un programa es distinto en programa
principal y en la funcin y/o subprograma?
7.9.- Se puede llamar a un subprograma desde una funcin y
viceversa?
7.10.-Puede tener el mismo nombre una funcin y/o un subprograma vs.
Programa Principal ?
7.11.- Qu son los argumentos ficticios (parmetros)?
7.12.- Qu son los argumentos reales (parmetros)?
7.13.- Qu son las Funciones de biblioteca?
7.14.- Para que sirve el comando RETURN?
7.15.- Cmo refuerza un subprograma el paso de parmetros?
7.16.- Para que sirve el comando intent (in)?
7.17.- Para que sirve el comando intent (out)?
7.18.- Para que sirve el comando intent (inout)?

5
7.19.- Puede una llamada a subprograma no tener ningn dato de regreso?
7.20.- Qu es el tipo de programacin lineal (TOP-DONW)?
7.21.- Qu es el tipo de programacin estructurada ( Modular )?
7.22.- Qu tipo de programacin es ms conveniente para un profesional
de
la ciencia (ingeniero)? Por que?
7.23.- Para que sirve el comando MODULE?
7.24.- Para que sirve el comando USE?
7.25.- Para que sirve el comando SAVE?
7.26.- Para que sirve el comando CONTAINS?
7.27.- Puede una llamada a subprograma no enviar ni recibir parmetros y
*** Haciendo uso de los sugeridos para una programacin
solucione los problemas a continuacin enunciados En forma modular y
con
subprogramas:
7.29.- Elabore un programa que calcule la solucin de una matriz por el
mtodo de eliminacin Gaussiana (puede investigar en el libro Fortran
90-95 Stephen Chapman 1998, Pg. 323)
7.30.- Para el arreglo matricial de 4x4, sume los elementos de la diagonal
principal. A11 A12 A13 A14
A21 A22 A23 A24
A31 A32 A33 A34
A41 A42 A43 A44

Vous aimerez peut-être aussi