FORTRAN 90 Subprogramas.

Slides:



Advertisements
Presentaciones similares
Compiladores e intérpretes Análisis Sintáctico II
Advertisements

Programación de Computadores
ESTRUCTURA DE LOS LENGUAJES DE PROGRAMACION
Iteración La iteración permite modelar problemas en los cuales una secuencia de instrucciones debe ejecutarse varias veces. La cantidad de iteraciones.
Elementos de Pascal Escribir un programa en Pascal que lea los valores de los catetos de un triángulo rectángulo y calcule y muestre la hipotenusa. program.
Resolución de Problemas Algoritmos y Programación
Metodología de la Programación
Programación modular Procedimientos y Funciones
Procedimientos y Funciones
Presentación Asignatura POF030 Semana 1. Contenido En forma general, los conceptos que se estudiarán en la asignatura son: – Procedures – Functions –
Subprogramas: Procedimientos
Entornos de programación
FORTRAN 90 arreglos.
FORTRAN 90 CONCEPTOS BÁSICOS.
FORTRAN 77 y Cómputo Científico
Algoritmo y Estructura de Datos I
Arreglos (vectores, matrices, ….)
C lase 10 COMPUTACION /17/2014Computacion - Fac. Ingeniería2  Ademas de los ya vistos (tipos simples), puede usarse como parámetros variables.
Lenguajes de Programación FORTRAN - 90 / 95
2 Acciones y funciones 2.1 Concepto
MÓDULO DE PROCEDIMIENTOS Los módulos también pueden contener subrutinas y funciones → MÓDULO DE PROCEDIMIENTOS  PROCEDIMIENTOS → son compilados como parte.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Subrutinas.
FUNCIONES Y PROCEDIMIENTOS
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
VBA - Procedimientos Subprogramas (Procedimientos): Procedimientos Sub
1 Procedimientos Es un conjunto de sentencias incluidas entre las declaraciones Sub o Function y End Sub/Function VB utiliza varios tipos de procedimientos:
Diseño descendente Diseño descendente, top-down, que consiste en dividir el problema en subproblemas más pequeños, que se pueden tratar de forma separada.
TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - REGLAS DE ALCANCE - COMPILACIÓN POR SEPARADO CONTROL DE FLUJO - EVALUACIÓN DE EXPRESIONES.
Al término de la clase, el alumno reconoce las ventajas de usar JAVASCRIPT para un proyecto web.
Sesión 6 Sentencias de Repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Semana 5 Subprogramas..
Brazos Bloque IF Permite que se ejecuten una serie de tareas si y sólo si una expresión lógica es verdadera. IF(logical_exp) then sentencia1 sentencia2.
PROCEDIMIENTOS FUNCIONES
Arrays (introducción)
LÓGICA - DECISIONES Los valores lógicos: constantes, variables y expresiones lógicas, permiten controlar la ejecución de las sentencias de un programa.
Diseño de diagramación Diagrama: es una representación gráfica del flujo información de y el proceso de ejecución del programa. Plateo del problema en.
Programación en Matlab
Tema 7. Introducción a lenguaje de programación Visual Basic (clase 1)
Sintaxis.
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Resolución de Problemas y Algoritmos Uso de iteración con secuencias
Programación en Pascal
Sesión 5 Sentencias de Selección y repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Fundamentos de Programación
COMPUTACION 2009 C lase 4 Programa PASCAL SENTENCIAS DATOS Expresiones Tipos Declaración de variables Declaración de variables Asignación Entrada/Salida.
Alcance Dinámico La Asociación Actual para un Nombre dado es el encontrado recientemente durante la ejecución, y no a sido destruido aun por el retornado.
1Hacer in programa que lea un número desconocido de datos reales de un disco y detecte el final de los datos en el archivo 2Definir entradas y salidas.
Ciclos (Loops, Repeticiones) Permiten ejecutar una secuencia de sentencias mas de una vez. Hay 2 tipos de loops:  WHILE repite la acción un número indefinido.
Teoría – Alejandro Gonzalez
Ada 2º Parte (variables, ámbitos , subrutinas , tipos abstractos de datos y excepciones)
Estructura general de un programa en el servidor de Bases de Datos.
Tema 6: Estructuras de Control
Funciones Definidas por el Programador
Sentencias de repetición
Inicialización de arreglos de 2 variables INTEGER, DIMENSIÓN (4, 3) : : ini DO i=1, 4 DO j= 1,3 ini(i, j) = j END DO i=1123 i=2123 i=3123 i=4123 j=1j=2j=3.
Funciones Si Funciones Y
PRINCIPIOS DE PROGRAMACIÓN
Funciones y Procedimientos Profesor: Rodrigo Cruzat.
Podemos utilizar modules para intercambiar datos entre diferentes unidades de un mismo programa. Por ejemplo entre diferentes subrutinas, sin la necesidad.
Devuelve el valor lógico FALSO. Sintaxis: FALSO( ) Observación: También puede escribir la palabra FALSO directamente en la hoja de cálculo o en la fórmula.
Estructura: COLA Profesor: Ing. Erick López Ch. M.R.I.
Módulo 4: Trabajando con Procedimientos. Descripción Crear procedimientos Uso de procedimientos Uso de funciones predefinidas Debug and Deploy Escribir.
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
Estructura de Datos PILA Universidad Hispanoamericana Prof. Ing. Erick López.
Programación en Visual Basic
MC. J. D. Pope S. ITD Unidad II. Introducción a la programación 2.1 Ejemplo de programas 2.2 Identificadores, constantes y variables 2.3 Tipos de datos:
Entrada/Salida : I/O FORTRAN 90/95 MC. Pope ITD. Entrada y Salida (I/O) Fortran proporciona dos tipos de declaraciones para entrada y salida de datos.
Camilo Andrés Salazar González FORTRAN.  Estructura program circulo Real :: r, area write (*,*) 'Escribe el radio r:' read (*,*) r area = *r*r.
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 7 – Funciones y Procedimientos.
Transcripción de la presentación:

