Formatos Entrada y Salida Fortran
Formatos Entrada y Salida Fortran
Formatos Entrada y Salida Fortran
8.1.-
Captulo 8
El presente capitulo va a estar dedicado exclusivamente a presentar las diferentes maneras que FORTRAN ofrece
para leer y escribir datos de cualquier tipo mediante un formato establecido por el programador. Las sentencias
READ*, y PRINT*, ya han sido aplicadas reiteradamente en captulos precedentes y su funcionamiento es
conocido. Para ambas sentencias la lectura y escritura se realizan de una manera libre (sin formato) y por lo tanto el
usuario nicamente tiene presente el tipo (real, entero, etc.) del dato que el ordenador espera procesar; sin embargo,
hasta el momento nunca se ha fijado, por ejemplo, cuantos decimales deban aparecer en el resultado o si el dato
ledo estaba expresado en forma exponencial. Todos estos aspectos van a ser ahora presentados y una vez finalizado
el captulo se tendr un control total sobre la forma de la informacin de entrada y de salida en un programa
FORTRAN.
Recordando las sentencias READ* y PRINT*, sin formato, para la lectura y escritura de un numero real por
pantalla tenemos que:
SENTENCIA
ACCION
READ *,A
Leer una variable A con formato libre por pantalla, el usuario podr introducir el
dato de manera libre. Esto significa que por ejemplo el valor 1.437 podr introducirlo
de muchas formas posibles, por ejemplo 1.437 0.1437E+01.
PRINT*,A
Por otro lado las sentencias READ(10,*) y WRITE(10,*) sin formato, para la lectura y escritura de un numero real
por fichero tenemos que:
SENTENCIA
ACCION
READ(10,*)A
WRITE(10,*)A
El smbolo *, contenido entre los parntesis, significa la ausencia de formato en la sentencia que lo contiene, este
smbolo es sustituido por el nmero de etiqueta que contiene el formato establecido cuando se desea una ejecucin
con formato. A continuacin se muestra la descripcin de ambas sentencias:
Etiqueta
READ(Unidad, Etiqueta)Variable
FORMAT(Cdigo de formato)
Ejemplo:
Grupo de Electromagnetismo
Captulo 8
Etiqueta
WRITE(Unidad, Etiqueta)Variable
FORMAT(Cdigo de formato)
Ejemplo:
8.2.-
W R
CODIGOS DE FORMATO
Una vez conocida la estructura bsica de la lectura y escritura con formato, ahora es preciso conocer de manera
detallada los numerosos cdigos de formato que FORTRAN permite para trabajar con los diferentes tipo de datos y
su posicionamiento. En los dos ejemplos anteriores han sido incluidos dos cdigos de formato I2 y E9.3 que ahora
podrn ser comprendidos. Como ya hemos visto los cdigos de formato pueden ser incluidos en la sentencia de
entrada de datos READ o en la de salida WRITE, este hecho implica ciertas diferencias de comportamiento de los
cdigos que sern tratadas de manera individual. Por otro lado existen dos grandes grupo de cdigos uno de ellos
dedicado al tratamiento de datos y otro dedicado al posicionamiento de esos datos.
DATOS
FORMATO DE ENTEROS
CODIGO
TIPO DE DATO
FORMA
ENTERO
Ia
DESCRIPCION
I : Carcter de control que indica tratamiento de enteros.
a : Entero que indica la longitud del dato numrico, debe
incluirse signo.
10
INTEGER A,B
READ(*,10)A,B
FORMAT(I5,I4)
Captulo 8
BB576B-4B
Siendo B un espacio en blanco.
50
La salida ser:
B234BB12B-90
Siendo B un espacio en blanco.
Como puede observarse los nmeros han sido escritos de manera continua respetando la longitud de cada uno de
ellos. Por otro lado para formatos repetitivos como el caso anterior, la sentencia FORMAT podra haberse
sustituido por:
50
FORMAT(3I4)
Lo que habra simplificado la sentencia manteniendo el resultado final. Esta simplificacin tambin podr aplicarse
a los restantes formatos.
Existen por otra parte algunas consideraciones interesantes que pueden verse en el siguiente ejemplo:
Ejemplo:
INTEGER S,C
S=23234
C=12
WRITE(*,50)S
WRITE(*,50)C
FORMAT(I4)
50
La salida ser:
****
BB12
Obsrvese que:
Una misma sentencia de formato ha sido empleado por varias sentencia WRITE.
Grupo de Electromagnetismo
Captulo 8
FORMATO DE REALES
CODIGO
TIPO DE DATO
FORMA
REAL
Fa.b
DESCRIPCION
F : Carcter de control que indica tratamiento de reales
con coma flotante.
a : Entero que indica la longitud total del dato numrico,
debe incluirse signo y el espacio ocupado por la coma.
b : Entero que indica el numero de cifras decimales que se
desea
10
ENTRADA:
B3.2B-1234B6789B
Siendo B un espacio en blanco.
VALOR:
X=3.2
Y=-123.4
Z=67.89
10
20
WRITE(*,10)X
WRITE(*,20)Y,Z
FORMAT(F9.3)
FORMAT(F10.2,F6.2)
SALIDA:
BB5237.00
BBB-177.12B45.00
Siendo B un espacio en blanco.
Grupo de Electromagnetismo
Captulo 8
X carece de punto decimal, sin embargo al escribirlo con formato F9.3 se expresa como BB5237.000
Al expresar el numero con un numero de dgitos decimales menor los que pose el dato se produce un
redondeo al valor mas prximo. Y ha sido redondeado hacia abajo y Z hacia arriba.
FORMATO DE REALES
CODIGO
TIPO DE DATO
FORMA
REAL
Ea.b
DESCRIPCION
E : Carcter de control que indica tratamiento de reales
con exponente.
a : Entero que indica la longitud total del dato numrico,
debe incluirse signo, el dgito que precede a la coma, el
espacio ocupado por el punto decimal, la mantisa y el
exponente.
b : Entero que indica el numero de cifras dedicadas a la
mantisa.
10
REAL X,Y,Z
READ(*,10)X,Y,Z
FORMAT(F10.5,F13.4,F11.5)
10
20
REAL X,Y,Z
X=5237098
Y=-177.1203E-2
Z=0.12345E+2
WRITE(*,10)X
WRITE(*,20)Y,Z
FORMAT(E10.3)
FORMAT(E10.2,E9.4)
SALIDA:
B0.524E+07
B-0.18E+07*********
Siendo B un espacio en blanco.
Captulo 8
NOTA: Para el caso de estar trabajando en DOBLE PRECISION el formato E se debe sustituir por el formato D
el cual sigue las mismas reglas que el E.
TIPO DE DATO
FORMA
DESCRIPCION
SP
SS
S
REAL
O
ENTERO
SP
SS
S
10
SALIDA:
BB3+34.56+56.78
Siendo B un espacio en blanco.
El efecto de la inclusin del signo positivo tiene efecto sobre las variables que se presentan con los formatos
situados a la derecha del cdigo SP.
Si el formato es muy largo y contiene los cdigos de muchas variables y se desea en algunas de ellas
restablecer la opcin de no incluir el signo, se debe incluir el cdigo SS, con lo que las variables con formato
situadas a la derecha ya no aparecern con signo +. El restablecimiento de la inclusin del signo se activara
incluyendo el cdigo S.
Ejemplo:
10
WRITE(*,10)A,B,C,D,E
FORMAT(F5.2,SP,F6.2,SS,F6.2, F6.2,S,F6.2)
Grupo de Electromagnetismo
Captulo 8
TIPO DE DATO
FORMA
DESCRIPCION
BZ
BN
CUALQUIERA
BZ
BN
CODIGO
INTEGER X,Y,Z
READ(*,10)X,Y,Z
FORMAT(I4,BZ,I6,BN,I4)
10
SALIDA:
X=0
Y=450789
Z=723
El campo de X esta completamente vaco luego se interpreta como un cero que es la opcin por defecto de
FORTRAN.
Y presenta un espacio en blanco intercalado, sin embargo su cdigo de formato esta afectado por el cdigo
BZ luego el espacio se interpretara como un cero.
Z tambin presenta un espacio en blanco sin embargo ahora su cdigo de formato esta afectado por el cdigo
BN por lo que el espacio se omitir.
TIPO DE DATO
Grupo de Electromagnetismo
FORMA
DESCRIPCION
LOGICO
Captulo 8
La
CODIGO DE LECTURA
L9
L9
L3
L7
VALOR ADQUIRIDO
.TRUE.
.TRUE.
.FALSE.
.FALSE.
10
20
SALIDA:
BBT
BBBTBF
TIPO DE DATO
FORMA
CARACTER
Aa
DESCRIPCION
A : Carcter de control que indica tratamiento de caracteres.
a : Entero que indica la longitud total del dato tipo carcter.
Captulo 8
READ(*,10)X,Y
FORMAT(A4,A6)
10
VALOR:
X='HOLA'
Y='DESTOR'
Obsrvese con detenimiento lo siguiente:
La entrada no ha requerido introducir los caracteres entrecomillados como se ha hecho hasta ahora, esta es
una gran diferencia con respecto a la entrada de caracteres bajo formato libre.
En caso de leer con formato de longitud inferior a la longitud real del dato, se almacenaran las posiciones
establecidas por el formato empezando por al izquierda.
10
11
20
SALIDA:
HOLA
ESTOY APRE
BBBBBFORTRAN
Obsrvese con detenimiento lo siguiente:
En caso de que el formato establecido en FORTRAN tenga una longitud superior al de la variable se
rellenar el campo sobrante empezando por la izquierda con espacios en blanco.
TIPO DE DATO
FORMA
CARACTER
aH
DESCRIPCION
H : Carcter de control que indica tratamiento de caracteres.
a : Entero que indica la longitud total del dato tipo carcter.
Captulo 8
WRITE(*,10)Y
FORMAT(A18)
10
SALIDA:
ESTOY EN SANTANDER
En caso de emplear el cdigo H, el cdigo anterior se transformara en:
10
WRITE(*,10)
FORMAT(18HESTOY EN SANTANDER)
CODIGOS DE FORMATO DE
POSICIONAMIENTO
Con los formatos anteriores se ha resuelto el problema de la presentacin y adquisicin de datos de cualquier tipo
bajo un formato establecido, sin embargo los datos deben estar ordenados por columnas, separados por varios
espacios o tabuladores y situados en diferentes filas segn lo requiera una mnima comprensin de la informacin,
este problema es ya de posicionamiento del dato. A continuacin ser presentarn este tipo de formatos:
En este tipo de formatos no es preciso diferenciar su comportamiento cuando se emplean en la sentencia READ y
en la sentencia WRITE puesto que su funcin no varia.
FORMA
aX
DESCRIPCION
X : Carcter de control que indica tratamiento de espacios el lnea.
a : Entero que indica numero de espacios que han de incluirse.
Ejemplo:
ENTRADA:
BBB12.34BBBBB567BBBB8.98
Para realizar una lectura correcta se debera aplicar el siguiente formato:
10
INTEGER B
REAL
A,C
READ(*,10)A,B,C
FORMAT(3X,F5.2,5X,I3,4X,F4.2)
VALOR:
A=12.34
Y=567
Z=8.98
10
FORMA
Ta
Captulo 8
DESCRIPCION
T : Carcter de control que indica tratamiento de tabuladores.
a : Entero que indica la longitud del tabulador.
NOTA: Por ejemplo T11 equivale a 10X. Ambas significan que han de saltarse 10
posiciones y debe iniciarse la accin en la posicin 11.
Ejemplo:
11
REAL
A,B,C
A=12.34
Y=34.56
Z=45.78
WRITE(*,10)A,B,C
FORMAT(3(T5,F5.2))
SALIDA:
BBBB12.34BBBB34.56BBBB45.78
FORMA
DESCRIPCION
/ : Carcter de control que indica que se deber saltar al siguiente registro o lo que
es lo mismo se deber saltar a la siguiente lnea
Ejemplo:
Supongamos que tenemos en un fichero (unit=10) los siguientes datos:
BBBB12.34BBBB34.56
BBBB6456.56
La cual podra haberse generado con el siguiente cdigo y formato:
20
21
REAL
A,B,C
A=12.34
B=34.56
C=6456.56
WRITE(10,20)A,B
WRITE(10,21)C
FORMAT(2(T5,F5.2))
FORMAT(T6,F7.2)
20
REAL
A,B,C
READ(10,20)A,B,C
FORMAT(2(T5,F5.2),/,T6,F7.2)
La inclusin del cdigo / nos permite saltar a la siguiente lnea sin tener que incluir una nueva sentencia
READ.
Un formato tal que: FORMAT(///), saltar o generar 3 lneas en blanco segn sea empleada para la
lectura o la escritura.
Grupo de Electromagnetismo
11
8.1.-
Captulo 8
La lectura de datos a travs de un fichero de entrada debe hacerse SIEMPRE mediante lectura formateada.
Todos los datos de los ficheros de entrada deben estar perfectamente documentados en el propio fichero,
incluyendo, si lo tienen, sus dimensiones. Por ejemplo, si hay que introducir un dato numrico correspondiente
a la frecuencia de funcionamiento en Gigahercios de un cierto elemento, se podra escribir un fichero de
entrada con esta forma
Frecuencia de funcionamiento (Ghz)
**.****
12.3550
que habra que leer de la forma adecuada mediante las instrucciones antes relacionadas. Con los asteriscos se
indica la posicin exacta donde escribir las cifras del dato correspondiente, en este caso la frecuencia. Se puede
idear cualquier otra manera que sea igualmente clara.
En el fichero de salida deben incluirse SIEMPRE los datos de entrada en la forma que se considere ms
adecuada. sto permite conocer la respuesta a las entradas sin necesidad de examinar diferentes ficheros.
Hay que tener en cuenta que un programa est terminado cuando el cdigo est perfectamente comentado y los
datos y resultados estn debidamente presentados. Para la realizacin de estas dos labores, especialmente de la
segunda, que llamamos depuracin del programa, es habitual emplear entre el 50 y el 70% del tiempo total
empleado en la realizacin de un programa. Es por ello que la paciencia, en la realizacin de estas tareas en
cierto modo rutinarias, es la caracterstica principal para poder programar con la suficiente solvencia.
EJERCICIO 8.1
Modificar el programa del ejemplo 7.3, para leer N (como mximo 20) nmeros enteros con
formato I (el rango puede ser de 999 a 999) de un fichero de entrada, ordenarlos de
mayor a menor y escribirlos en un fichero de salida con un formato I.
EJERCICIO 8.2
EJERCICIO 8.3
Rehacer el programa del ejercicio 5.3 leyendo y escribiendo, con formato, los datos en
ficheros con los comentarios correspondientes. Realizar un programa leyendo con formato
F y escribiendo con formato F y despus realizar otro programa escribiendo con formato E.
Por ltimo, realizar otro programa que sea capaz de leer del fichero de salida los datos
numricos (es decir, los valores de los argumentos y los valores de la funcin) y escribirlos en
otro fichero.
Nota: en los ejemplos anteriores utilizar el mximo posible de comentarios para practicar
con los diferentes formatos explicados en este captulo.
Grupo de Electromagnetismo
12