FORTRAN (guia rapida)

Anuncio
Programación Fortran
Hau Fung Moy
FORTRAN (guia rapida)
Fortran es lenguaje de propósito general, principalmente orientado a la
computación matemática, por ejemplo en ingeniería. Fortran es un acrónimo de
FORmula TRANslator, y originalmente fue escrito con mayúsculas como FORTRAN.
Fortran es un lenguaje de programación dominante usado en muchas
aplicaciones de ingeniería y matemáticas, por lo que es importante que se tengan
bases para poder leer y modificar un código de Fortran.
Formato de las líneas
1 2 3 4 5 6 7 8 ......................................................................... 70 ................. 72
Etiqueta
Sentencia Fortran
Campo de identific.
Las columnas 1 a 5: se reservan para la posible etiqueta identificadora de la instrucción. Una
C o un * en la columna 1 indicaría al compilador que la línea contiene
comentarios.
La columna 6:
es la de continuación, si una sentencia es demasiado larga para una sola
línea, puede continuarse en la siguiente colocando cualquier símbolo
distinto de un espacio en blanco o un 0 en la columna 6.
Las columnas 7 a 72: en ellas se escribirán las sentencias.
Las columnas 73 a 80: no se usan en modo interactivo. Tenían sentido cuando se trabajaba
con tarjetas perforadas.
Tipos de datos y constantes
- INTEGER (entero. Ej: 2, +4, -6)
- REAL (real simple precisión, 8 decimales. Ej: 3.5E+6  3.5x106)
- DOUBLE PRECISION (REAL*8) (16 decimales. Ej: 3.5D-6  3.5x10-6)
- COMPLEX (complejo simple precisión. Ej: 2.,3.1)
Para definir una constante de tipo complejo, colocaremos dos números reales entre
paréntesis y separados por una coma. Ejemplo: S = (0.0, 2.0)
- DOUBLE COMPLEX (COMPLEX*16) (complejo doble precisión)
- CHARACTER (alfanumérico. Ej: ‘AF123’)
- LOGICAL (lógico. Posibles valores .TRUE. y .FALSE.)
- Vectores y matrices: se declaran asignando tipo y a continuación los valores extremos de los
subíndices mediante la sentencia DIMENSION.
Ej: REAL X,Y,Z
DIMENSION X(20)  X(1), X(2), ... X(20) son reales.
DIMENSION Y(-5:20)  Y(-5), Y(-4), ... Y(20) son reales.
PÁGINA 1
Programación Fortran
Hau Fung Moy
DIMENSION Z(0:10,5)  El primer índice varía de 0 a 10 y el segundo de 1 a 5.
Para definir un vector o matriz del que no sabemos su dimensión:
En la definición de variables:
REAL nom_var [ALLOCATABLE (: , :)
dimens.)
Y cuando se conoce el tamaño: ALLOCATE (nom_var (dim1, dim2))
Al final del programa: DEALLOCATE (nom_var)
(2
Variables
Secuencia de letras y dígitos (primero letra). La asociación de tipo a una variable se realiza:
1- Por defecto: en función de la primera letra del nombre.
I, J, K, L, M, N  INTEGER
Otra letra
 REAL
Podemos alterar la asignación implícita mediante la sentencia IMPLICIT:
IMPLICIT REAL (A-C)  A, B, C reales.
IMPLICIT REAL*8 (X-Z)  X, Y, Z doble precisión.
IMPLICIT INTEGER (D-W)  D, ..., W enteras.
2- Explícitamente:
REAL*8 origen, imagen
CHARACTER*10 nombre, calle, ciudad
CHARACTER nombre*10, calle*20, ciudad*8
Expresiones aritméticas
1- Operadores aritméticos: +, -, *, /, ** (potencias).
A**-2  incorrecto (dos operadores seguidos)
A**(-2)  correcto
Las expresiones en las que sólo intervienen enteros dan como resultado otro número
entero. En la división entre enteros, si el cociente no es un entero, el resultado queda
truncado al entero de menor valor absoluto.
Conversión de tipos: 3 / 2 = 1 (operandos enteros, resultado entero)
2. + 1 / 3 = 2. + 0 = 2.0 (operandos real y entero, resultado real)
2 + 1. / 2 = 2 + 0.5 = 2.5
En general domina el de mayor rango: complejo + real = complejo
2- Jerarquía de operadores aritméticos:
( ( ) ) paréntesis de internos a externos
**
exponenciación
* y / con igual prioridad de izquierda a derecha
+ y - con igual prioridad de izquierda a derecha
Asignación de valores a las variables
1- En fase de ejecución del programa:
Sentencia de asignación:
Variable = Expresión
Ejemplos: X real X = 2.0 + 15. * 5.  asigna 77. a X
NOMBRE caracter NOMBRE=‘Antonio’
PÁGINA 2
Programación Fortran
Hau Fung Moy
Se produce conversión automática de tipos.
X real y X = 12 / 7  asigna 1. a X
I entera y I = 2.1 * 5.0  asigna 10 a I
2- En fase de compilación:
Las sentencias DATA y PARAMETER
DATA lista de variables / lista de valores/
Lógicamente habrá correspondencia de tipos. Ejemplos:
REAL X
CHARACTER nombre
INTEGER I
DIMENSION X(30)
DATA X, I, nombre / 30*0.0, 20, ‘LUIS’/  asigna el valor 0. a las 30
componentes del vector X, el valor 20 a I y el valor ‘LUIS’ a la variable nombre.
PARAMETER (variable = valor, variable = valor, ...)
Para definir constantes. Al asignar un valor mediante la sentencia PARAMETER, la
variable no puede cambiar de valor a lo largo del programa y pueden realizar
cualquier función reservada para las constantes, excepto la de etiqueta de instrucción.
Funciones matemáticas intrínsecas
LOG (x)
 logaritmo neperiano
SINH (x)
 seno hiperbólico
LOG10 (x)  log, en base 10
COSH (x)
 coseno hiperbólico
EXP (x)
 exponencial
TANH (x)
 tangente hiperbólica
SQRT (x)  raíz cuadrada
MAX (x1, x2, ..)  máximo
SIN (x)
 seno
MIN (x1, x2, ..)  mínimo
COS (x)  coseno
MOD (x, y)  resto de x / y
TAN (x)  tangente
REAL (x)
 convierte x a real
ABS (x)
 valor absoluto
CMPLX (x)  convierte x a complejo
ASIN (x)  arco seno
INT (x)
 trunca x a entero
ACOS (x)  arco coseno
NINT (x)
 redondea x a entero
ATAN (x)  arco tangente
Funciones para trabajo con cadenas
Subcadenas  nombre cadena (posición inicial : posición final)
para arrays
nombre cadena (índice) (pos ini : pos fin)
1  pos ini  pos final  longitud cadena
Concatenación  cadena1 // cadena2
LEN (cadena)  número de caracteres
INDEX (cadena, subcadena)  posición de comienzo de la primera comparecencia de
subcadena dentro de cadena, o 0 si la cadena no contiene a la subcadena.
CHAR (I)  caracter ASCII correspondiente al número I
ICHAR (caracter)  código ASCII del caracter especificado
Expresiones lógicas
PÁGINA 3
Programación Fortran
Hau Fung Moy
a operador b
a y b son expresiones constantes, variables numéricas o alfanuméricas. El resultado de la
expresión será .TRUE. o .FALSE.
Operadores relacionales:
.EQ.  igual a (==)
.GT.  mayor que (>)
.LT.  menor que (<)
.NE.  distinto a (/=)
.GE.  mayor o igual que (>=)
.LE.  menor o igual que (<=)
Operadores lógicos: Estos se utilizan en condiciones donde se necesita que se
cumplan dos o mas condiciones.
.AND.
.OR.
.NOT.
Jerarquía de operadores:
Operaciones aritméticas o entre cadenas.
Operadores relacionales de izquierda a derecha.
Operadores lógicos (.AND. tiene prioridad sobre .OR. y entre iguales, de izquierda a
derecha).
SENTENCIAS DE ENTRADA Y SALIDA.
Dirigida por lista o de formato libre
Entrada: Lectura
READ *, lista de variables separadas por comas. El * significa que se leerá por
pantalla.
READ (*,*), lista de variables
Ambas instrucciones son equivalentes. Al leer introducimos los valores separados por
comas o por <RETURN>. Los valores correspondientes a variables alfanuméricas
entre apóstrofos. Lectura desde teclado.
READ (número canal,*), lista de variables
leerá los datos desde el fichero abierto con el número de canal especificado, donde los
datos estarán a su vez separados por comas
Salida: Escritura
PRINT *, lista de constantes, variables o expresiones. El * significa que se escribira
por pantalla.
WRITE (*,*) lista de constantes, variables o expresiones. El primer * significa que se
escribirá por pantalla y el segundo sin formato.
Ambas expresiones son equivalentes y saldrán los resultados por pantalla.
PRINT número canal, lista
WRITE (número canal,*) lista
En este caso los resultados se escribirán en el fichero asignado al número de canal
especificado.
PÁGINA 4
Programación Fortran
Hau Fung Moy
Entradas y salidas mediante formato. La sentencia FORMAT
Entrada: Lectura
READ (*, número etiqueta)
lectura desde teclado. El * significa que se leerá por
pantalla y el número de etiqueta indicara el tipo de formato de lectura que se utilizara.
READ (número canal, número etiqueta)
Salida: Escritura
WRITE (*, número etiqueta) El * significa que se escribirá por pantalla y el número
de etiqueta indica el tipo de formato de escritura que aparecerá por pantalla.
WRITE (número canal, número etiqueta)
Tanto en entrada como en salida, el número de etiqueta corresponde al número de etiqueta de
una instrucción que contiene una sentencia FORMAT, en la que se especificará el modo
deseado de presentación de datos o resultados. En lugar del número de etiqueta podemos
utilizar las especificaciones de formato en la propia sentencia READ o WRITE y entonces la
pondremos entre apóstrofos.
Sentencia FORMAT:
FORMAT (especificación1, especificación2, especificación3, ...)
Las comas pueden ser sustituidas por /
Especificaciones de formato:
1- Numéricas:
Formato F: F w . d (para números reales en forma decimal)
w  número total de dígitos, incluido signo y punto decimal
d  número de decimales
Ej: WRITE (*,12) X }
12 FORMAT F6.2 } equivalente a WRITE (*,’(F6.2)’) X
Si escribimos con estas sentencias X=12.5 quedará +12.50
Formato I: I w (para números enteros)
w  anchura total del campo
Ej: READ (5,21) J
21 FORMAT I9
Si en el fichero 5 aparece el número 23 en las posiciones 4 y 5, es decir:
1 2 3 4 5 6 7 8 9 ....
2 3
el número 23 al ser leído con el formato I9 se interpretará como 230000, sin embargo
de haberse encontrado en las posiciones 8 y 9, se habría interpretado como 23.
Formato E:
E w.d (para reales en notación científica)
w  anchura total del campo, incluyendo signo de la base y del exponente, punto
decimal y la letra E. Al exponente se le asignan dos de estos dígitos.
PÁGINA 5
Programación Fortran
Hau Fung Moy
d  número de dígitos significativos detrás del punto decimal.
Formato D: D w.d (para doble precisión en científica)
El mismo razonamiento que para el formato E, pero se reservan tres dígitos para el
exponente (además del signo).
2- Descriptores de posición:
Formato X:
nX (salta n espacios)
Formato /:
/
(salta a la línea siguiente)
Formatos T: Tn (nos sitúa en la columna n)
TRn (salta n espacios hacia la derecha)
TLn (salta n espacios hacia la izquierda)
Formato $: Indica que el cursor se posicionara en la misma línea.
3- Alfanuméricos:
Formato A:
Aw
w  longitud de la expresión alfanumérica. Si no se especifica w, el ordenador lo
calcula automáticamente en función de la longitud expresada en la declaración
de variables alfanuméricas.
SENTENCIAS DE PROCEDIMIENTO Y CONTROL
A - PROGRAM nombre  Define nombre del programa a utilizar para ejecución.
STOP ‘mensaje’
 Final de ejecución. Mensaje en pantalla opcional.