FORTRAN 90 Subprogramas

Funciones y subrutinas Fortran 90 tiene dos tipos de subprogramas, funciones y subrutinas. Una función en Fortran 90 regresa un resultado calculado a través del nombre de la función. Si una función no tiene que regresar un valor, utiliza una subrutina.

Sintaxis de una función Una función tiene la siguiente sintaxis: type PROGRAM nombre-funcion (arg1, arg2, ..., argn) IMPLICIT NONE [Seccion de especificaciones] [Seccion de ejecucion] [Seccion de subprogramas] END OF PROGRAM nombre-funcion Type es un tipo de Fortran 90, por ejemplo: INTEGER, REAL, LOGICAL, etc… con o sin KIND. Nombre-funcion es un identificador de Fortran 90. arg1, arg2, …. argn, son argumentos formales.

Sintaxis de una función Una funcion es una unidad autocontenida que recibe una “entrada” via sus argumentos formales, hace algunos calculos, y regresa un resultado con el nombre de dicha función. En algúna parte de la función debe de haber una o más declaraciones como ésta: nombre-funcion = expresion Donde el resultado de expresion se guarda en el nombre de la función. Es importante hacer notar que el nombre de la función nombre-funcion no puede aparecer en el lado derecho de ninguna expresión.

Sintaxis de una función Una funcion es una unidad autocontenida que recibe una “entrada” via sus argumentos formales, hace algunos calculos, y regresa un resultado con el nombre de dicha función. En algúna parte de la función debe de haber una o más declaraciones como ésta: nombre-funcion = expresion Donde el resultado de expresion se guarda en el nombre de la función. Es importante hacer notar que el nombre de la función nombre-funcion no puede aparecer en el lado derecho de ninguna expresión. En la especificación de tipo type, los argumentos formales deben tener un nuevo atributo INTENT(IN). El significado de INTENT(IN) es que la función solo toma su valor de un argumento formal y no cambia su contenido. Cualquier declaración que pueda usarse en PROGRAM puede usarse en FUNCTION.

