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