Está en la página 1de 10

Capítulo 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 Parámetros
7 Comando Use
8 Programación 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 Programación Estructurada.
• El alumno podrá aprovechar los módulos y funciones previamente
creados, para generar nuevas soluciones a través de un programa
principal.

Pregunta Guía:
¿Cuál 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 librería Del Sistema.

Funciones definidas por el usuario:


También 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 parámetros y
automáticamente se procesan dejando el resultado en la misma instrucción
donde se le hizo mención.
Su simbología es la misma de la de llamada externa (funciones y subprogramas)
a saber:

• Argumento ficticio en el valor o variable que se envía desde un


programa principal que hace el llamado.
• Argumento real des el valor o variable con el que realmente se definió la
función, es decir con la variable que realmente trabaja y se diseñó.
• El nombre de la función sigue las mismas reglas de todas las variables
del Fortran 90-95.
• Tanto el programa principal como la función deben tener declarados los
argumentos con el mismo modo (integer, real, logic, etc.).
• Se recomienda que tanto la función como el programa principal lleven la
instrucción implicit none.
• Una función usuario puede contener llamadas a funciones intrínsecas y/o
de librería, tanto como sea necesario.

Formato: Función (nombre) (lista de argumentos y parámetros)


Sección de declaración (se debe declarar el modo del nombre)
Sección de ejecución
Return
End function (nombre)

El nombre deberá ser declarado su modo en el inicio de la función.


El nombre seguirá las mismas reglas anteriores de las funciones.
El nombre formara la parte de la solución de una expresión.
La función se recomienda siempre incluir la instrucción implicit none.
La function siempre termina con la instrucción return, end function.
End function se recomienda agregar el nombre de la función a cerrar.

107
Para llamar a una función bastará con solo llamarla, dentro de alguna expresión.
Las funciones pueden realizar cualquier tipo de proceso permitido por el Fortran
90-95 y se usan para algún proceso o cálculo 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 simbología gráfica, tanto de llamada como de inicio de función.


• El uso de distintos nombres en los argumentos:
También notaremos que en el programa principal llamado absoluto, el
parámetro (x) en que se llama a la función (absol), es distinto al
parámetro (a) con la que realmente trabaja la función. El parámetro de
llamada (x) llamado argumento ficticio, el parámetro con el cual trabaja la
función (a) llamado argumento real. Ambos pueden llamarse igual o en
forma distinta lo que siempre deben llevar, es el mismo modo con el cual
están declarados.
• El llamado a una función de librería (raíz cuadrada), dentro de una
función definida por el usuario.
• Intent (InOut) Significa que recibe y envía su contenido a donde se llamó.

108
Funciones De Librería ( Del Compilador y/ó de Biblioteca)

Como ya habíamos visto en temas anteriores existe una enorme cantidad de