Ejemplo de funciones Es importante hacer notar que las funciones pueden no tener un argumento formal, pero ( ) es aún requerido. !Obtencion de un Factorial INTEGER FUNCTION Factorial(n) IMPLICIT NONE INTEGER, INTENT(IN) :: n INTEGER :: i, Ans Ans = 1 DO i = 1, n Ans = Ans * i END DO Factorial = Ans END FUNCTION Factorial !Lee y regresa un numero real positivo REAL FUNCTION ObtenNumero() IMPLICIT NONE REAL :: Valor_Entrada DO WRITE(*,*) ‘Un numero positivo: ' READ(*,*) Valor_Entrada IF (Valor_Entrada > 0.0) EXIT WRITE(*,*) 'ERROR. Intenta de nuevo.' END DO ObtenNumero = Valor_Entrada END FUNCTION ObtenNumero

Uso de las funciones Cmn = Factorial(m)/(Factorial(n)*Factorial(m-n)) El uso de una función definida por el usuario, es similar al de una función intrínseca de Fortran 90. La siguiente sentencia utiliza Factorial(n) para calcular la combinatoria C(m,n) donde m y n son argumentos: Cmn = Factorial(m)/(Factorial(n)*Factorial(m-n)) Hay que hacer notar que una combinatoria se define de la siguiente manera: 𝐶 𝑚,𝑛 = 𝑚! 𝑛!× 𝑚−𝑛 !

¿En Donde colocar las funciones? Las funciones en Fortran 90 pueden ser internas o externas. Las funciones internas se encuentran dentro de un PROGRAM, por ejemplo: Aunque una función puede contener otras funciones, las funciones internas no pueden contener otras funciones. PROGRAM nombre-programa IMPLICIT NONE [seccion de especificaciones] [sección de ejecuciones] CONTAINS [funciones] END PROGRAM nombre-programa

¿En Donde colocar las funciones? El programa de la derecha muestra dos funciones internas, PromArit() y PromGeom(). Estas funciones toman dos argumentos REAL, calculan y regresan valor de función REAL. PROGRAM DosFunciones IMPLICIT NONE REAL :: a, b, A_Prom, G_Prom READ(*,*) a, b A_Prom = PromArit(a, b) G_Prom = PromGeom(a,b) WRITE(*,*) a, b, A_Prom, G_Prom CONTAINS REAL FUNCTION PromArit(a, b) REAL, INTENT(IN) :: a, b PromArit = (a+b)/2.0 END FUNCTION PromArit REAL FUNCTION PromGeom(a, b) REAL, INTENT(IN) :: a, b PromGeom = SQRT(a*b) END FUNCTION PromGeom END PROGRAM DosFunciones

ejemplo Si un triángulo tiene las longitudes de sus lados dadas por a, b y c, la fórmula de Herón calcula el área del triángulo de la siguiente manera: 𝐴𝑟𝑒𝑎= 𝑠×(𝑠−𝑎)×(𝑠−𝑏)×(𝑠−𝑐) donde s es el semi-perímetro del triángulo: 𝑠= 𝑎+𝑏+𝑐 2 Para formar un triángulo las longitudes a, b, c deben de cumplir las siguientes condiciones: 𝑎>0, 𝑏>0 𝑦 𝑐>0 𝑎+𝑏>𝑐, 𝑎+𝑐>𝑏 𝑦 𝑏+𝑐>𝑎

ejemplo La función PruebaTriangulo() de tipo LOGICAL se asegura de que todos los lados sean positivos, y que la suma de dos lados cualquiera sea mayor que el tercero. LOGICAL FUNCTION PruebaTriangulo(a, b, c) IMPLICIT NONE REAL, INTENT(IN) :: a, b, c LOGICAL :: test1, test2 test1 = (a > 0.0) .AND. (b > 0.0) .AND. (c > 0.0) test2 = (a + b > c) .AND. (a + c > b) .AND. (b + c > a) PruebaTriangulo = test1 .AND. test2 ! Los dos deben ser .TRUE. END FUNCTION PruebaTriangulo

