ELEMENTOS DE FORTRAN 90
Conjunto de caracteres
Letras:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
Dígitos:
0 1 2 3 4 5 6 7 8 9
Caracteres especiales:
= + - * / ( ) , . ' : ! " % & ; < > ? $ _ espacio
Las letras mayúsculas son equivalentes a las minúsculas,
excepto en constantes de caracteres:
ABC es equivalente a abc
'IPN' es diferente a 'ipn'
En FORTRAN 77, los caracteres especiales válidos son:
= + - * / , . ' : $ espacio
? y $ no tienen algún significado especial
Nombres
Los nombres son usados en FORTRAN para identificar entidades
tales como variables o unidades de programa. Un nombre
comienza con una letra, puede ser hasta de 31 caracteres de
longitud y consiste de una combinación de letras, dígitos y el
carácter _. Ejemplos:
ARC FS0 Presion_de_vapor I Y MIN
En FORTRAN 77, los nombres tienen una longitud máxima de 6
caracteres y no pueden incluir al carácter _.
Etiquetas
1
Las instrucciones FORTRAN pueden tener etiquetas para su
identificación. Una etiqueta consiste de 1 a 5 dígitos, al
menos uno de ellos, diferente de 0. Ejemplos:
123 5000 9 0037 37
La etiqueta 0037 es equivalente a 37
Formas de escritura del código fuente
FORTRAN 90 ofrece dos formas de escribir el código fuente:
fija y libre.
Forma fija:
Columnas de la 1 a la 5 están reservadas para etiquetas. Las
etiquetas pueden contener espacios.
La columna 6 es usada para indicar la continuación de la línea
anterior mediante un carácter de continuación (cualquiera,
diferente del espacio o del 0). Puede haber hasta 19 líneas de
continuación. Las líneas de continuación no pueden estar
etiquetadas. Una instrucción END no puede ser continuada.
Columnas de la 7 a la 72 son usadas para las instrucciones
FORTRAN.
Las columnas de la 73 en adelante son ignoradas.
Los comentarios se indican comenzando una línea con una C o un
* en la columna 1. Adicionalmente, los comentarios al final
de una instrucción pueden ser escritos en cualquier columna
(excepto la 6), antecediendo a su texto un !. Las líneas de
comentarios no pueden ser continuadas.
El ; puede ser usado para separar varias instrucciones
escritas en una misma línea.
Los espacios son ignorados, excepto en constantes de
caracteres.
Forma libre:
Una línea puede tener una longitud hasta de 132 caracteres.
Los espacios son usados para separar nombres, constantes o
etiquetas de nombres, constantes o etiquetas adyacentes. Los
espacios también son utilizados para separar nombres de las
instrucciones FORTRAN.
Un ! inicia un comentario, incluyendo a los escritos al final
de una línea.
El ; puede ser usado para separar instrucciones en una misma
línea.
El & , empleado como último carácter (no espacio, no
2
comentario) de una línea, indica que ésta va a ser continuada
en la siguiente línea distinta de un comentario. Si un nombre,
instrucción o etiqueta no son terminados en una línea, el
primer carácter diferente del espacio en la línea de
continuación deberá ser un & seguido de los caracteres
restantes. Se permiten hasta 39 líneas de continuación.
Los comentarios no pueden ser continuados en otra línea.
FORTRAN 77 sólo admite el código fuente en forma fija, pero
excluye a los comentarios con ! y no es posible escribir más
de una instrucción en una línea.
c Ejemplo de código en forma fija
*234567
read *, a,b
c= (a+
1 b)/2 ! promedio de a y b
print *, a,b,c
end
! Ejemplos de código en forma libre
!
read *,a,b;c=(a+b)&
/2 ! promedio de a y b
print *,a,b,c
end
! Cálculo de la raíz de a/b
a= 5 ; b= 7.87
c= sqr&
&t(a/b) ! continuación de la función sqrt
print *,a,b,c
end
Tipos de datos intrínsecos
Los 5 tipos de datos intrínsecos de FORTRAN son: INTEGER,
REAL, COMPLEX, LOGICAL y CHARACTER. Los tipos de datos
intrínsecos tienen una o más clases. En Lahey FORTRAN 90, para
los tipos CHARACTER, INTEGER, REAL y LOGICAL, la clase indica
el número de bytes usados para representar cada dato. Para el
tipo COMPLEX, en Lahey FORTRAN 90, la clase es el número de
bytes usados para representar tanto a la parte imaginaria como
a la parte compleja. En la siguiente tabla se muestran las
clases disponibles en Lahey FORTRAN 90, así como sus
intervalos de representación y los dígitos decimales de
precisión correspondientes (para una IBM PC):
3
Tipo Clase Notas
INTEGER 1 intervalo:-127 a 127
INTEGER 2 intervalo:-32767 a 32767
INTEGER 4* intervalo:-2147483647 a 2147483647
REAL 4* intervalo:1.18X10-38 a 3.4X1038,7-8 dígitos de
precisión
REAL 8 intervalo:2.23X10-308 a 1.79X10308,15-16 dígitos
de precisión
COMPLEX 4* intervalo:1.18X10-38 a 3.4X1038,7-8 dígitos de
precisión
COMPLEX 8 intervalo:2.23X10-308 a 3.4X10308,15-16 dígitos
de precisión
LOGICAL 1 valores: .TRUE. y .FALSE.
LOGICAL 4* valores: .TRUE. y .FALSE.
CHARACTER 1* conjunto de caracteres ASCII
* clase por "default"
Literales
Una literal es una constante sin nombre. En FORTRAN 90 es
posible indicar la clase de la literal escribiendo el valor de
la constante seguida de _clase. Ejemplos de literales:
Literales enteras: 34, -578, +27, 0, 15872, 345_4, -12_1,
14_clase_entera (clase_entera es una constante entera con
nombre cuyo valor representa la clase del tipo de dato)
Literales reales: -7.87, .0003, 4.9e7, 1.51_8, -17.831_4,
1.25d-23, 3_class. La constante 4.9e7 representa a
4.9X107,mientras que 1.25d-23 equivale a 1.25X10-23 (así se
escriben en FORTRAN 77 las constantes de precisión doble)
Literales complejas: (-3.1, .07), (-1, +7), (4.9d5,-3.42_8)
Literales lógicas: .false. , .true., .true_1.
Literales de caracteres: 'ESIQIE IPN', "FORTRAN 90","I'am",
' ',cl_'xy'. Los caracteres que forman la literal deben
4
encerrarse entre " o entre '. FORTRAN 77 solo permite utilizar
al ' como delimitador en constantes de caracteres.
Parámetros de tipo
En FORTRAN 90 los tipos de datos pueden ser parametrizados. Lo
anterior implica que en una declaración de tipo se puede
especificar la clase en función de ciertos parámetros. Las
siguientes son funciones que manejan dichos parámetros:
KIND(X) Devuelve un resultado igual a la clase del tipo que
corresponde al dato X.
SELECTED_INT_KIND(r) El resultado es un entero igual a la
clase del tipo entero que "acomoda" todos los enteros n entre
-10 r<n<10r. Si tal clase no está disponible, el resultado es
-1. Si más de una clase está disponible, el resultado
corresponde a la clase con el intervalo de representación
menos amplio.
SELECTED_REAL_KIND(p,r) El resultado es un entero igual a la
clase del tipo real con precisión al menos de p dígitos
decimales e intervalo de representación de por lo menos
10-r<n<[Link] resultado es -1 si la precisión no es alcanzable
y -2 si el intervalo no está disponible. Ejemplos:
x=kind(1.75_8)
i=selected_int_kind(5)
f=selected_real_kind(10,200)
Para el tipo CHARACTER, existe un parámetro adicional: (LEN=
número máximo de caracteres que puede representar un objeto de
datos tipo CHARACTER).
Objetos de datos con nombre
Un objeto de datos con nombre, tal como una variable, una
constante o el resultado de una función, tiene las propiedades
del tipo de dato correspondiente. La información adicional
acerca de un objeto de datos con nombre, se conoce como
atributo. Los atributos pueden ser especificados en una
declaración de tipo o en declaraciones ex-profeso.
!n es un nombre asignado a la constante 50
5
!parameter es un atributo
integer (kind=4),parameter::n=50
integer (kind=4)::n !equivalente a la instrucción anterior
parameter (n=50)
real (kind=8)::uno,dos !uno y dos son nombres de variables
!equivalente a la instrucción anterior
double precision uno,dos
real x,y,z
complex a,b,c,d
logical respuesta
!len es la longitud en caracteres de la variable
character (len=50)::nombre
real (kind=selected_real_kind(12,200))::a,precisión_final
integer (kind=selected_int_kind(10))::i,j,k,iteraciones
integer,parameter::clase=selected_real_kind(5,50)
real (kind=clase)::x,y,z
read *,x,y
z=x+y+.007_clase
En FORTRAN 77 no hay clase ni atributos: el número de bytes
empleados para representar un dato se indican precedidos por
un *. Los valores por omisión son 4 bytes para los tipos
REAL, INTEGER o LOGICAL y 1 byte para el tipo CHARACTER:
real x,y,z
integer a,b,c
double precision z
parameter (n=75)
logical respuesta
character *40 direccion
real *4 a,b
6
real *8 z
integer *2 m,n
logical *1 logic
complex angulo,omega
Tipo implícito de objetos de datos con nombre
En ausencia de una instrucción de declaración explícita, el
tipo de un objeto de datos con nombre es determinado por la
primera letra de su nombre; si es I,J,K,L,M o N el tipo es
entero de la clase por "default", si es diferente de I,J,K,L,M
o N entonces el tipo es real de la clase por "default":
a,x_10,f,presión_osmotica !son variables de tipo real
i,n_50,n_alumnos,K !son variables de tipo entero
Instrucción IMPLICIT
Permite especificar la regla implícita para determinar el tipo
de un objeto de datos con nombre.
!los objetos cuyo nombre comience con i,j,k,l,m son reales
implicit real (i-m)
implicit double precision (a-h,o-z)
implicit real(i-n),integer(o-z)
!los objetos cuyo nombre empiece con f o v son del tipo
!complex
implicit complex (f,v)
!los objetos cuyo nombre comience con a,b,c, o f son del tipo
!lógico
implicit logical (a-c,f)
implicit real (kind=8) (d-p,z)
implicit character (kind=1,len=50) (n,s)
!deshabilita las reglas para el tipo implícito de variables
implicit none
7
En FORTRAN 77 no se permite la declaración IMPLICIT NONE.
Operadores aritméticos
Los operadores aritméticos disponibles en FORTRAN son:
** €
*,/ ‚
Exponenciación
+,- ‚
Multiplicación, división prioridad
Suma, resta
En expresiones con dos o más operadores de igual jerarquía, la
expresión es evaluada de izquierda a derecha. La
exponenciación, la cual es evaluada de derecha a izquierda, es
la excepción de la regla anterior. Ejemplos:
A + B/2
1) División de B entre 2
2) Al resultado de 1), se le suma A
Y**X/5*F
1) Se eleva Y a la potencia X
2) División del resultado de 1) entre 5
3) Multiplicación del resultado de 2) por F
3**4**2
1) 4 es elevado a la segunda potencia
2) 3 es elevado a una potencia igual al resultado de 1)
6 + G/N - K
1) División de G entre N
2) Al resultado de 1) se le suma 6
3) Resta de K al resultado de 2)
El orden de ejecución puede cambiarse con el uso de
paréntesis:
(A + B)/2
1) Suma de A y B
2) el resultado de 1) es dividido entre 2
Y**X/(5*F)
8
1) Multiplicación de 5 por F
2) Y es elevado a la potencia X
3) División del resultado de 2) entre el de 1)
(3**4)**2
1) 3 es elevado a la cuarta potencia
2) el resultado de 1) es elevado al cuadrado
6 + G/(N - K)
1) Resta de K a N
2) División de G entre el resultado de 1)
3) 6 es sumado al resultado de 2)
Asignación
El valor de la expresión, constante o variable colocada a la
izquierda del operador de asignación = es asignado a la
variable especificada a la izquierda del mismo:
A=B+15.7;C='ESIQIE'
I=I+1
7=45/A;F=(15.7_4,3.1E2);L=H
J=2/3 !0 es asignado a J
F=2./3 !.6666... es asignado a F
complex Z
Z=(-15.1) !-15.1+0i es asignado a Z
X=A**3 !A*A*A es asignado a X
X=A**3.0 !e3lnA es asignado a X
real (kind=8)::F10,Z
Z=95.7
A=F10
real(kind=selected_real_kind(12,300))::f
complex::n
n=(3,1)*(15+f-A)
9
Funciones de biblioteca
Son aquellas provistas por el compilador FORTRAN 90. También
se conocen como funciones intrínsecas.
Y=SIN(4*ATAN(1))
prueba=dexp(1.27_8)
Li=4*atan(1.0)
mayor_elemento=max(a,b,c,d,)
menor_elemento=min(x,y,z)
a=abs(10/n)
prueba=dexp(1.27_8)
z=mod(5,2)
El compilador supone que los argumentos de las funciones
trigonométricas y los resultados devueltos por sus inversas,
están dados en radianes. En el apéndice aparece una lista de
las funciones de biblioteca soportadas por FORTRAN 90.
Entrada/Salida dirigidas por lista
La instrucción read * permite leer los valores que serán
asignados a una lista de variables. Los datos serán
proporcionados a través de la unidad estándar de lectura (el
teclado de la computadora), separados entre sí por comas o por
espacios. Print * o write(*,*) imprimen en la unidad estándar
de escritura (la pantalla de la computadora) los valores de
una lista de variables, constantes o expresiones.
read *,a,b,j
print *,a,b,k_minima
read * c,h,temperatura
print *,'Pi=',Pi,'ángulo=',&
asin(x13)
write(*,*)a+b,"FORTRAN 90",17.5;print *,'ESIQIE'
10
print * !impresión de una línea en blanco
Instrucción PROGRAM
Especifica un nombre lógico para un programa principal. Por
ejemplo:
program Eliminacion_de_Gauss
program principal
El nombre dado en una instrucción program no podrá ser
empleado como nombre de un subprograma externo o de un módulo
en el mismo programa ejecutable. Si se omite la instrucción
PROGRAM, en Lahey FORTRAN 90, el compilador le asignará el
nombre _LF_MAIN.
Instrucciones STOP y END
La instrucción STOP termina la ejecución de un programa:
stop
stop 325
stop 'FIN DE PROGRAMA'
En los dos últimos ejemplos se especifica; ya sea un número de
1 a 5 dígitos o una cadena de caracteres, que son impresos al
ser ejecutado el STOP. El STOP que precede a la instrucción
END es opcional.
El END termina un programa y siempre debe ser la última
instrucción de este. Solo se permite un END en un programa:
end
end program muestra
program hipotenusa
read *,a,b;c=sqrt(a**2+b**2) !cálculo de la hipotenusa c de
print *,'a=',a,'b=',b,'c=',c !de un triangulo con catetos a
end program hipotenusa !y b
program abc
real::x=3.15,y=-7.38,z !En una declaración de tipo,es posible
z=x+y !asignar valores a las variables
11
print *,x,y,z
end
En FORTRAN 77 sólo se permiten STOP y END sin especificar más
información.
Ejercicio
Escriba un programa que determine el área total y volumen de
un cilindro de radio y altura conocidos.
área total = 2*área de la base + área lateral
área de la base = ð*radio2
área lateral = 2*ð*radio*altura
volumen = area de la base*altura
Seudocódigo#
!Este programa determina el volumen y el área total de
!un cilindro,conocidos el radio r y la altura h
real Pi,r,h,area_base,area_lateral,area_total,volumen
Pi=3.145192
lee r,h !lectura del radio y la altura
area_base=Pi*r**2
area_lateral=2*Pi*r*h
area_total=2*area_base+area_lateral !cálculo del area total
volumen=area_base*h !y del volumen
!impresión de resultados
escribe "radio=",r,'altura=',h,'área total=',area_total,
'volumen=',volumen
fin
#
En la elaboración de los seudocódigos, se utilizan las
reglas propuestas por Guillermo Levine G., en su libro
"Introducción al Computación y a la Programación
Estructurada",Segunda Edición.
Codificación en FORTRAN 77
F77L-EM/32 FORTRAN 77 Version 5.11 (compiling for the
80386/80486) Wed Mar 5 01:33:37 1997 Page: 1
Copyright(c) 1988-1992, Lahey Computer Systems, Inc. ALL RIGHTS
RESERVED
PROGRAM AREA , Opciones de Compilación:
/N0/N2/N4/N7/NA2/NB/NC/NC1/ND/NF/H/NI/NK/NL/P/NQ1/NQ2/NQ3/R/S/NT/
NV/W/NX/NZ1
Listado de fichero fuente
12
1 program area
2 c
3 c Este programa determina el volumen y el area
c total de
4 c un cilindro,conocidos el radio r y la altura
c h
5 *
6 parameter (Pi=3.141592)
7 real r,h,vol,areat,areab,areal
8 c lectura del radio y la altura
9 read *,r,h
10 areab=Pi*r**2
11 areal=Pi*2*r*h
12 c calculo del area total
13 areat=2*areab+areal
14 c calculo del volumen
15 vol=areab*h
16 c impresion de resultados
17 print *,'radio=',r,'altura=',h
18 print *,'area total',areat,
19 1 'volumen=',vol
20 stop
21 end
Codificación en FORTRAN 90
Lahey Fortran 90 Compiler Release 3.00c Wed Mar 5
01:39:58 1997 Page: 1
Copyright (C) 1994-1996 Lahey Computer Systems. All rights reserved.
PROGRAM AREA Compiling Options: -nchk -ndal -ndbl -nf90 -nfix -ng -hed -nin -inln
-lst -pca -stchk -nsyn -ntrap -nvax -w -nwo
-nxref
------------------------------------------------ Source Listing -------------------------------------------
- -
1 program area
2 ! Este programa determina el volumen y el area total de
3 ! un cilindro,conocidos el radio r y la altura h
4 !
5 real,parameter::Pi=3.141592_4
6 real::r,h,volumen,area_total,area_base,area_lateral
7 read *,r,h !lectura del radio y la altura
8 area_base=Pi*r**2
9 area_lateral=Pi*2*r*h
10 area_total=2*area_base+area_lateral !calculo del area total
11 volumen=area_base*h !calculo del volumen
12 ! impresion de resultados
13 print *,'radio=',r,"altura",h;print *,'area total=',area_total,&
14 'volumen=',volumen
15 stop 'FIN DE PROGRAMA'
16 end program area
Bytes of stack required for this program unit: 28.
13
14
15