Diseo descendente En programacin es muy importante elegir el diseo a cada problema. Para esta tarea se utiliza un diseo descendente, top-down, que consiste en dividir el problema en subproblemas mas pequeos, que se pueden tratar de forma separada. Hasta ahora, no haba manera de compilar, testear y depurar cada uno de esos subproblemas separadamente hasta construir el programa final combinando adecuadamente secciones de cdigo. Hoy se pretende ejecutar un programa con varios subproblemas con diferentes procedimientos externos, y cada procedimiento puede ser compilado, testeado y depurado. Procedimientos externos principales Los procedimientos mas usados los subprogramas funciones o simplemente funciones y las subrutinas. Su ejecucin se controla desde alguna otra unidad de programa (puede ser el programa principal u otro procedimiento externo). Los beneficios del diseo serian los siguientes Es mucho mas fcil encontrar errores en el codigo, sobre todo en programas largos. Permite usar procedimientos construidos por otros programadores. Evita cambios indeseables en las variables del programa. Solo algunas de ellas se transfieren entre las diferentes unidades del programa, aquellas variables que son necesarias para realizar los clculos previstos.
FUNCIONES Existen dos tipos de funciones: Intrnsecas: Todas aquellas funciones que suministra el propio lenguaje (Sin, Cos, Tan,) Definidas por el propio programador : estos procedimientos permiten responder a necesidades particulares del usuario.
El resultado de toda funcin es un valor numrico, lgico, una cadena de caracteres o array. Las funciones generadas por el programador pueden usarse igual que las funciones intrnsecas y pueden formar parte de expresiones.
Estructura general de una funcin. 1) Cabecera de una funcin. 2) Seccin de especificaciones 3) Seccin de ejecucin. 4) Terminacin de la funcin.
La funcin de cabecera identifica la unidad del programa como un procedimiento funcin. TIPO es cualquier tipo Fortran valido relativo al nombre de la funcin. Si no aparece tipo en la cabecera debe especificarse despus. Nombre de la funcin. Es un identificador dentro del programa . Lista de argumentos formales: Es una lista (puede ser vaca) de constantes, variables arrays o expresiones, separados por comas. Se emplean para pasar informacin al cuerpo de la funcin se les llama formales por que no conllevan a un reserva de espacio en la memorial
La seccin de ejecucin debe incluir al menos una sentencia de asignacin en la que se encargue al nombre de la funcin resultado de una expresin del mismo tipo (de ah la necesidad de declarar el tipo del nombre de la funcin.). Nombre_funcin = Expresin. Finalmente, la terminacin de la funcin tiene una sintaxis general. END FUNCTION [ Nombre _funcin] Una funcin se invoca escribiendo Nombre_funcin( [Lista de argumentos actuales])
Esta invocacin puede ser parte de una expresin o en cualquier lugar donde puede aparecer una expresin. Como resultado de la evaluacin se devuelve un valor que es usado para evaluar, a su vez, la expresin de la que forme parte.
Debe haber una concordancia en el numero, tipo y orden de los argumentos actuales que aparecen en la llamada a la funcin y los argumentos formales que aparecen en cabecera de la misma. De igual forma el tipo del nombre de la funcion debe ser el mismo en las unidades de programa que se invoca. La ejecucin de la llamada ocurre de la siguiente forma Se evalan los argumentos actuales que son expresiones. Se asocian los argumentos actuales con sus correspondientes argumentos formales. Se ejecuta el cuerpo de la funcin especifica Se devuelve el control a la unidad de programa que hizo la llamada, en concreto, a la sentencia donde se invoco a la funcin, sustituyendo su nombre por el resultado de la ejecucin de la funcin.
Sintaxis general para los argumentos formales
Donde la intecion_paso se sustituye por IN: Si el argumento formal es un valor de entrada. OUT: Si el argumento formal es un valor de salida. IN OUT Si el argumento formal es un valor de entrada y salida. El atributo INTENT ayuda al compilador a encontrar errores por el uso indebido de los argumentos formales de un procedimiento
Ejemplo. Una funcin de temperatura ( F C)
Se observa que la declaracin CENT es real en la unidad de programa principal en concordancia con su tipo en la funcin y que el argumento actual en ambas es real. subrutinas Una subrutina es un subprograma externo que permite ejecutar un algoritmo que retornara un valor o valores dentro del programa principal. Una SUBRUTINA en fortran es en realidad un modulo con algunas caractersticas especiales. Una subrutina puede cumplir el papel de una funcin. Las subrutinas se diferencian de las funciones fundamentalmente en la sintaxis de la definicin y en la forma de invocarlos; dado que no tienen tipo alguno las subrutinas no pueden formar parte de expresiones ni aparecer en la parte derecha de una sentencia de asignacin, deben aparecer nica y exclusivamente en una sentencia de llamada a procedimiento. Caractersticas de una subrutina Se compila independientemente, puede estar ubicada en un fichero independiente de extensin .FOR o bien al igual que las funciones externas pueden estar ubicadas a continuacin de la sentencia END del programa principal, con lo que nicamente se compilara un nico fichero. La forma de llamada es diferente. Pueden arrojar varios valores, un solo valor o ninguno. SUBRUTINAS. Estructura y Sintaxis
NOMBRE: Es cualquier nombre valido en fortran, es de carcter simblico y representa a la subrutina con la cual se trabajara, identifica a la subrutina. V1,V2.VN : Nombre que intervienen en la subrutina, en otras palabras variables ficticias que solo entran en la subrutina. Parte de entrada y parte de salida, RETURN: finaliza la subrutina y retorna valores. END SUBROUTINE: final de la subrutina. La forma como se convoca en el programa es
CALL : Sentencia para llamar a cualquier subrutina. NOMBRE: Es el nombre con el cual se identifica la subrutina v1,v2.Vn : Son los datos de entrada y salida reales y deben corresponder a los valores ficticios con los cuales se entra a la subrutina. De esta forma podremos llamar las funciones o subrutinas varias veces.
Ejemplo. Subrutina VOLUMEN
El programa del calculo del volumen de 10 esferas con radio i. Observar que la llamada de la subrutina sirve como una funcin. Call volumen( i,vol) indica que el valor de entrada es i y el valor retornado es vol. segn la subrutina.
Aqu se toman los mismos valores de entrada y salida que el programa principal pero estos pueden ser diferentes. Observar que aqu se declaran variables nuevamente. La opcin return se aconseja colocarla al final debido a que detiene la subrutina y muestra los resultados, esto puede generar errores de compilacin o de estructura. La forma de cmo combinar estos dos hace parte de la forma de programar del usuario generalmente se hace de forma sencilla. Cuando se desea incluir un array completo en los argumentos formales de las subrutinas se define solamente su nombre sin incluir sus dimensiones. La subrutina conocer de antemano puesto que son variables ya declaradas. En caso de querer enviar un nico elemento del array la llamada y la subrutina deben especificarse.
Se observa que el termino a(1,2) se relaciona con elem, y este se declara como real, los trminos b y c son matrices de orden 5x5, es claro que el modo de llamada indica un solo termino pero al momento de declarar la variable ficticia se considera una sola asignacin.
MODULOS Los mdulos surgen de la creacin de varios subprogramas con las mismas notaciones, estos solo participan en Fortran 90 en adelante, generalmente se usan para declarar variables que se usan en muchos subprogramas y agruparlos en una sola unidad. Los mdulos comienzan con MODULE nombre y terminan con END MODULE nombre. No se usa el termino return, si se coloca en el programa principal debe colocarse antes de iniciar. Para hacer uso del modulo se debe colocar la palabra USE nombre, antes de IMPLICIT NONE Para su uso entonces,
Generalmente se declaran contantes, valores de iteracin ,ndices, entre otros.