Está en la página 1de 51

Lenguajes de Programacin

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

FORTRAN 90/95 representa el primer cambio


significativo en 20 aos del lenguaje FORTRAN
(FORmula TRANslation), colocndose as a la
altura de los ms modernos lenguajes de
programacin estructurada.
FORTRAN fue el primer lenguaje denominado
de alto nivel, haciendo posible el uso de
nombres simblicos para representar
cantidades y frmulas matemticas 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 ejecucin]
[CONTAINS
subprogramas internos]
END [PROGRAM [nombre del programa]]

Los enunciados son la base del programa y a


excepcin del enunciado de asignacin, todos
empiezan con una palabra clave.

FORTRAN 90 / 95

Los comentarios se escriben anteponiendo un


signo de cierre de admiracin (!)

Si una lnea del programa es muy larga, sta


puede continuar en la lnea siguiente colocando
al final de la primera lnea el signo &:
A = 174.6 *
&
(T 1981.2) **3

Tipos de Datos: Se dividen en 2 clases, los


numricos (INTEGER, REAL y COMPLEX) y los
no numricos (CHARACTER y LOGICAL).
4

FORTRAN 90 / 95

Asociado al tipo existen varias clases de ellos,


de acuerdo al nmero 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 alfanumricos y deben empezar con
una letra (excepto en las cadenas de caracteres,
FORTRAN 90/95 no es sensible a maysculas
o minsculas): MINOMBRE significa lo mismo
que MiNombre.
5

FORTRAN 90 / 95

Regla implcita 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 lnea:
IMPLICIT NONE
Operadores:
** Exponencial
2**4 (24) + Suma A+9
* Multiplicacin
2*A
- Resta X - Y
/ Divisin
B / Delta
6

FORTRAN 90 / 95

Asignacin numrica: El propsito es calcular el


valor de una expresin numrica 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
declaracin 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 declaracin 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)
Tambin podemos usar la declaracin WRITE:
OPEN ( 2, file=prn)
WRITE (2, *) Esto se enva a la impresora
PRINT*, Esto se enva 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
nmero de declaraciones, las cuales se
ejecutan repetidamente dependiendo del valor
de j y k.
DO i=1, 10
PRINT*, i
END DO

FORTRAN 90 / 95

Decisiones: Declaracin IF-THEN-ELSE


IF condition THEN
block 1
[ELSE
block E]
END IF
La expresin parameter:
se utiliza como expresin de inicializacin
REAL, PARAMETER :: pi=3.141593
INTEGER, PARAMETER :: dos=2
10

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 lgicos:
.NOT.
Negacin lgica
.AND.
Interseccin lgica
.OR.
Unin lgica
.EQV. y .NEQV. Equivalencia y no equivalencia

11

FORTRAN 90 / 95

Construccin CASE:
Similar a IF-THEN-ELSE, permite seleccionar
entre un nmero 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]

12

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
13

FORTRAN 90 / 95

DO con salida condicional (simulamos un


WHILE o un REPEAT):
WHILE
DO
DO WHILE (expr-lgica)
IF (expr-lgica) exit
block
END DO
block
END DO

O
DO
block
IF (expr-lgica) 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-lgica)
block
END DO
15

FORTRAN 90 / 95

Los Programas diseados con los principios de


programacin estructurada y un diseo modular
descendente son estructurados por medio de
abstracciones procedurales y funcionales. Estos
procedimientos se comunican con el programa principal
de manera especfica, a travs del paso de datos y son
invocados o llamados desde ste.

Existen dos formas de estructurar el programa a travs


de : funciones (abstracciones-funcionales) y subrutinas
(abstracciones-procedurales).

El paso de datos se conoce como paso de parmetros,


estos pueden ser pasados por referencia o por valor. 16

FORTRAN 90/95
Paso de parmetros

por referencia:

Es un mecanismo que permite el paso de un


parmetro utilizando una direccin 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)
INTENT (INOUT)

! producido
! modificado
17

FORTRAN 90/95

Parmetros por valor:

Es un mecanismo que permite el paso de un


parmetro utilizando su valor con el fin de evitar su
modificacin, de esta forma al terminar de ejecutarse
el subprograma y retornar el control al programa
principal el valor de ese parmetro contina siendo el
mismo. En otras palabras el valor de este parmetro
slo puede ser utilizado.
INTENT (IN)

! Slo 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

P r o g r a m a P rin c ip a l
A b s t r a c c i n P r o c e d u r a l 1

A b s t ra c c i n P ro c e d u r a l 2

A b s t r a c c i n F u n c i o n a l 1

19

FORTRAN 90 / 95
Ejemplo

de funcin:

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

Recursin: Muchas funciones matemticas


pueden estar definidas recursivamente, es decir
que estn definidas en trminos de casos ms
simples de ellas mismas.

Para implementarlas es necesario que una


funcin 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 funcin 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

Mdulos: son contenedores fsicos que permiten


albergar expresiones declarativas o
abstracciones procedurales o funcionales. Estos
mdulos pueden ser compilados por separado o
pueden estar dentro de un programa:

Puede contener ms de una abstraccin funcional o


procedural, o
Puede tener expresiones declarativas y/o de
especificacin accesibles a todas las unidades del
programa.
24

FORTRAN 90 / 95

Ejemplo:
USE utilerias
IMPLICIT NONE
INTEGER :: a, b
READ*, a, b
b = Pi
CALL inter(a,b)
PRINT*, a,b

