UNIDADES DE PROGRAMA.
-Ante la necesidad de una organización jer rquica Fortran permite
dividir el programa en módulos llamados unidades de programa. Hay dos
clases de unidades de programa:
-Programa principal.
-Subprograma.
-Cada programa tiene un sólo programa principal que puede contener cero
o m s Subprogramas que pueden ser:
-Funciones.
-Subrutinas.
-Las Funciones pueden ser de varios tipos:
-Externas, es un módulo independiente.
-Intr¡nsecas, es un módulo independiente.
-Unil¡neas, son locales al módulo o unidad de programa donde est n
definidas.
-Las Subrutinas son Subprogramas que pueden ser usados para devolver un
conjunto de cero a n datos y suelen ser de propósito general.
-Los módulos pueden estar uno a continuación del otro y no estar n
separados a nivel lógico aunque s¡ lo estar n a nivel f¡sico.
-La Función se usa cuando se necesita devolver un sólo valor, mientras
que las Subrutinas se utilizan para devolver m s valores o en su
defecto ninguno.
FUNCIONES SENTENCIA (UNILINEA)
-Es un procedimiento especificado en una sentencia simple, con forma
similar a una sentencia de asignación aritm‚tica, lógica o car cter.
Este tipo de Funciones representan una fórmula.
-Se escribe en la misma unidad de programa que va a ser usada, son
locales a la unidad de programa en la que est definida.
-Es una sentencia de tipo no ejecutable y ha de ser escrita antes de ser
invocada, su sintaxis suele ser:
- Tipo Identificador (Lista de par metros actuales)=Expresión.
-Si no se colocan par metros, habr que poner par‚ntesis igualmente.
-El tipo de dato del identificador de la Función sentencia y los
argumentos ficticios est n determinados por el tipo impl¡cito del
identificador.
-La invocación se realiza escribiendo su identificador y entre
par‚ntesis los argumentos verdaderos o actuales que sustituyen a los
argumentos que son ficticios.
-Los argumentos actuales pueden ser expresiones y han de corresponderse
en número, orden y tipo con los argumentos ficticios. La llamada a la
Función debe formar parte de una sentencia ejecutable.
-Se puede invocar el paso de varios par metros separados por una coma
o no ser invocados.
FUNCIONES INTRINSECAS
-Son las Funciones propias del lenguaje Fortran, que ya fueron descritas
en el tema 2.
-Estas Funciones se usan con el identificador de la Función seguido de
los valores de los par metros.
-Habr que tener en cuenta que los argumentos sean del mismo tipo y que
correspondan dentro del rango.
FUNCIONES EXTERNAS
-Este tipo de Funciones devuelve un valor a trav‚s del identificador de
la Función aunque puede devolver otros valores. Su sintaxis es:
- Tipo FUNCTION Identificador (Lista de par metros formales)
acción1
acción2
.......
acciónn
Identificador=Expresión
.......
RETURN
END
-El tipo es opcional y especifica el tipo de datos del valor que se
devuelve. Si no se especifica se siguen las normas del tipo impl¡cito
de los identificadores.
-Esta sentencia debe ser la sentencia inicial de una Subrutina FUNCTION.
El tipo de la Función est determinado por la especificación tipo en la
cabecera.
-Puede tener cualquier sentencia excepto las definiciones de otras
Subrutinas. El valor asignado debe ser del mismo tipo que el de la
Función.
-El f¡n lógico de una Función es RETURN que puede aparecer m s veces.
La última sentencia de código fuente de definición de una Función es
END que ser el f¡n f¡sico.
-Desde una Función se puede invocar otra Subrutina pero no a la misma
Función y no se permite la recursividad.
LLAMADA A FUNCIONES EXTERNAS
-La llamada a una Función ha de formar parte de una sentencia siendo la
sintaxis de la llamada la siguiente:
-Identificador (Lista de par metros actuales).
-La referencia a la Función se puede realizar desde cualquier otra
unidad de programa. La lista de par metros deber estar separada por
comas.
-Los par metros se pueden pasar por valor colocando la palabra reservada
VALUE delante de las variables. No se debe modificar los valores de las
variables de la lista. Es mejor duplicarlos o protegerlos.
-Los par metros actuales deben coincidir con los argumentos ficticios
con las siguientes especificaciones:
-Constantes, variables o expresiones, excepto la concatenación
de operandos.
-Nombre de array.
-Funciones intr¡nsecas o externas.
-Subrutinas.
PASO DE ARGUMENTOS A LAS SUBRUTINAS
-Las llamadas por valor realizan unas copias del argumento verdadero
con lo que ‚ste no cambia durante la ejecución de la Subrutina.
-Las llamadas por referencia no realizan esa copia y el argumento
verdadero puede cambiar durante la ejecución de la Subrutina.
-Para saber cuando se deben pasar valores por valor o referencia nos
fijaremos en la siguiente tabla:
-Por referencia si es una variable, array, elemento de array o
caracteres.
-Por valor si es una constante o una expresión.
SUBRUTINAS.
-Las Subrutinas empiezan con la sentencia SUBROUTINE y puede tener
cualquier sentencia excepto las usadas para definir otros módulos o
unidades de programa.
-Puede devolver cero, uno o m s valores siendo la transmisión por
par metros de cabecera. La ejecución termina con un f¡n lógico o RETURN
siendo la última sentencia el f¡n f¡sico o END.
-Si sólo hay un RETURN se puede omitir porque END funcionar como si
fuera RETURN. La sintaxis de las Subrutinas es:
-SUBROUTINE Identificador (Lista de par metros formales)
acción1
acción2
.......
acciónn
RETURN
.......
END
-El identificador del procedimiento ha de ser único, el primer car cter
debe ser una letra.
-En la Subrutina no se asocia un valor al identificador de la misma,
devuelve los datos de salida modificando sus argumentos si son:
-Nombres de variable.
-Nombres de array.
-Subrutinas ficticias.
-Asteriscos.
-El tipo de los argumentos se especifica expl¡cita o impl¡citamente. El
argumento array se define con un tama¤o fijo, anidado o ajustable.
-El argumento asterisco se usa para la salida múltiple de una Subrutina
no permitiendo la autollamada o la recursión.
LLAMADA A SUBRUTINAS
-Una Subrutina puede ser invocada desde otra Subrutina o unidad de
programa principal con la siguiente sintaxis:
-CALL Identificador (Lista de par metros actuales).
-Los argumentos deben coincidir en orden y tipo con los argumentos
ficticios de la Subrutina referenciada. La ejecución de CALL causa que
el control de la ejecución pase a la Subrutina referenciada.
Los argumentos de CALL pueden ser:
-Expresiones.
-Arrays.
-Subrutinas.
-El argumento correspondiente al asterisco ha de ser del tipo *N siendo
N una etiqueta de una sentencia ejecutable. Los valores se transmiten
por referencia.
Un ejemplo de la utilización de Subrutinas podr¡a ser:
-CHARACTER *20 Cab
REAL Gwr
PARAMETER (Cab='Especificación de la gravedad')
Gwr=9.82337
WRITE (*, *) Cab, Gwr
CALL Lista (Cab, Gwr)
WRITE (*, *) Cab, Gwr
SUBROUTINE Lista (T¡tulo, Datos)
CHARACTER *20 T¡tulo
REAL Datos
T¡tulo='Densidad Kg/cm'
Datos=0.57975
WRITE (*, *) T¡tulo, Datos
RETURN
END
-El resultado que proporcionar el anterior trozo de código ser un
resultado imprevisible, puesto que no se puede modificar una constante
a una variable.
La relación general para el paso de par metros ser la siguiente:
Par metros actuales Par metros formales
Variables Nombre variable
Elementos de array Nombre variable
Estructuras Nombre variable
Expresiones Nombre variable
Arrays Array
*Etiqueta Etiqueta
Subrutinas Nombre único
Funciones Nombre único
SENTENCIAS "EXTERNAL" E "INTRINSIC"
-Estas sentencias se usan para cuando el argumento es el identificador
simbólico de un Subprograma o Función.
-La sentencia EXTERNAL declara que un identificador es un nombre de una
Función externa o de una Subrutina. No es una sentencia ejecutable y
debe aparecer antes del código de sentencias ejecutables.
-La sintaxis de EXTERNAL es:
-EXTERNAL Identificador1, Identificador2, ..., Identificadorn.
-La sentencia INTRINSIC declara que un identificador es nombre de una
Función intr¡nseca, apareciendo el identificador en la sintaxis:
-INTRINSIC Función1, Función2, ..., Funciónn.
-Las Funciones intr¡nsecas que no pueden ser argumentos actuales de las
Subrutinas son los siguientes:
-De conversión de tipos, INT, IFIX, IDINT, FLOAT y CHAR.
-Lexicogr ficas, LGE, LGT, LLE y LLT.
-De m ximos y m¡nimos.
ENTRADA MULTIPLE A UNA SUBRUTINA. SENTENCIA "ENTRY"
-Sirve para que el comienzo de una Subrutina sea en una sentencia
espec¡fica contenida en la Subrutina. Puede estar en cualquier punto
del programa excepto dentro de un bloque IF o DO.
-Esta sentencia es de tipo no ejecutable siendo su sintaxis:
-ENTRY Identificador (Lista de par metros actuales).
-Los identificadores simbólicos de varios puntos de entrada tienen que
ser diferentes entre s¡ y del nombre del procedimiento.
-Un punto ENTRY se referencia desde otro módulo. El proceso prosigue
hasta encontrar un RETURN.
SALIDA MULTIPLE DE UNA SUBRUTINA. SENTENCIA "RETURN N".
Esta sentencia causa que el control de la ejecución retorne a la unidad
de programa desde donde se invocó. La sintaxis es la siguiente:
-RETURN n.
-La especificación n se usar en una Subrutina, para devolver el control
a una sentencia espec¡fica, sin ser la siguiente a la llamada.
-El valor de n ha de estar comprendido entre uno y el número de
asteriscos de la cabecera de la Subrutina.