END
 Indicativa de final de programa o de subprograma. Se
recomienda evitar que el programa llegue a ella.
B - Subprogramas:
SUBROUTINE nombre (lista de argumentos)
nombre  Define punto de entrada a subrutina. No se le asigna valor.
lista de argumentos  nombre de variables o “arrays”. Es opcional.
FUNCTION nombre (lista de argumentos)
lista de argumentos  en este caso obligatoria (al menos uno).
RETURN  Devuelve control desde subprograma a programa principal.
END  Indicativo de final.
CALL nombre (lista de argumentos)  Llamada a subrutina.
nombre  Nombre de la subrutina que debe ejecutarse.
lista de argumentos  constantes, variables o arrays que coinciden en número y tipo,
aunque no en nombre, con la lista de argumentos de la sentencia
SUBROUTINE correspondiente.
Nombre (lista de argumentos)  Llamada a función.
En realidad no es una sentencia, sino que actuará como un valor del tipo definido para
dicho nombre y por tanto ocupará, dentro del programa, las posiciones y tareas
asignadas a los mismos.
Nombre  Nombre de la función a ejecutarse. En este caso antes de la sentencia
PÁGINA 6
Programación Fortran
Hau Fung Moy
RETURN es recomendable asignarle valor a dicho nombre.
lista de argumentos  constantes, variables o “arrays” como en el caso de la
sentencia CALL.
NOTA: En ningún caso existe recursividad, es decir, un subprograma no puede llamarse a sí
mismo.
Ejemplo de posible estructura:
PROGRAM ejemplo
REAL a(11,5), d, x, ejemfun
INTEGER i
...
CALL ejemsub (a, i, 5)
...
D = 3 * ejemfun(x) - 4
...
STOP
END
SUBROUTINE ejemsub (p, j, t)
REAL p(11,5)
...
RETURN
END
FUNCTION ejemfun (x1)
...
ejemfun = expresión real
RETURN
END
SENTENCIAS DE CONTROL DE FLUJO
Estructuras de selección:
IF (condición o expresión lógica) THEN
...
ELSE IF (condición) THEN
...
ELSE IF (condición) THEN
...
ELSE
...
ENDIF
SELECT CASE (constante, variable o expresión entera, caracter o lógica)
CASE (valor1, valor2, ...)
...
CASE (valor1, valor2, ...)
PÁGINA 7
Programación Fortran
Hau Fung Moy
...
OTHERWISE- CASE DEFAULT
...
END SELECT
Estructuras de repetición:
DO (inicio, fin, paso)
..
WHILE (expresión lógica)
...
.
...
ENDDO
ENDWHILE
SENTENCIAS PARA EL CONTROL DE FICHEROS DE DATOS
Básicamente necesitaremos ficheros de acceso secuencial para lectura de datos y
almacenamiento de resultados, cuando el excesivo número de los mismos así lo aconseje. Por
ejemplo en el trabajo con matrices la escritura de resultados en un fichero nos permitirá
leerlos y escribirlos posteriormente con la presentación deseada.
OPEN (UNIT = u, FILE =‘nombre.ext’, ACCESS = acc, ...)  apertura.
u  número de canal que se usará posteriormente para indicar la vía de acceso a los
datos.
acc  ‘SEQUENTIAL’ o ‘DIRECT’
Se pueden incluir otras especificaciones:
STATUS = stat
stat  ‘OLD’ o ‘NEW’
ERR = sl
sl  etiqueta de la sentencia a ejecutar en caso de error en la apertura del
fichero.
REWIND (UNIT = u)  rebobinado del fichero. Volvemos al primer registro.
BACKSPACE (UNIT = u)  retrocede un registro en un fichero secuencial.
CLOSE (UNIT = u, ...)
NOTA: en las condiciones de un estructura IF o DO WHILE se puede utilizar la expresión
lógica EOF (número de unidad), que tomará el valor cierto cuando se alcance el final del
fichero. Ejemplo: DO WHILE (.NOT. EOF(8))
PÁGINA 8
Descargar