Manejo de Carácteres
-
Upload
emiliano-gonzalez -
Category
Documents
-
view
4 -
download
0
description
Transcript of Manejo de Carácteres
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO.FACULTAD DE INGENIRÍA.
PROGRAMACIÓN AVANZADA.
MANEJO DE CARACTERES
ALUMNO: GARCIA MARMOLEJO CESAR ALEJANDRO. ORTIZ LUCAS PILAR SANCHEZ GARCIA JORGE ALBERTO NOMBRE DE LA PROFESORA: ADRIANA ALEJANDRA ENRÍQUEZ SOLÍS.Fecha de entrega: 3 de marzo 2016Calificación:
Una constante o literal de caracteres es una cadena de caracteres encerrada entre ' o "
'ESIQIE' "Programas FORTRAN"
El número de caracteres encerrados entre ' o entre " es la longitud de la constante.
Las variables de caracteres son declaradas con la proposición CHARACTER.
character(kind=1,len=10) var ! clase 1 y longitud 10
character(len=30)::dirección ! kind=1 es el default
character clave ! len=1 es el default
character(kind=5),dimension(100)::codigo postal
En FORTRAN 77 no se puede especificar la clase y la longitud se declara con un *
character *40 alumno
Es posible manejar subcadenas de caracteres, como en el programa
program sub_cadenas
character(len=10)::var;character(len=13) suma
car='FORTRAN 90'
! car(5:6) es una subcadena con los caracteres RA
print *, car(3:6)
print *,car(1:1)
print *,car(4:10)
suma="abc"//car ! // es un operador de concatenación
print *,suma
end program sub_cadenas
cuyos resultados son:
RA
F
La operación de concatenación se ejecuta después de las sumas y restas y antes de los
operadores de relación ==,/=, <,<=,> y >=.
La función de biblioteca LEN determina la longitud de una constante, variable o expresión de tipo
CHARACTER. INDEX determina la posición inicial de una subcadena dentro de una cadena de
caracteres. La función CHAR genera el carácter correspondiente a su argumento entero mientras
que ICHAR devuelve el número asociado con el carácter dado. El código de caracteres empleado
tanto por ICHAR como por CHAR es dependiente del procesador, aunque generalmente es el
código
ASCII. Por ejemplo, el programa
character(len=6)::nom='ESIQIE'
print *,len(nom)
print *,index(nom,'I')
print *,char(38)
print *,ichar("%")
stop
end
genera los registros
6
3
&
37
El argumento opcional BACK de la función INDEX no está soportado en FORTRAN 77:
index('abcde','c') ! devuelve el valor 3
! back=.true. implica una búsqueda hacia atrás
index("Matematicas",'a',back=.true) ! regresa el valor 10
index('Gauss','xyz') ! devuelve el valor 0
La función LGE prueba si una cadena de caracteres es léxicamente mayor o igual que otra, de
acuerdo a la secuencia de los caracteres ASCII. Con LGT se prueba si una cadena es léxicamente
mayor que otra. Similarmente, LLE prueba si una cadena es léxicamente menor o igual que otra y
LLT determina si una cadena es menor léxicamente que otra.
Por lo tanto, el programa
program lexico
! ¿'raul' es mayor o igual que 'raul'?
print *,lge('raul','raul')
! ¿ 'ana' es mayor léxicamente que 'pedro'?
print *,lgt('ana','pedro')
! ¿ 'FORTRAN' es menor o igual que 'fortran'?
print *,lle('FORTRAN','fortran')
! ¿ 'MARIA' es léxicamente menor que 'JULIA'?
print *,llt('MARIA','JULIA')
end program lexico
arroja los resultados
arroja los resultados
T
F
T
F
ACHAR es una función que devuelve el carácter de la secuencia ASCII que corresponde a su
argumento entero. Dado un carácter del código ASCII, IACHAR devuelve su correspondiente clave
numérica. LEN_TRIM funciona de manera similar a LEN; determina la longitud de una cadena,
pero sin tomar en cuenta los espacios después del último carácter diferente de un espacio. La
función ADJUSTL justifica una cadena a la izquierda, removiendo los espacios colocados antes
del primer carácter diferente de un espacio en la cadena original e insertando los espacios
necesarios para rellenar la cadena. ADJUSTR justifica la cadena a la derecha, removiendo los
espacios colocados después del último carácter diferente a un espacio en la cadena original e
insertando los espacios necesarios al principio de la cadena. REPEAT concatena copias de una
cadena. La función
TRIM omite los espacios al final de la cadena. Entonces, el programa
character (len=10)::muestra
character (len=30)::muestra_repetida
character (len=10)::muestra_sin_espacios
muestra="EJEMPLO"
print *,achar(60)
print *,iachar('k')
print *,len_trim(muestra)
print *,adjustl(muestra) ! justificación a la izquierda
print *,adjustr(muestra) ! justificación a la derecha
muestra_repetida=repeat(muestra,3) !concatenación de tres
print *,muestra_repetida
! omisión de los espacios al final de la cadena
muestra_sin_espacios=trim(muestra)//'123'
print *,muestra_sin_espacios
end
tendría los resultados
<
107
7
EJEMPLO
EJEMPLO
EJEMPLO EJEMPLO EJEMPLO
EJEMPLO123
Las funciones ACHAR, IACHAR, LEN_TRIM, ADJUSTL, ADJUSTR, REPEAT y TRIM no son parte
de FORTRAN 77. Cuando en la función SCAN el argumento opcional BACK está ausente o
presente con el valor .false., el resultado es la posición del carácter más a la izquierda en su
primer argumento que aparece también en el segundo argumento. Con BACK=.true., el valor de la
función es la posición del carácter más a la derecha en el primer argumento que también aparece
en el segundo. La función VERIFY trabaja de manera muy similar, pero con la diferencia de que el
resultado es la posición del carácter más a la izquierda en su primer argumento que aparece
también en el segundo argumento. Con BACK=.true., el valor de la función es la posición del
carácter más a la derecha en el primer argumento que también aparece en el segundo. La función
VERIFY trabaja de manera muy similar, pero con la diferencia de que el resultado es ahora la
posición del carácter del primer argumento que no está en el segundo. SCAN y VERIFY no están
incluidas en el estándar FORTRAN 77. El siguiente segmento de programa
print *,scan('POLITECNICO',"FI")
print *,scan('POLITECNICO','I',back=.true.)
print *,verify('POLITECNICO','POB')
print *,verify('POLITECNICO',"ICONO",.true.)
end
escribe
4
9
3
6
Otros programas que muestran el uso de cadenas de caracteres son:
character *5 nombre_corto
character (len=10) nombre_largo
real::a=10.0
! se truncan los cuatro caracteres más a la derecha
nombre_largo='abcdefghijklmn'
write(6,70)nombre_largo
nombre_corto=nombre_largo
! 227 es la clave ASCII de 'ð'
write(6,80)a,achar(227),nombre_corto
70 format(1x,a15)
80 format(1x,f8.2,2x,a1,2x,a5)
stop
end
con resultados
abcdefghij
10.00 ð abcde
12345678901234567890 y
program principal
implicit none
character (len=20)::titulo
read *,titulo
call subrutina_uno(titulo)
end
subroutine subrutina_uno(linea)
implicit none
! la longitud del argumento fingido linea se supone igual a la del argumento actual titulo
character (len=*) linea
print '(1x,a20)',linea
return
end
program prueba_caracteres
implicit none
character(len=50),dimension(30)::direcciones
..
call proceso(direcciones)
.. end program prueba_caracteres
subroutine proceso(datos)
implivit none
! datos es un arreglo de tamaño supuesto
character (len=50),dimension(*)::datos