Está en la página 1de 8

Apuntes del Prof. Hugo A. Cuello Estructura de dato: Registro. Tratamiento de cadenas.

CLASE 6: Estructura de dato: Registro. Tratamiento de cadenas.

Estructuras de datos
El tipo registro
El tipo registro es una estructura de datos cuyas componentes se denominan campos, los cuales entre ellos pueden ser de diferentes tipos, por lo tanto, el tipo registro es una estructura heterognea. Podemos referirnos a todo el conjunto de datos bajo un solo nombre, esto es, la variable de tipo registro, adems podemos referirnos a solo una componente, usando la siguiente notacin: NombreRegistro.NombreCampo en donde: NombreRegistro es una variable de tipo registro y NombreCampo es una de las componentes del registro. El tipo registro es una estructura de datos esttica, debido a que el compilador asignar una cantidad de byte en la memoria, del tamao de la longitud del registro, esto es la sumatoria de las longitudes de cada componente. Para definir un tipo registro se utiliza la palabra reservada record. os campos del registro se definen dentro de su mbito, en la seccin type, por lo cual, los nombres de los campos sern de uso global, es decir, en cualquier lugar del programa, siempre nos referiremos a un campo con los mismos nombres definidos en la seccin type. !o as" con respecto al nombre del registro que podremos dar distintos nombres seg#n en el lugar del programa en que nos encontremos. a asignacin entre registros es vlida siempre y cuando sean del mismo tipo, si reg$ y reg% son de tipo &eg, con campos cmp', cmp(, ..., cmpn, entonces: reg% reg$, es vlida, y es lo mismo que )acer: reg%.cmp' reg$.cmp'* reg%.cmp( reg$.cmp(* ...* reg%.cmpn reg$.cmpn. +ada campo de un tipo registro podr ser de tipo simple o bien de tipo estructurado como es el tipo registro, en estos casos, los subcampos se definen bajo otro apartado record y la notacin ser, NomReg.NomCmp.NomSubCmp. El caso t"pico es un campo fec)a y los subcampos dia, mes y ao. Ejemplo: rAlumno.!ec"ac.aa, en donde: rAlumno es una variable de tipo &eg$lu, FecNac es un campo de tipo ,ec)a y aa es un subcampo de tipo -ord. $ continuacin se presenta una vista grfica de lo que podr"a ser un registro de una transaccin o novedad de una venta de un vendedor: r)endedor Cod)en Cant)en 0ord 0ord ( b. ( b.

CodArt 1 car. / b.

Pre&ni &eal / b.

. '/ bytes

Pasa#e de par$metros de tipo registro as variables de tipo registro pueden ser pasadas como parmetros a los mdulos por valor o por referencia, tanto el registro completo como una de sus componentes simples o estructuradas. $ continuacin se lista un programa que muestra el uso del tipo registro: Clase 6 A%E &.T.". !.R.'.A. P$gina (

Apuntes del Prof. Hugo A. Cuello Estructura de dato: Registro. Tratamiento de cadenas.

Program Ejemplo&egistro* &ses +rt* T%pe 2tr(3 . string4(35* !echa . record aa : -ord* mm, dd : byte end* &eg$lu . record !ro eg : longint* $pe!om, 6omic, ocal : str(3* ,ec!ac : ,ec)a* Est+iv : c)ar* 7rabaja : boolean* !ro6oc : longint end* procedure Proc$lum8*ar r$lu : &eg$lu9* +egin -riteln8r$lu.!ro eg9* -riteln8:;ng. $pellido y nombre: :9* readln8r$lu.$pe!om9 end* procedure Emite$lum8$pe! : str(39* +egin -riteln8:$pellido y !ombre: :,$pe!9* delay8(3339 end* *ar r$lumno, r$lumno( : &eg$lu* +egin r$lumno.!ro eg :. '(<=1/* -riteln8r$lumno.!ro eg9* r$lumno.,ec!ac.mm :. 1* r$lumno( :. r$lumno* if r$lumno.!ro eg . '(<=1/ then Proc$lum8r$lumno9 >Pasa todo el registro? Else Emite$lum8r$lumno.$pe!om9 >Pasa solo el campo $pe!om? Clase 6 A%E &.T.". !.R.'.A. P$gina ,

Apuntes del Prof. Hugo A. Cuello Estructura de dato: Registro. Tratamiento de cadenas.

end.

Tratamiento de cadenas de caracteres


@na cadena es una disposicin o conjunto de caracteres o s"mbolos tomados de un alfabeto, que en el caso de las P+, ese alfabeto es el $2+;;. @na computadora debe ser capaz no solo de procesar valores numAricos, sino tambiAn de procesar datos no numAricos, es en esta categor"a en donde entran las cadenas. El tratamiento de cadenas es bastante )abitual, ms all de lo que podemos creer, p.e. al escribir un programa fuente en alg#n lenguaje de computadora, estamos utilizando cadenas, que posteriormente al compilarlo tomar esas cadenas para analizar si son palabras vlidas del lenguaje empleado. Por otro lado, un programa debe poder procesar frases o mensajes, como ser: :;ngrese su nombreB, :C+mo est @d. : D !om D :EB, entre otras situaciones que se vern a continuacin. a cadena *ac-a es la cadena con longitud lgica . 3, y se la representa con dos apstrofos contiguos, p.e.: cad' :B @n objeto variable se lo declara de tipo cadena por medio de la palabra reservada string que presenta dos formatos de uso: string o string4n5, en el primer caso declara una variable con una longitud f"sica de (1/ bytes lo que permite almacenar )asta (11 caracteres y en el segundo caso declara una variable con una longitud f"sica de n D ' bytes lo que permite almacenar )asta n caracteres. El byte adicional est reservado para alamacenar el atributo de la longitud lgica de la cadena. Para el tratamiento de cadenas eFisten tres operaciones bsicas, a saber.

ongitud de la cadena +oncatenacin de cadenas 2ubGcadenas

Longitud de la cadena 7oda cadena tiene una longitud finita de caracteres, determinar cul es la cantidad de caracteres que posee una cadena, es conocer su longitud lgica, por lo tanto la entrada es una cadena y su salida es un valor entero, que indica la cantidad de caracteres que contiene en un momento determinado del proceso, ese valor estar entre cero y el mFimo permitido en su declaracin. a longitud lgica de una cadena es dinmica debido a que podr cambiar en tiempo de ejecucin. Por ejemplo, si cad' :superB, para determinar la longitud lgica )acemos longitud8cad'9, que responder con un valor entero de 1. Concatenaci.n de cadenas Es la operacin que permite unir dos o ms cadenas en una sola. a nueva cadena contendr cada una de las cadenas en el orden en que )an sido unidas y su longitud lgica ser igual a la suma de cHu. de las longitudes lgicas de esas cadenas. $s" p.e. si cad' :superB y cad( :manB, cad concatenar/cad( cad,0 1 cad( 2 cad, 1 3superman4 cuya longitud lgica es de I. a operacin de concatenacin generalmente, no es conmutativa, vale decir que, cad( 2 cad, 56 cad, 2 cad(, en cambio, si realizamos la siguiente operacin cad( 2 34 1 34 2 cad(, notamos que genera la misma Clase 6 A%E &.T.". !.R.'.A. P$gina 7

Apuntes del Prof. Hugo A. Cuello Estructura de dato: Registro. Tratamiento de cadenas.

cadena resultado, o este otro ejemplo: 3aa4 2 3aaaaa4 1 3aaaaa4 2 3aa4, produce la misma cadena resultado. 2i el resultado de concatenar cadenas resulta una cadena con longitud mayor a lo esperado, en estos casos se trunca o corta la cadena )asta la longitud mFima aceptada, p.e. si cad est definida de tipo strJ, realizar cad :supermanB, truncar en :supermaB. Su+8cadena Es la operacin que permite obtener una parte de una cadena, sin modificar la cadena original, en realidad se )ace una copia. $s" p.e., podr"amos desarmar la operacin de la concatenacin. Para ello debemos saber que esta operacin requerir de las siguientes entradas: la cadena, el punto de inicio y la cantidad de caracteres a obtener, contando a partir del punto de inicio y obtendremos como resultado una cadena. 2i queremos desarmar el contenido de cad del ejemplo anterior en sus dos partes, proceder"amos de la siguiente manera: cad@no subCadena8cad,',longitud8cad'99 y cad6os subCadena8cad,longitud8cad'9 D ',longitud8cad(99 "ota: as palabras longitud, concatenar y subCadena )an sido seleccionadas del lenguaje castellano a efectos de dar claridad a los conceptos indicados anteriormente. @na cadena puede ser tratada de dos formas:

Completa, p.e.: cad 9ndi*idual Kpor sus componentes, es decir, por sus caracteres o s"mbolosG, siendo la notacin cad[i] , en donde el sub"ndice indica la componente i, cuyo valor debe estar en el intervalo 43* n5, si i . 3 entonces )ace referencia a la longitud lgica de la cadena.

Para las operaciones de cadena tratadas en forma completa cualquier cambio que se produzca en la longitud lgica es modificada automticamente, en cambio, cuando es tratada en forma individual y se produzca una modificacin en su longitud es necesario que lo realice el programador, forzando el cambio en la componente cero con el nuevo valor de longitud lgica. &epresentacin grfica de una variable cadena en memoria, dado el siguiente tipo de dato y la declaracin de variable de ese tipo de dato: t%pe str(3 . string4(35* *ar cad : str(3* longitud f-sica Kesttica, no cambia, definida en tiempo de compilacinG cad 3 ' ( < = 1 / J I L '3 '' '( '< '= '1 '/ 'J 'I 'L (3

Clase 6

A%E

&.T.". !.R.'.A.

P$gina :

Apuntes del Prof. Hugo A. Cuello Estructura de dato: Registro. Tratamiento de cadenas.

+%te de longitud l.gica Kdinmica, su valor puede cambiar en tiempo de ejecucinG. 2i bien el mFimo valor es (11, en realidad no debe ser mayor al valor de la longitud f"sica previamente definido, y no menor que cero, es decir, c)r839 M. cad435 M. c)r8n9. El valor que se establezca no )a de ser numArico, sino, )a de ser de tipo caracter. $ continuacin se presentan distintos valores que contendr la variable cad definida de tipo cadena de (3 Gstring4(35G. )alor asignado Longitud l.gica en caso de emitir muestra cad :B asigna la cadena vac"a. cero. nada cad :superB cinco. super cad cad D :manB oc)o. superman cad4L5 :cB oc)o. superman cad4'35 :iB oc)o. superman cad4''5 :tB oc)o. superman cad4'(5 :oB oc)o. superman cad435 N'1 quince supermanEEE cad435 N'( doce. supermancito cad435 N1 cinco. super os < caracteres de signo de pregunta simbolizan el caracter que se encuentre en esas componentes. @na cadena puede ser comparada con otra, utilizando los distintos operadores de relacin 8O, M, ., MO, O., M.9. Para que una cadena sea igual a otra se deben comparar todos sus caracteres correspondientes, esta tarea la realiza directamente el lenguaje 7urbo Pascal. $l igual que los n#meros reales una cadena es no ordinal. Pero, Cser ordinal si la tratamos individualmenteE. 2i asignamos a una variable destino una cantidad de s"mbolos mayor al que puede contener, los caracteres que sobrepasen el l"mite superior se truncarn, es decir, se pierden todos aquellos caracteres que sobrepasen la cantidad mFima soportada por la variable destino, esto vale cuando la tratamos en forma completa, no as" cuando la tratamos en forma individual y si sobrepasamos el l"mite superior, entonces en estos casos estaremos invadiendo una posicin de memoria desconocida, produciendo efectos catastrficos, los cuales podr"an llegar a ser, que determinadas variables )ayan modificado su valor, aparecer caracteres imprevistos en la pantalla, colgarse el programa, entre otros. !unciones % Procedimientos para el tratamiento de cadenas de caracteres Chr(x): &etorna el caracter correspondiente al cdigo $2+;; F enviado. Ej. car c)r8/19, asigna el caracter :$B. Ord(car): &etorna el cdigo $2+;; correspondiente al caracter enviado. Ej. F ord8:$B9, asigna el valor /1. Es la funcin inversa de c)r8F9. Ptra forma de obtener la longitud lgica de una cadena es aplicando esta funcin de la siguiente manera, F ord8cad4359. $signa a F un valor entre 3 y (11, el que se encuentre en esa posicin. pCase(car): &etorna el carcter convertido a may#scula, si car es alfabAtico min#scula, sino el mismo caracter. car upcase8:aB9, asigna :$B. car upcase8:%B9, asigna :%B. car upcase8:DB9, asigna :DB. Clase 6 A%E &.T.". !.R.'.A. P$gina ;

Apuntes del Prof. Hugo A. Cuello Estructura de dato: Registro. Tratamiento de cadenas.

!ength(cad): &etorna la longitud lgica de la cadena cad enviada. El valor retornado estar entre 3 y (11 como mFimo. engt)8cad9 . ord8cad435. "os(subCad#cad): &etorna cero si la subcadena sub+ad no se encontr en la cadena cad, sino retorna un valor O 3 indicando que en esa posicin se encontro a partir de a)" la subcadena en la cadena. Ej.: F pos8:maB,Bmi mama me amaB9, asigna = a F. F pos8:abcB,BFyzabrscbaqrbcmdsB9, asigna cero a F. +opy8cad,i,F9: &etorna una cadena armada a partir de la cadena cad desde la posicin i, con F caracteres contando a partir de la posicin i. Ej.: cad' copy8:supermanB,<,<9, asigna :perB a cad'. Concat(cad$#cad%#...): &etorna una cadena, resultado de unir cada una de las cadenas enviadas en el orden dado. Ptra forma de lograr el mismo propsito es utilizando el operador de concatenacin :DB. Ej.: cad concat8:superB,BmanB9. cad :superB D :manB. Si&eO'(ob(eto): &etorna un valor entero que indica el tamao f"sico del objeto enviado que puede ser un tipo o una variable. Ej.: F sizeof8integer9, asigna dos a F. F sizeof8real9, asigna / a F. F sizeof8cad9, asigna (' a F si cad se defini como string4(35. F sizeof8str(39, asigna (' a F si str(3 se defini como string4(35. Succ(exprOrd): &etorna el sucesor de eFprPrd que debe ser de tipo ordinal. 2alvo el #ltimo elemento que no tiene sucesor, en tal caso ser"a error averiguarlo, todos los dems elementos tienen sucesor. El primer elemento de una lista tiene valor ordinal cero, salvo con los enteros negativos que tendrn valores ordinales negativos. Ej.: F succ8=9, asigna 1 a F. Q succ8succ8'399, asigna '( a F. "red(exprOrd): &etorna el predecesor de eFprPrd que debe ser de tipo ordinal. 2alvo el primer elemento que no tiene predecesor, en tal caso ser"a error averiguarlo, todos los dems elementos tienen predecesor. El primer elemento de una lista tiene valor ordinal cero, salvo con los enteros negativos que tendrn valores ordinales negativos. Ej.: F pred8=9, asigna < a F. Q pred8pred8L99, asigna J a F. +ar pred8:+B9, asigna :%B a car. )elete(cad#i#x): Procedimiento que elimina de la cadena cad los caracteres desde la posicin i una cantidad F de caracteres contando a partir de la posicin i, actualiza la longitud lgica de cad. Ej.: cad :supermanB. delete8cad,<,<9, cad contiene suman y su longitud lgica es 1, se eliminaron los caracteres :pB, :eB y :rB. *nsert(subCad#cad#i): Procedimiento que inserta la subcadena sub+ad en la cadena cad a partir de la posicin i, actualiza la longitud lgica de cad. Ej.: insert8:perB,cad,<9, a)ora cad volver a contener :supermanB y su longitud lgica volver a ser de I. Str(x#cad): Procedimiento que convierte un n#mero F a una cadena, el resultado queda en cad. Ej.: str8J(1,cad9, asigna a cad la cadena :J(1B y su longitud lgica pasa a ser de <. str8<I(1.=(1:3:(,cad9, asigna a cad la cadena :<I(1.=(1B, en cambio str8<I(1.=(1,cad9, asigna a cad la cadena :<.I(1=(13B que no es lo que se pretender"a )acer.

Clase 6

A%E

&.T.". !.R.'.A.

P$gina 6

Apuntes del Prof. Hugo A. Cuello Estructura de dato: Registro. Tratamiento de cadenas.

+al(cad#x#cod): Procedimiento que convierte una cadena cad a un valor numArico, guardando el resultado en F, si la conversin tuvo AFito, en ese caso a cod se asigna cero. Puede ocurrir que no tenga AFito la conversin, en este otro caso se detiene la conversin, en F se asigna cero y en cod se asigna un valor O 3, indicando que en esa posicin ocurri un error, debido a que el caracter encontrado no pudo ser convertido a un d"gito o signo D o K o el punto decimal. Ej.: cad :1<'IB. Ral8cad,F,cod9, asigna el valor 1<'I a F, y a cod el valor 3, en cambio si cad :<aL(B. Ral8cad,F,cod9, asigna 3 a F, y a cod el valor (, ya que, en la posicin ( se encontr un caracter que no pudo ser convertido. !unciones de tratamiento de cadenas creadas por el usuario $l igual que con las funciones numAricas en que el usuario puede crear sus propias funciones, sucede lo mismo con las cadenas de caracteres. $ continuacin se presentan algunas funciones de cadenas. ,uncin que retorna el carcter enviado convertido a min#scula si es alfabAtico may#scula, sino el mismo carcter. Lo=Case/ car : char0 : char

Car in >3A4..4?4@ o-+ase c)r8ord8car9 D <(9 & ,uncin que retorna invertida una palabra enviada: ;nvPal8 pal : string 9 : string o-+ase car

pal;nv :B
i ( A length/pal0

pal;nv pal4i5 D pal;nv ;nvPal pal;nv &

Clase 6

A%E

&.T.". !.R.'.A.

P$gina <

Apuntes del Prof. Hugo A. Cuello Estructura de dato: Registro. Tratamiento de cadenas.

@na posible aplicacin de la funcin *n,"al ser"a comprobar si una palabra es pal"ndromo, es decir, capic#a, p.e.: capicua pal . ;nvPal8pal9, )abiendo declarado a capicua de tipo boolean, contendr false si la palabra pal no es capic#a, sino ser true. Pero, Cpodr"a ocurrir que al invertir una cadena, palabra de un lenguaje, la nueva cadena creada sea una palabra que pertenezca a ese mismo lenguajeE. p.e.: palreves invpal8:lminaB9, obviando el tilde, asigna :animalB, o esta otra, palreves invpal8:romaB9, asigna :amorB. ,uncin que dado un caracter car y un n#mero n, retorna el carcter car repetido n veces, es decir, retorna una cadena de longitud n, en donde cada componente es el caracter car. replicate/ car : charC n : +%te0: string

cad :B
i(An

cad cad D car replicate cad &

7ambiAn podr"a realizarse la siguiente funcin que retorna espacios en blanco: space/ n : +%te0: string

cad :B
i(An

cad cad D : : space cad &

@na posible aplicacin de la funcin space o replicate podr"a ser rellenar una variable de cadena con espacios a derec)a, a partir de la longitud lgica D ' )asta el final, p.e.: cad :$lgoritmosB. cad cad D space8pred8sizeof8cad99 K lengt)8cad99.

Clase 6

A%E

&.T.". !.R.'.A.

P$gina B

También podría gustarte