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 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.
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
2**4 (24) + Suma A+9
* Multiplicación
2*A
- Resta X - Y
/ División
B / Delta
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
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
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 <
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
11
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]
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-lógica)
IF (expr-lógica) exit
block
block
END DO
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)
• INTENT (INOUT)
! producido
! 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
Di s e ñ o M o d u l a r
De 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 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

Ejemplo:
FORTRAN 90 / 95
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
FORTRAN 90 / 95

Ejemplo:
USE utilerias
IMPLICIT NONE
INTEGER :: a, b
READ*, a, b
b = Pi
CALL inter(a,b)
PRINT*, a,b
módulo 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
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


SAVE


Especifica que un módulo 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 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:
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 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.
50
fin
51
Descargar

FORTRAN90 - Servidor en Prueba