funciones ya creadas a disposición de los programadores del lenguaje Fortran
90-95 a este tipo se les denomina funciones De Librería, Del Compilador y/ó de
Biblioteca internas (Intrínsecas), y forman aparte de las llamadas utilerías del
lenguaje Fortran 90-95 (ver apéndice IV, librerías 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 más de un parámetro.


Lo que lo asemeja a los subprogramas, sin embargo las funciones regresan el
resultado en la misma instrucción 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í también se incluyen las variables en
las cuales se va a recibir los resultados (entradas). En algunos
casos las variables de envío se transforman en variables de
resultados (entrada / salida).

Formato2: Formato del subprograma.

SUBROUTINE (nombre)(lista de argumentos reales)


:::: sección de declaración
:::: sección de ejecución (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,
más eso no tiene importancia.
Sección de declaración.- Aquí se declara el modo de cada variable, así
como si es de entrada de datos, salida o entrada salida.
Sección de ejecución (proceso).- En esta etapa debe incluirse la expresión
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 posición el auto programa interpreta que recibe y envía.
Es por ello que pueden llamarse distinto los argumentos tanto en el
programa principal como en los subprogramas.
• En la sección de declaración 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, DIMENSIÓN (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 Cáp. IV)
• El paso de parámetros se indica en la parte superior del símbolo de
llamada (programa externo)

111
• La recepción de resultados se indica en la parte inferior del símbolo de
llamada (programa externo)
• En la llamada el subprograma SALIDAM, carece de elementos en la parte
inferior del inferior del símbolo. Esto es por que solo envía y no regresa
resultados, solo el control para terminar el proceso.
Tarea: Diagrame cada proceso de los subprogramas anteriores.

Programación estructurada (modular)

Existen dos tipos de elaboración de programas a saber:


• Lineal (TOP-DOWN, de arriba hacia abajo)
• Modular (estructurada)

Programación de tipo lineal.- Es aquella que el programa inicia sus


instrucciones, declara sus variables, ejecuta sus instrucciones (cálculos) y
posteriormente termina. Este tipo de programación es muy socorrida por
programadores que tienen que solucionar un problema muy específico y
normalmente en forma esporádica.
Programación de tipo modular.- Es aquella que el programador procura crear
estructura de instrucciones que dan solución a todo un tipo de problemas y como
dice su definición “los modula” (forma módulos), procurando tenerlos bien
documentados, dado que los puede realiza a través de varios programas, sin
importar como se llamen los parámetros; siempre y cuando le sirvan para su
propósito.

Formato1: Descripción de la estructura


MODULE nombre
[Implicit none]
save
:::sección de declaración
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 volátil (se
pierde al termino del proceso), en la memoria alta de la computadora, los datos a
usarse en forma común por las diferentes estructuras del proceso.
Sección de declaración.- Es donde declaramos el modo y que variables y/o
valores vamos a usar en nuestro proceso.
Formato2: Aplicación del comando USE

USE nombre del modulo

112
USE.- Es el comando que nos permite el acceso a los comando
almacenados (volátilmente), en la memoria alta de la computadora.

Nombre del módulo.- 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 APLICACIÓN
USE ARREGLO
IMPLICIT NONE
VECTOR = (/1,2,3,4,5,6,7,8,9,10/)
CALL SALIDA
END PROGRAM APLICACIÓN

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 representación gráfica, dentro del cual
tanto la entrada como la salida del símbolo conserva las mismas variables
y/o datos. Esto es porque estarán disponibles en toda etapa del proceso.
• La aplicación del comando “SAVE” que es quien almacena los datos en la
memoria.
• La aplicación del comando “USE” quien permite que el módulo que lo
llame, tenga acceso a los datos almacenados o por almacenar.
• El programa principal, solamente asigna los valores y los pasa al módulo
de la memoria para que sean almacenados.
• El programa principal hace una llamada a un subprograma y no pasa, ni
recibe parámetros, esto por que con el comando “USE”, los datos están
disponibles en todo momento.
• El subprograma salida no necesita los parámetros pues tiene acceso a
todos los datos a través 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 función en Fortran 90-95?


7.2.- ¿Cuántos tipos de funciones existen?
7.3.- ¿Cómo se representa gráficamente una función?
7.4.- ¿Qué diferencia existe entre una función usuario y un subprograma?
7.5.- ¿Qué es un subprograma?
7.6.- ¿Cómo se representa gráficamente un subprograma?
7.7.- ¿Describa lo que sucede si un parámetro tiene nombre distinto en el
programa principal y en la función y/o subprograma?
7.8.- ¿Qué sucede si el modo de un programa es distinto en programa
principal y en la función y/o subprograma?
7.9.- ¿Se puede llamar a un subprograma desde una función y viceversa?
7.10.-¿Puede tener el mismo nombre una función y/o un subprograma vs.
Programa Principal ?
7.11.- ¿Qué son los argumentos ficticios (parámetros)?
7.12.- ¿Qué son los argumentos reales (parámetros)?
7.13.- ¿Qué son las Funciones de biblioteca?
7.14.- ¿Para que sirve el comando RETURN?
7.15.- ¿Cómo refuerza un subprograma el paso de parámetros?
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 ningún dato de regreso?
7.20.- ¿Qué es el tipo de programación lineal (TOP-DONW)?
7.21.- ¿Qué es el tipo de programación estructurada ( Modular )?
7.22.- ¿Qué tipo de programación es más 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 parámetros y
sin embargo compartir sus resultados?
*** Haciendo uso de los pasos sugeridos para una programación exitosa
solucione los problemas a continuación enunciados En forma modular y con
subprogramas:
7.29.- Elabore un programa que calcule la solución de una matriz por el
método de eliminación Gaussiana (puede investigar en el libro Fortran
90-95 Stephen Chapman 1998, Pág. 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