Fortran - Entrada salida básica

Hasta ahora hemos visto que podemos leer datos desde el teclado usando el read * declaración, y mostrar la salida a la pantalla usando el print*declaración, respectivamente. Esta forma de entrada-salida esfree format E / S, y se llama list-directed de entrada y salida.

La E / S simple de formato libre tiene la forma:

read(*,*) item1, item2, item3...
print *, item1, item2, item3
write(*,*) item1, item2, item3...

Sin embargo, la E / S formateada le brinda más flexibilidad sobre la transferencia de datos.

Salida de entrada formateada

La salida de entrada formateada tiene la siguiente sintaxis:

read fmt, variable_list 
print fmt, variable_list 
write fmt, variable_list

Dónde,

  • fmt es la especificación de formato

  • lista de variables es una lista de las variables que se leerán desde el teclado o escribirán en la pantalla

La especificación de formato define la forma en que se muestran los datos formateados. Consiste en una cadena que contiene una lista deedit descriptors entre paréntesis.

Un edit descriptor especifica el formato exacto, por ejemplo, ancho, dígitos después del punto decimal, etc., en el que se muestran los caracteres y números.

Por ejemplo

Print "(f6.3)", pi

La siguiente tabla describe los descriptores:

Descriptor Descripción Ejemplo
yo

Se utiliza para la salida de números enteros. Esto toma la forma 'rIw.m' donde los significados de r, wym se dan en la tabla siguiente. Los valores enteros se justifican a la derecha en sus campos. Si el ancho del campo no es lo suficientemente grande para acomodar un número entero, entonces el campo se rellena con asteriscos.

imprimir "(3i5)", i, j, k
F

Se utiliza para la salida de números reales. Esto toma la forma 'rFw.d' donde los significados de r, wyd se dan en la siguiente tabla. Los valores reales están justificados a la derecha en sus campos. Si el ancho del campo no es lo suficientemente grande para acomodar el número real, entonces el campo se llena con asteriscos.

imprimir "(f12.3)", pi
mi

Se utiliza para la salida real en notación exponencial. La declaración del descriptor 'E' toma la forma 'rEw.d' donde los significados de r, wyd se dan en la tabla siguiente. Los valores reales están justificados a la derecha en sus campos. Si el ancho del campo no es lo suficientemente grande para acomodar el número real, entonces el campo se llena con asteriscos.

Tenga en cuenta que, para imprimir un número real con tres decimales, se necesita un ancho de campo de al menos diez. Uno para el signo de la mantisa, dos para el cero, cuatro para la mantisa y dos para el exponente en sí. En general, w ≥ d + 7.

imprimir "(e10.3)", 123456.0 da '0.123e + 06'
ES

Se utiliza para resultados reales (notación científica). Esto toma la forma 'rESw.d' donde los significados de r, wyd se dan en la tabla siguiente. El descriptor 'E' descrito anteriormente difiere levemente de la conocida 'notación científica' tradicional. La notación científica tiene la mantisa en el rango de 1.0 a 10.0 a diferencia del descriptor E que tiene la mantisa en el rango de 0.1 a 1.0. Los valores reales están justificados a la derecha en sus campos. Si el ancho del campo no es lo suficientemente grande para acomodar el número real, entonces el campo se llena con asteriscos. Aquí también, el campo de ancho debe satisfacer la expresión w ≥ d + 7

imprimir "(es10.3)", 123456.0 da '1.235e + 05'
UNA

Se utiliza para la salida de caracteres. Esto toma la forma 'rAw' donde los significados de ryw se dan en la tabla siguiente. Los tipos de caracteres están justificados a la derecha en sus campos. Si el ancho del campo no es lo suficientemente grande para acomodar la cadena de caracteres, entonces el campo se llena con los primeros caracteres 'w' de la cadena.

imprimir "(a10)", str
X

Esto se usa para la salida de espacio. Esto toma la forma 'nX' donde 'n' es el número de espacios deseados.

imprimir "(5x, a10)", str
/

Descriptor de barra inclinada: se utiliza para insertar líneas en blanco. Esto toma la forma '/' y fuerza a que la siguiente salida de datos esté en una nueva línea.

imprimir "(/, 5x, a10)", str

Los siguientes símbolos se utilizan con los descriptores de formato:

No Señor Símbolo y descripción
1

c

Número de columna

2

d

Número de dígitos a la derecha del lugar decimal para entrada o salida real

3

m

Número mínimo de dígitos que se mostrarán

4

n

Cantidad de espacios para omitir

5

r

Recuento de repeticiones: el número de veces que se utiliza un descriptor o grupo de descriptores.

6

w

Ancho del campo: la cantidad de caracteres que se usarán para la entrada o salida

Ejemplo 1

program printPi

   pi = 3.141592653589793238 
   
   Print "(f6.3)", pi 
   Print "(f10.7)", pi
   Print "(f20.15)", pi 
   Print "(e16.4)", pi/100 
   
end program printPi

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

3.142
3.1415927
3.141592741012573
0.3142E-01

Ejemplo 2

program printName
implicit none

   character (len = 15) :: first_name
   print *,' Enter your first name.' 
   print *,' Up to 20 characters, please'
   
   read *,first_name 
   print "(1x,a)",first_name
   
end program printName

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado: (suponga que el usuario ingresa el nombre Zara)

Enter your first name.
Up to 20 characters, please
Zara

Ejemplo 3

program formattedPrint
implicit none

   real :: c = 1.2786456e-9, d = 0.1234567e3 
   integer :: n = 300789, k = 45, i = 2
   character (len=15) :: str="Tutorials Point"
   
   print "(i6)", k 
   print "(i6.3)", k 
   print "(3i10)", n, k, i 
   print "(i10,i3,i5)", n, k, i 
   print "(a15)",str 
   print "(f12.3)", d
   print "(e12.4)", c 
   print '(/,3x,"n = ",i6, 3x, "d = ",f7.4)', n, d
   
end program formattedPrint

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

45
045
300789 45  2
300789 45  2
Tutorials Point
123.457
0.1279E-08

n = 300789 d = *******

La declaración de formato

La declaración de formato le permite mezclar y combinar caracteres, números enteros y salida real en una declaración. El siguiente ejemplo demuestra esto:

program productDetails 
implicit none 

   character (len = 15) :: name
   integer :: id 
   real :: weight
   name = 'Ardupilot'
   id = 1
   weight = 0.08
   
   print *,' The product details are' 
   
   print 100
   100 format (7x,'Name:', 7x, 'Id:', 1x, 'Weight:')
   
   print 200, name, id, weight 
   200 format(1x, a, 2x, i3, 2x, f5.2) 
   
end program productDetails

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

The product details are
Name:       Id:    Weight:
Ardupilot   1       0.08