ejemplo La siguiente función implementa la fórmula de Herón. REAL FUNCTION Area(a, b, c) IMPLICIT NONE REAL, INTENT(IN) :: a, b, c REAL :: s s = (a + b + c) / 2.0 Area = SQRT(s*(s-a)*(s-b)*(s-c)) END FUNCTION Area

ejemplo Programa completo: PROGRAM FormulaHeron IMPLICIT NONE REAL :: a, b, c, AreaTriangulo DO WRITE(*,*) ‘Introduce la longitud de los tres lados de un & triangulo --> ' READ(*,*) a, b, c WRITE(*,*) ‘La longitud de los lados son: ', a, b, c IF (PruebaTriangulo(a, b, c)) EXIT ! Salir si forman un triangulo WRITE(*,*) ‘Tus valores no pueden formar un triangulo. Intentalo de nuevo' END DO AreaTriangulo = Area(a, b, c) WRITE(*,*) ‘El Area del Triangulo es ', AreaTriangulo CONTAINS LOGICAL FUNCTION PruebaTriangulo(a, b, c) …… END FUNCTION PruebaTriangulo REAL FUNCTION Area(a, b, c) END FUNCTION Area END PROGRAM FormulaHeron

subrutinas Una función de Fortran 90 toma valores de sus argumentos formales, y devuelve un solo valor con el nombre de la función. Una subrutina de Fortran 90 toma valores de sus argumentos formales y regresa algunos resultados calculados con sus argumentos formales. Una subrutina de Fortran 90 no regresa ningun valor con su nombre. La siguiente es la sintaxis de una subrutina en Fortran 90: SUBROUTINE nombre-subrutina(arg1,arg2,...,argn) IMPLICIT NONE [Seccion de especificaciones] [Seccion de ejecucion] [Seccion de subprograma] END SUBROUTINE nombre-subrutina

El atributo INTENT() Dado que las subrutinas utilizan argumentos formales para recibir valores y regresar resultados, en adición a INTEN(IN), existen INTEN(OUT) e INTEN(INOUT). INTEN(OUT) significa que un argumento formal no recibe un valor; pero, regresará un valor a su argumento correspondiente. INTEN(INOUT) significa que un argumento formal recibe un valor y regresa otro a su argumento correspondiente.

El atributo INTENT() Por ejemplo: ! Am, Gm y Hm se usan para regresar los resultados SUBROUTINE Promedios(a, b, c, Am, Gm, Hm) IMPLICIT NONE REAL, INTENT(IN) :: a, b, c REAL, INTENT(OUT) :: Am, Gm, Hm Am = (a+b+c)/3.0 Gm = (a*b*c)**(1.0/3.0) Hm = 3.0/(1.0/a + 1.0/b + 1.0/c) END SUBROUTINE Promedios ! Los valores a y b son intercambiados SUBROUTINE Swap(a, b) IMPLICIT NONE INTEGER, INTENT(INOUT) :: a, b INTEGER :: c c = a a = b b = c END SUBROUTINE Swap

La declaración CALL A diferencia de C/C++ y Java, Fortran 90 utiliza la sentencia CALL, para utilizar una subrutina. La sentencia CALL puede tener una de las siguientes formas: CALL sub-nombre(arg1,arg2,…,argn) CALL sub-nombre( ) CALL sub-nombre Las últimas dos son equivalentes y y se utilizan para llamar a una subrutina sin argumentos formales. PROGRAM Prueba IMPLICIT NONE REAL :: a, b READ(*,*) a, b CALL Swap(a,b) WRITE(*,*) a, b CONTAINS SUBROUTINE Swap(x,y) REAL, INTENT(INOUT) :: x,y REAL :: z z = x x = y y = z END SUBROUTINE Swap END PROGRAM Prueba