1 / 51

Lenguajes de Programación FORTRAN - 90 / 95 Profesora Ana Lilia Laureano Cruces Alumnos Martha Mora Torres / UNAM – No

Lenguajes de Programación FORTRAN - 90 / 95 Profesora Ana Lilia Laureano Cruces Alumnos Martha Mora Torres / UNAM – Noviembre 2004 Ignacio Adriano Rivas UAM-A / Febrero 2005. FORTRAN 90 / 95.

fuller
Télécharger la présentation

Lenguajes de Programación FORTRAN - 90 / 95 Profesora Ana Lilia Laureano Cruces Alumnos Martha Mora Torres / UNAM – No

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lenguajes de Programación FORTRAN - 90 / 95 Profesora Ana Lilia Laureano Cruces Alumnos Martha Mora Torres / UNAM – Noviembre 2004 Ignacio Adriano Rivas UAM-A / Febrero 2005

  2. FORTRAN 90 / 95 • FORTRAN 90/95 representa el primer cambio significativo en 20 años del lenguaje FORTRAN (FORmula TRANslation), colocándose así a la altura de los más modernos lenguajes de programación estructurada. • FORTRAN fue el primer lenguaje denominado de “alto nivel”, haciendo posible el uso de nombres simbólicos para representar cantidades y fórmulas matemáticas en forma razonablemente comprensible y fue propuesto a finales de 1953 por John Backus.

  3. FORTRAN 90 / 95 • La estructura de un programa en FORTRAN 90/95 es de la siguiente forma (lo que se encuentra entre corchetes es opcional): [PROGRAMnombre del programa] [expresionesdeclarativas] [expresiones de ejecución] [CONTAINS subprogramas internos] END [PROGRAM [nombre del programa]] Los enunciados son la base del programa y a excepción del enunciado de asignación, todos empiezan con una palabra clave.

  4. FORTRAN 90 / 95 • Los comentarios se escriben anteponiendo un signo de cierre de admiración (!) • Si una línea del programa es muy larga, ésta puede continuar en la línea siguiente colocando al final de la primera línea el signo &: A = 174.6 * & (T – 1981.2) **3 • Tipos de Datos: Se dividen en 2 clases, los numéricos (INTEGER, REAL y COMPLEX) y los no numéricos (CHARACTER y LOGICAL).

  5. FORTRAN 90 / 95 • Asociado al tipo existen varias clases de ellos, de acuerdo al número de bits disponible para su almacenamiento, por lo que puede haber 2 clases de enteros: SHORT y LONG. • Constantes: usadas para denominar los valores de un tipo en particular • Nombres y variables: Consiste entre 1 y 31 caracteres alfanuméricos y deben empezar con una letra (excepto en las cadenas de caracteres, FORTRAN 90/95 no es sensible a mayúsculas o minúsculas): MINOMBRE significa lo mismo que MiNombre.

  6. FORTRAN 90 / 95 • Regla implícita del tipo de dato: Esta regla, predetermina a las variables que empiezan con las letras de la i a la n como enteras, mientras que a las que empiezan con cualquier otra letra, como reales. Por lo anterior, para evitar errores, es recomendable deshabilitar dicha regla agregando la siguiente línea: IMPLICIT NONE • Operadores: ** Exponencial 2**4 (24) + Suma A+9 * Multiplicación 2*A - Resta X - Y / División B / Delta

  7. FORTRAN 90 / 95 • Asignación numérica: El propósito es calcular el valor de una expresión numérica y asignarla a una variable. Su forma general es: variable = expr x = a + b • Entradas y salidas de datos: una forma de alimentar datos mientras el programa está corriendo es utilizando la declaración READ, y tiene la forma: READ*, list donde list es una lista de variables separadas por comas: READ*, A, B, C

  8. FORTRAN 90 / 95 La declaración PRINT, se utiliza para la salida de datos. Su forma general es: PRINT*, list Donde list puede ser una lista de constantes, variables, expresiones y cadenas de caracteres separadas por comas: PRINT*, “la raiz cuadrada de”, 2, ‘es’, sqrt(2.0) También podemos usar la declaración WRITE: OPEN ( 2, file=‘prn’) WRITE (2, *) ‘Esto se envía a la impresora’ PRINT*, ‘Esto se envía a la pantalla’

  9. FORTRAN 90 / 95 • Ciclos: la forma general del ciclo DO es: DO i=j, k block END DO donde i es una variable entera, j y k son expresiones enteras, y block es cualquier número de declaraciones, las cuales se ejecutan repetidamente dependiendo del valor de j y k. DO i=1, 10 PRINT*, i END DO

  10. FORTRAN 90 / 95 • Decisiones: Declaración IF-THEN-ELSE IF conditionTHEN block 1 [ELSE block E] END IF • La expresión parameter: se utiliza como expresión de inicialización REAL, PARAMETER :: pi=3.141593 INTEGER, PARAMETER :: dos=2

  11. FORTRAN 90 / 95 • Operadores relacionales: .LT. o < menor que a .LT. 5 .LE. o <= menor o igual que b .LE. 4 .EQ. o == igual b .EQ. 3 .NE. o /= diferente a .NE. 0 .GT. o > mayor que b .GT. 4 .GE. o >= mayor o igual que x .GE. 0 • Operadores lógicos: .NOT. Negación lógica .AND. Intersección lógica .OR. Unión lógica .EQV. y .NEQV. Equivalencia y no equivalencia

  12. FORTRAN 90 / 95 • Construcción CASE: Similar a IF-THEN-ELSE, permite seleccionar entre un número de situaciones o casos basados en un SELECTOR, este debe ser de tipo ordinal. [name:] SELECT CASE (expr) CASE (SELECTOR1) [name] block 1 CASE (SELECTOR2) [name] block 2 [CASE DEFAULT [name] block d END SELECT [name]

  13. FORTRAN 90 / 95 • Ejemplo: READ*, ch vocales: SELECT CASE (ch) CASE (‘a’, ‘e’, ‘i’, ‘o’, ‘u’) PRINT*, ‘vocal’ CASE default PRINT*, ‘consonante u otro caracter’ END SELECT vocales END

  14. FORTRAN 90 / 95 • DO con salida condicional (simulamos un WHILE o un REPEAT): DO IF (expr-lógica) exit block END DO O DO block IF (expr-lógica) EXIT END DO WHILE DO WHILE (expr-lógica) block END DO REPEAT-UNTIL

  15. FORTRAN 90 / 95 • Ejemplo: DO WRITE*, “tu invitado: “ READ*, invitado IF (invitado == 10) EXIT END DO • Do while: DO WHILE (expr-lógica) block END DO

  16. FORTRAN 90 / 95 • Los Programas diseñados con los principios de programación estructurada y un diseño modular descendente son estructurados por medio de abstracciones procedurales y funcionales. Estos procedimientos se comunican con el programa principal de manera específica, a través del paso de datos y son invocados o llamados desde éste. • Existen dos formas de estructurar el programa a través de : funciones (abstracciones-funcionales) y subrutinas (abstracciones-procedurales). • El paso de datos se conoce como paso de parámetros, estos pueden ser pasados por referencia o por valor.

  17. FORTRAN 90/95 • Paso de parámetros por referencia: • Es un mecanismo que permite el paso de un parámetro utilizando una dirección de memoria con el fin de facilitar ya sea el retorno al programa principal de un valor producido por un subprograma o el retorno al programa principal de un valor modificado por el subprograma. • INTENT (OUT) ! producido • INTENT (INOUT) ! modificado

  18. FORTRAN 90/95 • Parámetros por valor: • Es un mecanismo que permite el paso de un parámetro utilizando su valor con el fin de evitar su modificación, de esta forma al terminar de ejecutarse el subprograma y retornar el control al programa principal el valor de ese parámetro continúa siendo el mismo. En otras palabras el valor de este parámetro sólo puede ser utilizado. • INTENT (IN) ! Sólo puede ser utilizado

  19. FORTRAN 90 / 95 • Ejemplo de función: PROGRAM new IMPLICIT NONE REAL:: x=2 x = x – f(x) PRINT*, x, f(x) FUNCTION f(x) REAL INTENT (IN) :: x REAL :: f f = x ** 3 END FUNCTION f END PROGRAM new

  20. FORTRAN 90 / 95 • Ejemplo de subrutina: IMPLICIT NONE INTEGER :: a, b READ*, a, b CALL inter(a, b) SOUBROUTINE inter(x, y) INTEGER temp INTEGER INTENT (IN) :: x INTEGER INTENT (OUT) :: y temp = x x = y y = temp END SOUBROUTINE END

  21. FORTRAN 90 / 95 • Recursión: Muchas funciones matemáticas pueden estar definidas recursivamente, es decir que están definidas en términos de casos más simples de ellas mismas. • Para implementarlas es necesario que una función se invoque a sí misma. Normalmente en FORTRAN 90/95 esto es posible, agregando el prefijo RECURSIVE como palabra clave en el encabezado de la función es como podrá invocarse a sí misma.

  22. FORTRAN 90 / 95 • Ejemplo: IMPLICIT NONE INTEGER :: i i = 10 PRINT*, i, factorial(i) RECURSIVEFUNCTION factorial(n) RESULT (fact) INTEGER :: fact INTEGER INTENT (IN) :: n IF (n .LE.1) THEN fact=1 ELSE fact=n*factorial(n-1) END IF END FUNCTION END

  23. FORTRAN 90 / 95 • Módulos: son contenedores físicos que permiten albergar expresiones declarativas o abstracciones procedurales o funcionales. Estos módulos pueden ser compilados por separado o pueden estar dentro de un programa: • Puede contener más de una abstracción funcional o procedural, o • Puede tener expresiones declarativas y/o de especificación accesibles a todas las unidades del programa.

  24. FORTRAN 90 / 95 • Ejemplo: módulo aparte USE utilerias MODULE utilerias IMPLICIT NONEREAL, PARAMETER :: pi =3.14159 INTEGER :: a, b CONTAINS READ*, a, b SOUBROUTINE inter(x, y) b = Pi INTEGER temp CALL inter(a,b) INTEGER INTENT (IN) :: x PRINT*, a,b INTEGER INTENT (OUT) :: y temp = x x = y y = temp END SOUBROUTINE inter END MODULE utilerias

  25. FORTRAN 90 / 95 Programas Externos.for Progma Principal.f90 Mod-Sub1 INCLUDE Externos.FOR USE Module-Sub_1,Module-Sub2 Int-Sub1 Int – Sub1 Int – Sub2 Mod-Sub2 Int-Sub2

  26. FORTRAN 90 / 95 Compilación Separada: Para compilar un módulo por separado, es necesario agrupar todos las abstracciones procedurales y funcionales dentro de un archivo independiente cuya extensión debe ser .FOR Finalmente, dentro del PROGRAMA principal se debe declarar un INCLUDE del archivo que contiene los módulos, cuya extensión debe ser .F90

  27. Archivo: Areas.for MODULE Compartir CONTAINS SUBROUTINE Impresion (Area, op) IMPLICIT NONE !Declaraiones de Variables INTEGER, INTENT(IN):: op, area ImpAreas: SELECT CASE (op) CASE (1) PRINT *, 'El area del Triangulo es ', area CASE (2) PRINT *, 'El area del Cuadrado es ', area CASE (3) PRINT *, 'El area del Circulo es ', area END SELECT ImpAreas END SUBROUTINE Impresión !Rutinas de las áreas SUBROUTINE Triangulo (op) IMPLICIT NONE INTEGER, INTENT(IN) :: op INTEGER :: base, altura, area PRINT *,'DAME LOS DATOS DEL TRIANGULO' PRINT *,'Dame la Altura' READ *,altura PRINT *,'Dame la Base' READ *,base Area = (base * altura)/2 CALL Impresion (Area, op) END SUBROUTINE Triangulo SUBROUTINE Cuadrado (op) !su bloque CALL Impresion (Area, op) END SUBROUTINE Cuadrado SUBROUTINE Circulo (op) !su bloque CALL Impresion (Area, op) END SUBROUTINE Circulo END MODULE Compartir

  28. Archivo: Areas.f90 INCLUDE "Areas.for" PROGRAM SelecAreas USE Compartir IMPLICIT NONE INTEGER :: op PRINT *, 'Areas Disponibles' DO WHILE (Op /= 4) PRINT *, 'SELECCIONA UNA OPCION ENTRE 1..4' PRINT *, '(1) TRIANGULO' PRINT *, '(2) CUADRADO' PRINT *, '(3) CIRCULO' PRINT *, '(4) SALIDA' PRINT *, 'CUAL ES LA OPCION DESEADA' READ *, op Areas: SELECT CASE (op) CASE (1) CALL Triangulo (op) CASE (2) CALL Cuadrado (op) CASE (3) CALL Circulo (op) CASE (4) PRINT *, 'ABUR' CASE DEFAULT PRINT *, 'has hecho una seleccion eeronea el rango valido es 1..4' END SELECT Areas END DO END PROGRAM SelecAreas

  29. MODULE Compartidas IMPLICIT NONE SAVE !Tipos Derivados TYPE Alumno CHARACTER (LEN = 12) :: nombre INTEGER :: PromEx, PromPr, PromTa, CaFi END TYPE Alumno INTEGER,PARAMETER::Max = 45 END MODULE Compartidas PROGRAM PromAlumnos USE Compartidas IMPLICIT NONE TYPE (Alumno) :: UnAl(Max) INTEGER Cuantos !PROGRAMA PRINCIPAL CALL Lectura(UnAl, Cuantos) CALL Promedio(UnAl, Cuantos) CALL imprimir(UnAl, Cuantos) END PROGRAM PromAlumnos

  30. CONTAINS • Especifica que un módulo o procedimiento contiene procedimientos internos • SAVE • Se pueden utilizar MODULE (s) para pasar grandes cantidades de datos entre procedimientos dentro de un programa. Al incluir este comando se asegura que el contenido del MODULE, permanece sin cambio entre los USE. • PARAMETER • Define el valor de una constante

  31. FORTRAN 90 / 95 • Arreglos: La siguiente expresión declara un arreglo REAL, DIMENSION(10) :: x x es el arreglo con 10 elementos, el arreglo puede tener más de una dimensión: REAL, DIMENSION(2,3) :: num num, es un arreglo de 2 dimensiones, la primera dimensión tiene una extensión de 2 y la segunda tiene una extensión de 3.

  32. FORTRAN 90 / 95 • Arreglos utlizando (memoria dinámica) Una manera de evitar el desperdicio de la memoria (que se hace al no utilizar la totalidad de la misma reservada en las declaraciones de arreglos con un máximo número de elementos predeterminados) es usando memoria dinámica de la siguiente manera: REAL, DIMENSION(:), ALLOCATABLE :: x x no tiene un tamaño específico hasta que aparece una declaración del tipo: ALLOCATE( x(n) ) Cuando ya no se necesite, se remueve la localidad de memoria con la declaración: DEALLOCATE ( x )

  33. FORTRAN 90 / 95 • Ejemplo: INTEGER, DIMENSION(:), ALLOCATABLE :: vector INTEGER :: i DO i = 1,4 PRINT*, ‘Total elementos vector’ READ*, n ALLOCATE (vector(n) suma = 0.0 DO j = 1,n suma = suma + vector (j) ** 2 END DO PRINT *, ‘Suma de cuadrados = ’, suma END DO DEALLOCATE ( vector )

  34. FORTRAN 90 / 95 • Estructuras: Son tipos de variables que encapsulan varios datos como una unidad. TYPE [[,acceso] ::] nombredeltipo [PRIVATE] definición de componentes END TYPE [nombredeltipo] De manera predeterminada un tipo y todos sus componentes son accesibles (acceso público) TYPE registroestudiantil CHARACTER (20) nombre INTEGER numtareas END TYPE registroestudiantil

  35. FORTRAN 90 / 95 • Ejemplo • PROGRAM registros IMPLICIT NONE TYPE DatosEstudiante CHARACTER(LEN=12) :: nomb,Ap1,Ap2 INTEGER::edad END TYPE DatosEstudiante ! Declaración de variables TYPE (DatosEstudiante) :: alumnos(45) INTEGER :: i DO i = 1,max PRINT*, ‘dame el nombre del alumno’ READ*, alumnos(i) % nombre PRINT*, ‘dame la edad del alumno’ READ*, alumnos(i) % edad END DO END PROGRAM registros

  36. FORTRAN 90 / 95 • Apuntadores: La implementación de los apuntadores en FORTRAN se realiza mediante las siguientes declaraciones: POINTER, se usa para declarar a una variable tipo puntero. Con la instrucción TARGET, se restringen las variables a las que un puntero puede apuntar. REAL, POINTER :: p ! p apunta a un objeto del ! mismo tipo REAL, TARGET :: r = 13 ! r es una variable que puede ser ! apuntada por una variable de tipo ! puntero p  r p apunta a r, por lo que se le denomina apuntador o alias (atributo pointer). r es el objeto al que se refiere p y está denominado como el objeto (atributo target).

  37. FORTRAN 90 / 95 • INTEGER, POINTER :: aa,bb,cc • INTEGER, TARGET :: xx,yy • aa xx • bb xx • cc yy • aa yy

  38. FORTRAN 90 / 95 Lo que el código hace con las localidades de memoria es: xx aa aa xx bb cc yy aa

  39. FORTRAN 90 / 95 • Cualquier apuntador en un programa se encuentra en cualquiera de los siguientes 3 estados: • indefinido: se encuentran así, en la declaración • Nulo o desasociado: significa que no apunta a ningún objeto. • La asociación entre variables POINTERs y TARGETs se rompe con el uso de la siguiente instrucción. • NULLIFY (p1) • asociado: indica si el puntero posee un estado de asociación. • nulo o desasociado se puede verificar con la función • ASSOCIATED (p1), • la cual nos regresa verdadero si p1 es un alias de un objeto y falso, si no lo es.

  40. FORTRAN 90 / 95 • Si deseamos manejar memoria dinámica, se declara de la siguiente forma: REAL, POINTER :: p1 ALLOCATE (p1) lo anterior indica que p1 apunta a un área de memoria disponible para almacenar una variable del tipo real. Para liberar la memoria utilizar: DEALLOCATE (p1) • Definir arreglos con apuntadores o (memoria dinámica): REAL, DIMENSION (:), POINTER :: x INTEGER, DIMENSION (:,:), ALLOCATABLE : : a

  41. FORTRAN 90 / 95 • Los apuntadores también pueden definirse para apuntar a tipos derivados de datos: • TYPE (empleado), POINTER :: qqq • qqq es una variable apuntador que señala objetos del tipo derivado de datos empleado. • TYPE empleado • INTEGER :: numero • CHARACTER (32) :: nombre • END TYPE empleado

  42. FORTRAN 90 / 95 • Lo anterior se utilza para las listas encadenadas: • TYPE Nodo • INTEGER :: ii • CHARACTER (LEN = 2) :: identifi • TYPE (NODO), POINTER :: puntero • END TYPE Nodo • Con esta declaración de tipo derivado se puede conseguir que unos datos apunten a otros.

  43. FORTRAN 90 / 95 • TYPE (Nodo), TARGET :: nn_1,nn_2,nn_3 • !nn_1 apunta a nn_2 • nn_1%ii = 1 • nn_1%identifi = ‘ab’ • nn_1%puntero  nn_2 • !nn_2 apunta a nn_1 • nn_2%ii = 2 • nn_2%identifi = ‘cd’ • nn_2%puntero  nn_1 • !nn_3 apunta a nn_2 • nn_3%ii = 3 • nn_3%identifi = ‘ef’ • nn_3%puntero  nn_2

  44. FORTRAN 90 / 95 • Dentro de los avances que se observan en Fortran 90 / 95 están: • el gran conjunto de procedimientos intrínsecos, incluyendo las funciones elementales que operan en todos o en elementos seleccionados de los argumentos (arreglos). • Otro de sus grandes potenciales es la inclusión de estructuras de control bien definidas, y formas de tipificar las variables que se utilizan, así como mecanismos de abstracción que permiten aprovechar todo el potencial de los últimos avances de análisis y diseño de ingeniería de software.

  45. FORTRAN 90 / 95 • Sólo mencionaremos algunas de ellas: • Funciones numéricas elementales: - ABS(A): Valor absoluto del número entero, REALo complejo A. - ACOS(X): Coseno inverso (arco coseno) - AIMAG(Z): Parte imaginaria. - COS(X): Coseno - COSH(X): Coseno hiperbólico - EXP(X): Función exponencial. - LOG(X): Logaritmo natural.

  46. FORTRAN 90 / 95 • Funciones elementales para el uso de caracteres: - ACHAR(I): Caracter con código ASCII I para I en el rango de 0-127. - CHAR(I [,KIND]): Caracter en la posición I de la secuencia obtenida por el sistema con un tipo dado. - ICHAR(C): Posición del caracter C en la secuencia obtenida por el sistema

  47. FORTRAN 90 / 95 • Funciones no elementales en el uso de caracteres - LEN(STRING): (Función informativa) número de caracteres en STRING si es escalar o en un elemento de STRING si éste es un arreglo. - REPEAT(STRING, NCOPIES): Concatenación de NCOPIES de STRING; ambos argumentos son escalares. - TRIM(STRING): STRING (escalar) regresa la longitud sin espacios en blanco.

  48. FORTRAN 90 / 95 • Funciones relativas a representaciones numéricas: Son funciones relacionadas con los modelos (expresión matemática) usados para representar enteros y reales internamente. - DIGITS(X): Número de dígitos significativos en el modelo del número REALo entero X. - MAXEXPONENT(X): Máximo exponente (entero) en el modelo que incluye al número REALX. - FRACTION(X): Parte fraccionaria del modelo para X.

  49. FORTRAN 90 / 95 • Además existen otras funciones sobre: - Manipulación de Bits - Multiplicación de Vectores y Matrices - Reducción de arreglos - Información de arreglos e información de cualquier tipo - Manipulación y construcción de arreglos - Lógica Elemental - Relacionadas al tipo de variable • También se incluyen Subrutinas intrínsecas no elementales sobre: - Números aleatorios y el reloj de tiempo real.

More Related