mdulo aparte
MODULE utilerias
REAL, PARAMETER :: pi =3.14159
CONTAINS
SOUBROUTINE inter(x, y)
INTEGER temp
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
Mod-Sub1
Int-Sub1

Progma Principal.f90
INCLUDE Externos.FOR
USE Module-Sub_1,ModuleSub2

Int Sub1
Int Sub2
Mod-Sub2
Int-Sub2

26

FORTRAN 90 / 95
Compilacin Separada:
Para compilar un mdulo por separado, es
necesario agrupar todos las abstracciones
procedurales y funcionales dentro de un archivo
independiente cuya extensin debe ser .FOR
Finalmente, dentro del PROGRAMA principal se
debe declarar un INCLUDE del archivo que
contiene los mdulos, cuya extensin 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 Impresin
!Rutinas
!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

SAVE

Especifica que un mdulo o procedimiento contiene


procedimientos internos
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 expresin declara un arreglo


REAL, DIMENSION(10) :: x
x es el arreglo con 10 elementos,
el arreglo puede tener ms de una dimensin:
REAL, DIMENSION(2,3) :: num
num, es un arreglo de 2 dimensiones, la primera
dimensin tiene una extensin de 2 y la segunda
tiene una extensin de 3.

32

FORTRAN 90 / 95

Arreglos utlizando (memoria dinmica)


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
mximo nmero de elementos predeterminados) es
usando memoria dinmica de la siguiente manera:
REAL, DIMENSION(:), ALLOCATABLE :: x
x no tiene un tamao especfico hasta que aparece una
declaracin del tipo:
ALLOCATE( x(n) )
Cuando ya no se necesite, se remueve la localidad de
memoria con la declaracin:
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]
definicin de componentes
END TYPE [nombredeltipo]
De manera predeterminada un tipo y todos sus
componentes son accesibles (acceso pblico)
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

! Declaracin 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 implementacin de los apuntadores en FORTRAN se realiza
mediante las siguientes declaraciones:
POINTER, se usa para declarar a una variable tipo puntero.
Con la instruccin TARGET, se restringen las variables a las que un
puntero puede apuntar.
REAL, POINTER :: p
! mismo tipo

! p apunta a un objeto del

REAL, TARGET :: r = 13

! r es una variable que puede ser


! apuntada por una variable de tipo
! puntero

pr
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 cdigo hace con las
localidades de memoria es:
aa

xx

aa
bb

xx

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 declaracin


Nulo o desasociado: significa que no apunta a ningn
objeto.
La asociacin entre variables POINTERs y TARGETs se
rompe con el uso de la siguiente instruccin.
NULLIFY (p1)

asociado: indica si el puntero posee un estado de


asociacin.
nulo o desasociado se puede verificar con la funcin

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 dinmica, 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 dinmica):
REAL, DIMENSION (:), POINTER :: x
INTEGER, DIMENSION (:,:), ALLOCATABLE : : a
41

FORTRAN 90 / 95

Los apuntadores tambin pueden definirse para


apuntar a tipos derivados de datos:

TYPE (empleado), POINTER :: qqq


qqq es una variable apuntador que seala 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 declaracin 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 estn:

el gran conjunto de procedimientos intrnsecos,


incluyendo las funciones elementales que operan en
todos o en elementos seleccionados de los argumentos
(arreglos).

Otro de sus grandes potenciales es la inclusin de


estructuras de control bien definidas, y formas de
tipificar las variables que se utilizan, as como
mecanismos de abstraccin que permiten
aprovechar todo el potencial de los ltimos
avances de anlisis y diseo de ingeniera de
software.
45

FORTRAN 90 / 95
Slo mencionaremos algunas de ellas:

Funciones numricas elementales:


- ABS(A): Valor absoluto del nmero entero, REALo
complejo A.
- ACOS(X): Coseno inverso (arco coseno)
- AIMAG(Z): Parte imaginaria.
- COS(X): Coseno
- COSH(X): Coseno hiperblico
- EXP(X): Funcin exponencial.
- LOG(X): Logaritmo natural.
46

FORTRAN 90 / 95

Funciones elementales para el uso de caracteres :


- ACHAR(I): Caracter con cdigo ASCII I para I en el rango
de 0-127.
- CHAR(I [,KIND]): Caracter en la posicin I de la
secuencia obtenida por el sistema con un tipo dado.
- ICHAR(C): Posicin del caracter C en la secuencia
obtenida por el sistema

47

FORTRAN 90 / 95

Funciones no elementales en el uso de caracteres


- LEN(STRING): (Funcin informativa) nmero de
caracteres en STRING si es escalar o en un elemento de
STRING si ste es un arreglo.
- REPEAT(STRING, NCOPIES): Concatenacin 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


numricas: Son funciones relacionadas con los
modelos (expresin matemtica) usados para
representar enteros y reales internamente.
- DIGITS(X): Nmero de dgitos significativos en el
modelo del nmero REALo entero X.
- MAXEXPONENT(X): Mximo exponente (entero) en el
modelo que incluye al nmero REALX.
- FRACTION(X): Parte fraccionaria del modelo para X.

49

FORTRAN 90 / 95

Adems existen otras funciones sobre:


- Manipulacin de Bits
- Multiplicacin de Vectores y Matrices
- Reduccin de arreglos
- Informacin de arreglos e informacin de cualquier tipo
- Manipulacin y construccin de arreglos
- Lgica Elemental
- Relacionadas al tipo de variable

Tambin se incluyen Subrutinas intrnsecas no


elementales sobre:
- Nmeros aleatorios y el reloj de tiempo real.
50

fin

51

También podría gustarte