SALIDAS LÓGICAS Descriptor L Las salidas lógicas : rLw

Anuncio
SALIDAS LÓGICAS
Descriptor L
Las salidas lógicas :
rLw
Los valores de una variable lógica son .TRUE. o .FALSE. La salida de estas
opciones son T y F, que se escriben justificadas a la derecha.
Ej:
LOGICAL : : salida = .TRUE. , opcion = .FALSE.
WRITE(*,”(“ “,2L5)” salida, opcion
IMPRESIÓN
5
10
----|----|----|
T
F
SALIDAS CHARACTER
Descriptor A
En general :
rA
o
rAw
rA → el ancho del campo es igual al número de caracteres de los datos
rA w → el ancho del campo es igual a w, si w es mayor que los caracteres a
imprimir estos quedan justificados a la derecha. Si w es menor que los
caracteres a imprimir, solo los primeros w caracteres de la variable son impresos.
Ej
CHARACTER(len=17) : : tex=“este es el texto”
WRITE(*,10 ) tex
WRITE(*,11 ) tex
WRITE(*,12) tex
10 FORMAT(“ “, A)
11 FORMAT(“ “, A20)
12 FORMAT(“ “, A6)
IMPRESIÓN
este es el texto
este es el texto
este e
----|----|----|----|----|
Posicionamiento horizontal
Descriptores X y T
X → inserta blanco entre valores
T → tabula a una columna
En general :
nX
Inserta n blancos
Tc
c → es el número de columna en la que se tiene que posicionar
CHARACTER(len=8)
: : nombre = ‘José ’
CHARACTER(len=2)
: : inicial = ‘J.’
CHARACTER(len=10)
: : apellido = ‘García ’
CHARACTER :: curso = ‘Climatología’
INTEGER : : anio = ‘2004’
WRITE(*,100) nombre, inicial, apellido, anio, curso
100 FORMAT(1X, A8, 1X, A2, 1X, A10, 1X, I4, T33, A13)
Ej
5
J o s e
1
0
J .
1
5
Ga r c í a
2
0
2
5
2 0 0 4
3
0
3
5
4
0
C l i ma t o l o g í a
Observar que el curso se escribe en la columna 32 y no en la 33 como indica el
descriptor T. Esto sucede porque 1X es tomado como carácter control . (en la
memoria es el lugar 33 en la impresión es el lugar 32)
Lo mismo imprime
WRITE(*,100) nombre, inicial, apellido, anio, curso
100 FORMAT(1X, A8, T11, A2, T14, A10, T33, A13 , T25, I4)
En este ejemplo se salta hacia atrás.
5
J o s e
1
0
J .
1
5
2
0
Ga r c í a
2
5
3
0
2 0 0 4
3
5
4
0
C l i ma t o l o g í a
! De esta forma se puede sobreimprimir
Ej
WRITE(*,100) nombre, inicial, apellido, anio, curso
100 FORMAT(1X, A8, T11, A2, T14, A10, T33, A13 , T15, I4)
5
J o s e
1
0
J .
1
5
G2 0 0 4 a
2
0
2
5
3
0
3
5
4
0
C l i ma t o l o g í a
REPITIENDO GRUPOS
Ej
100 FORMAT( 1X, I6, I6, F10.2, F10.2, I6 , F10.2, F10.2)
100 FORMAT( 1X, I6, 2(I6, F10.2, F10.2))
100 FORMAT( 1X, I6, 2(I6, 2(F10.2)))
SALTANDO LÍNEAS
Descriptor /
/ → Salta al comienzo de la línea siguiente. Varias / se usan para saltear varios
renglones.
No es necesario que estén separadas por comas.
Ej
WRITE(*, 100) indice, tiempo, profundidad, amplitud, fase
100 FORMAT(‘1’, T20, ‘Resultado de la prueba número’, I3, ///,&
1X, ‘tiempo
= ‘ , F10.0/, &
1X, ‘profundidad = ‘ , F7.1, ‘ metros ‘, /, &
1X, ‘amplitud
= ‘, F8.2/ &
1X, ‘fase
=‘, F7.1)
Ej
!
WRITE(*, 100) indice, tiempo, profundidad, amplitud, fase
100 FORMAT(‘1’, T20, ‘Resultado de la prueba número’, I3, ///,&
1X, ‘tiempo
= ‘ , F7.0/, &
1X, ‘profundidad = ‘ , F7.1, ‘ metros ‘, /, &
1X, ‘amplitud
= ‘, F8.2/ &
1X, ‘fase
= ‘, F7.1)
Notar que cada nueva línea tiene (necesita) un control de carro
Resultado de la prueba numero 10
tiempo
=
profundidad =
amplitud
=
fase
=
300.
330.0 metros
850.65
30.2
Los FORMAT en el WRITE se exploran de la siguiente manera:
1. De izquierda a derecha. La primera variable se le asigna el primer descriptor, a
la segunda variable el segundo y así sucesivamente.
WRITE(*,10) i, j, k, a
10 FORMAT(1X, I5, I10, I15, f10.2)
⇒ i → I5,
j → I10
k → I15
a → f10.2
2. Si un factor de repetición está asociado a un descriptor ese descriptor es
usado el número de veces que indica el factor de repetición y luego sigue con el
siguiente descriptor.
WRITE(*,10) i, j, k, a
10 FORMAT(1X, 2I5, I10, f10.2)
⇒ i → I5,
j → I5
k → I10
a → f10.2
3. Si un factor de repetición está asociado a un grupo de descriptores entre
paréntesis ese grupo de descriptores es usado el número de veces que indica el
factor de repetición y luego sigue con el siguiente descriptor o grupo de
descriptores.
WRITE(*,30) a, i, b, j, c, d
30 FORMAT(1X, F10.2, 2(I5, E14.6), f10.2)
⇒ a→ F10.2
i → I5
b → E14.6
j → I5
c → E14.6
d→ f10.2
4. La impresión para cuando el descriptor no corresponde a la variable o al fin del
FORMAT, lo que ocurre primero.
a)
INTEGER : : m = 1
WRITE(*,40) m
40 FORMAT(1X, ‘ m = ‘, I3, ‘ n = ‘, I4, ‘ O = ‘ F7.2)
Impresión:
5
m
=
1
0
1
n
1
5
2
0
1
5
2
0
1 3 . 8
k V
=
b)
REAL : : voltaje = 13800.
WRITE(*, 50) voltaje / 1000.
50 FORMAT(1X, ‘voltaje = ‘, F8.1, ‘ kV’)
Impresión:
5
v o l
t
a j
1
0
e
=
5. Cuando los descriptores del formato finalizan antes que los datos incluidos en el
WRITE, el programa envía la salida de la memoria a la impresora y retorna al
paréntesis abierto que se encuentra a la derecha y no está precedido por un
factor de repetición.
a)
INTEGER : : j = 1, k = 2, l = 3, m = 4, n = 5
WRITE (*, 60) j, k , l, m, n
60 FORMAT(1X, ‘ Valor = ‘, I3)
5
1
0
1
5
V a l
o r
=
1
V a l
o r
=
2
V a l
o r
=
3
V a l
o r
=
4
V a l
o r
=
5
2
0
En este caso paréntesis abierto que se encuentra a la derecha y no está precedido
por un factor de repetición es el de la apertura del FORMAT
b)
INTEGER : : j = 1, k = 2, l = 3, m = 4, n = 5
WRITE (*, 60) j, k , l, m, n
60 FORMAT(1X, ‘ Valor = ‘, /, (1X, ‘Nueva línea ‘, 2(3X, I3))
5
1
0
1
5
2
0
V a l o r
=
N u e v a
l Í n e a
1
2
N u e v a
l Í n e a
3
4
N u e v a
l í n e a
5
En este caso paréntesis abierto que se encuentra a la derecha y no está
precedido por un factor de repetición es el se encuentra después de la /
LECTURA CON FORMATO
Los descriptores de la sentencia READ, son básicamente los de la sentencia
WRITE, aunque el READ presenta algunas particularidades.
REALES
Los números con punto decimal o con notación exponencial serán leídos
correctamente
a)
READ (*, (3F10.4) ) a, b, c
5
1
0
1
5
1 . 5
2
0
2
5
0 . 1 5 E+ 0 1
3
0
1 5 . 0 E- 0 1
Los tres datos son leidos como 1.5
Si se escribe un número decimal sin puntos entonces el punto decimal es supuesto
con el número d indicado en el formato.
b)
READ(*, 3F10.4) a, b, c
5
1
0
1 5
a → 0.0015
b → 0.0150
1
5
1 5 0
c → 1.5000
2
0
2
5
1 5 0 0 0
3
0
CHARACTER
CHARACTER (len=10) : : texto1, texto2
CHARACTER (len=5 ) : : texto3
CHARACTER (len=15) : : texto4, texto5
READ (*,’(A)’) texto1
READ (*,’(A10)’) texto2
READ (*,’(A10)’) texto3
READ (*,’(A10)’) texto4
READ (*,’(A)’) texto5
5
1
0
1
5
2
0
2
5
3
0
A B C D E F GH I J K L MN O
A B C D E F GH I J K L MN O
A B C D E F GH I J K L MN O
A B C D E F GH I J K L MN O
A B C D E F GH I J K L MN O
texto1 → ABCDEFGHIJ Porque el texto1 tiene 10 caracteres en su definición.
texto2 → ABCDEFGHIJ Porque el texto2 tiene 10 caracteres en su definición y en
su descriptor
texto3 → FGHIJ Porque el texto3 tiene 5 caracteres por definición y 10 por el
descriptor. Toma 5 caracteres a la derecha de los 10 asignados.
texto4 → ‘ABCDEFGHIJ-----’ (- → blancos) Porque el texto4 tiene 15 caracteres en su
definición y en su descriptor
texto5 → ABCDEFGHIJKLMNO Porque el texto5 tiene 15 caracteres en su definición y
su descriptor es variable( según la longitud de la variable)
Posición Horizontal T
Se puede utilizar para leer el mismo dato de 2 maneras:
CHARACTER(len=6) : : var
Integer : : ientra
READ (*, ‘(I6, T1, A6)’) ientra, var
Posición Vertical /
Es una forma de no leer datos y saltar registros
REAL : : a, b, c, d
READ (*, 300) a, b, c, d
300 FORMAT(2F10.2, //,2F10.2)
5
1
0
1
5
2
0
2
5
3
0
1 . 0
2 . 0
3 . 0
4 . 0
5 . 0
6 . 0
7 . 0
8 . 0
9 . 0
a → 1.0
b → 2.0
c → 7.0
d → 8.0
Descargar