You are on page 1of 51

1

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

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):
[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.
4
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).

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

6
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 (2
4
) + Suma A+9
* Multiplicacin 2*A - Resta X - Y
/ Divisin B / Delta
7
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
8
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
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
nmero 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: 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
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 lgicos:
.NOT. Negacin lgica
.AND. Interseccin lgica
.OR. Unin lgica
.EQV. y .NEQV. Equivalencia y no equivalencia
12
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]
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-lgica) exit
block
END DO
O
DO
block
IF (expr-lgica) EXIT
END DO
WHILE
DO WHILE (expr-lgica)
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-lgica)
block
END DO
16
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.
17
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) ! producido
INTENT (INOUT) ! modificado
18
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

19
Di s e o M o d u l a r De s c e n d e n t e
Abstraccin Procedural 1 Abstraccin Procedural 2 Abstraccin Funcional 1
Programa Principal
20
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
21
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
22
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.
23
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

24
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.
25
FORTRAN 90 / 95
Ejemplo: mdulo aparte
USE utilerias MODULE utilerias
IMPLICIT NONE REAL, 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
26
FORTRAN 90 / 95
Mod-Sub1
Int-Sub1
Mod-Sub2
Int-Sub2
Progma Principal.f90
Int Sub1
Programas Externos.for
INCLUDE Externos.FOR
USE Module-Sub_1,Module-
Sub2
Int Sub2
27
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

28
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 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
29
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
30
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
31
CONTAINS
Especifica que un mdulo 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
32
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.


33
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 )
34
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 )
35
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
36
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
37
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 ! 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).
38
INTEGER, POINTER :: aa,bb,cc
INTEGER, TARGET :: xx,yy
aa xx
bb xx
cc yy
aa yy
FORTRAN 90 / 95
39
FORTRAN 90 / 95
xx
xx
yy
aa
aa
bb
aa
cc
Lo que el cdigo hace con las
localidades de memoria es:
40
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.
41
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
42

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
FORTRAN 90 / 95
43
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.

FORTRAN 90 / 95
44
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
FORTRAN 90 / 95
45
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.
46
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.
47
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
48
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.
49
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.

50
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.
51
fin

You might also like