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

Download Report

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

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 1

FORTRAN 90 / 95

FORTRAN 90/95

representa el primer cambio significativo en 20 años del lenguaje programación estructurada.

FORTRAN

(FORmula TRANslation), colocándose así a la altura de los más modernos lenguajes de 

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.

2

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): [ PROGRAM

nombre del programa

] [

expresiones declarativas

] [

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.

3

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

). 4

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. 5

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 Multiplicación División 2**4 (2 4 ) 2*A B / Delta

+

Suma A+9 Resta X - Y 6

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

 Entradas y salidas de datos:

x = a + b

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 7

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’ 8

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

9

FORTRAN 90 / 95

Decisiones: Declaración

IF-THEN-ELSE IF

condition

THEN

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 10

FORTRAN 90 / 95

Operadores relacionales: .LT.

o < .LE.

o <= menor que a .LT.

5 menor o igual que b .LE.

4 .EQ.

o == igual .NE.

o /= .GT.

o > diferente mayor que b a .EQ.

.NE.

3 0 b .GT.

4  .GE.

o >= mayor o igual que Operadores lógicos: .NOT.

Negación lógica .AND.

.OR.

Intersección lógica Unión lógica x .GE.

0 .EQV. y .NEQV.

Equivalencia y no equivalencia 11

FORTRAN 90 / 95

Construcción

CASE

: Similar a

IF-THEN-ELSE

basados en un , permite seleccionar entre un número de situaciones o casos

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 ] 12

 Ejemplo:

FORTRAN 90 / 95

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 13

FORTRAN 90 / 95

DO con salida condicional (simulamos un WHILE o un REPEAT):

DO IF

(

expr lógica

)

exit

block

END DO

WHILE DO WHILE (

expr lógica

)

block

END DO O

DO

block

IF

(

expr lógica

)

EXIT END DO

REPEAT-UNTIL 14

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 15

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. 16

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 17

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 18

D i s e ñ o M o d u l a r D e s c e n d e n t e Programa Principal Abstracción Procedural 1 Abstracción Procedural 2 Abstracción Funcional 1 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 END SOUBROUTINE 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) RECURSIVE FUNCTION 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

 Ejemplo:

FORTRAN 90 / 95

módulo aparte USE utilerias IMPLICIT NONE INTEGER :: a, b READ *, a, b b = Pi MODULE utilerias REAL, PARAMETER :: pi =3.14159

CONTAINS SOUBROUTINE inter(x, y) INTEGER temp CALL inter(a,b) PRINT *, a,b INTEGER INTENT (IN) :: x 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 Int-Sub1 INCLUDE Externos.FOR

USE Module-Sub_1,Module Sub2 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

.F90 INCLUDE

del archivo que contiene los módulos, cuya extensión debe ser 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

 Ejemplo:

FORTRAN 90 / 95

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*, PRINT*, alumnos(i) % nombre ‘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 r p apunta a r , por lo que se le denomina apuntador o alias (atributo pointer).

es el objeto al que se refiere target).

p y está denominado como el objeto (atributo 37

FORTRAN 90 / 95

INTEGER, POINTER :: aa,bb,cc

INTEGER, TARGET :: xx,yy

aa

 

bb

 

cc

xx xx yy

aa

yy

38

FORTRAN 90 / 95

Lo que el código hace con las localidades de memoria es: aa xx aa bb xx cc aa yy 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: objeto.

significa que no apunta a ningún 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.

50

fin

51