Está en la página 1de 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

Resultados del aprendizaje

El alumno tendr la capacidad de modular sus programas.


El alumno comprender las diferencias de un programa de tipo lineal a
uno de tipo modular.
El alumno sabr distinguir entre programa principal, subprograma,
funciones internas y funciones usuario.
El alumno conocer el uso y beneficios de la Programacin Estructurada.
El alumno podr aprovechar los mdulos y funciones previamente
creados, para generar nuevas soluciones a travs de un programa
principal.

Pregunta Gua:
Cul es la ventaja de usar subprogramas y/o funciones usuario?

106
Funciones

Existen en Fortran 90-95 dos tipos de funciones:


Funciones definidas por el usuario
Funciones De Biblioteca de librera Del Sistema.

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)
a saber:

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 cerrar.

107
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
90-95 y se usan para algn proceso o clculo muy especifico.

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 apreciar:

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.

108
Funciones De Librera ( Del Compilador y/ de Biblioteca)

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-95) Vgr, entre
otras:

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.

Subprogramas

Formato1: Formato de llamada

[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
Fortran 90-95.

109
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
es opcional.

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 necesarios
tanto a subprogramas como a funciones.

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
END SUBROUTINE SMATRIZ

110
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. IV)
El paso de parmetros se indica en la parte superior del smbolo de
llamada (programa externo)

111
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.
Tarea: Diagrame cada proceso de los subprogramas anteriores.

Programacin estructurada (modular)

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 sus


instrucciones, declara sus variables, ejecuta sus instrucciones (clculos) y
posteriormente termina. Este tipo de programacin es muy socorrida por
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
documentados, dado que los puede realiza a travs de varios programas, sin
importar como se llamen los parmetros; siempre y cuando le sirvan para su
propsito.

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
de nombre de variables y/o programas de Fortran 90-95.

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
valores vamos a usar en nuestro proceso.
Formato2: Aplicacin del comando USE

USE nombre del modulo

112
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 SALIDA

En el ejemplo anterior podemos apreciar:


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. Esto es porque estarn disponibles en toda etapa del proceso.
La aplicacin del comando SAVE que es quien almacena los datos en 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
todos los datos a travs de el comando USE.
Tarea: Elabore el diagrama de flujo del programa principal y el del subprograma.
Estatuto de contenido

Formato: CONTAINS

113
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 compartirlos
en un determinado proceso.

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)?

114
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
sin embargo compartir sus resultados?
*** Haciendo uso de los pasos sugeridos para una programacin exitosa
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

115

También podría gustarte