Documentos de Académico
Documentos de Profesional
Documentos de Cultura
09 Fortran90 95
09 Fortran90 95
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
FORTRAN 90 / 95
FORTRAN 90 / 95
FORTRAN 90 / 95
FORTRAN 90 / 95
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
FORTRAN 90 / 95
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
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
FORTRAN 90/95
Paso de parmetros
por referencia:
! producido
! modificado
17
FORTRAN 90/95
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
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
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
PARAMETER
FORTRAN 90 / 95
32
FORTRAN 90 / 95
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
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
REAL, TARGET :: r = 13
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
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
FORTRAN 90 / 95
TYPE empleado
INTEGER :: numero
CHARACTER (32) :: nombre
FORTRAN 90 / 95
43
FORTRAN 90 / 95
FORTRAN 90 / 95
FORTRAN 90 / 95
Slo mencionaremos algunas de ellas:
FORTRAN 90 / 95
47
FORTRAN 90 / 95
FORTRAN 90 / 95
49
FORTRAN 90 / 95
fin
51