Professional Documents
Culture Documents
TEMA 2
Tipos y estructuras bsicas
Jos Manuel Bada
Gloria Martnez
Juan Murgui
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 2 -
NDICE
2.1. Introduccin.........................................................................................................3
2.2. Tipos escalares ....................................................................................................5
2.2.1. Tipos normalizados ...............................................................................6
Tipo Entero ................................................................................................6
Tipo Real ....................................................................................................6
Tipo Carcter..............................................................................................8
Tipo Lgico................................................................................................9
2.2.2. Tipos escalares definidos por el usuario................................................9
Tipo enumerado .........................................................................................9
Tipo subrango ..........................................................................................10
2.3. Tipos estructurados............................................................................................11
2.3.1. Tipo Vector..........................................................................................12
Cadenas de caracteres ..............................................................................13
Vectores multidimensionales ...................................................................14
2.3.2. Tipo Conjunto......................................................................................15
2.3.3. Tipo Registro.......................................................................................18
Registros con parte variante .....................................................................20
2.4. Ejercicios ...........................................................................................................22
BIBLIOGRAFA
(Dale y Lilly, 1989), Cap.3.
(Berlanga et al., 1998), Cap. 2 y 6.
Stubbs y Webre, Cap. 2, 7, 8, 10 y Apndice A.
OBJETIVOS
Conocer y diferenciar los conceptos de tipo de datos y de estructura de datos.
Saber cmo se clasifican los distintos tipos de datos bsicos proporcionados por
los lenguajes de programacin de alto nivel, concretando esta clasificacin en el
lenguaje Pascal.
Conocer las caractersticas y saber utilizar los distintos tipos de datos bsicos,
tanto escalares como estructurados, incluyendo vectores, registros y conjuntos.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 3 -
2.1. Introduccin
La solucin de cualquier problema informtico requiere conocer y saber utilizar
herramientas y tcnicas tales como la algortmica y la estructura de datos.
Por medio de la algortmica podemos disear una serie de operaciones que ejecutadas
en el orden establecido llevarn a la solucin del problema. Por otra parte, es necesario
definir las caractersticas de los datos con los que trabajemos y una serie de operaciones
que manipulen estos datos de forma eficiente, para que el algoritmo que opera sobre ellos
pueda ser analizado y llevado a la prctica de una forma clara.
En ltimo trmino los datos en un ordenador son una serie de bits situados en
memoria. Es el programador con la ayuda de un lenguaje el que debe dotarlos de un cierto
significado. As en un programa una misma secuencia de bits en memoria puede
interpretarse como un nmero entero y tener el valor 65, y esa misma secuencia puede
interpretarse como un carcter y asociarse a la letra 'A'. Para facilitar la manipulacin de
los distintos datos en un programa se define por un lado el concepto de tipo de datos y por
otro el de estructura de datos.
Un tipo de datos es un conjunto de valores posibles junto con unas operaciones para
su manipulacin.
Ejemplo
Podemos definir un tipo de datos Entero que est constituido por todos los
nmeros enteros entre dos valores dados y asociarle al tipo una serie de
operaciones que nos permitan por ejemplo crear variables de este tipo, asignarles
un valor, sumar o multiplicar dos enteros o compararlos para ver si son iguales.
Tenemos dos razones fundamentales para definir distintos tipos:
- Los tipos nos permiten dotar de un significado lgico a los datos con los que
trabajamos, facilitando la programacin y evitando errores.
- Los tipos permiten asociar una serie de propiedades a los datos y definir
formalmente las operaciones que los manejan.
Tipos de datos como los enteros, reales y caracteres se denominan simples o
elementales ya que toman valores atmicos. Esto significa que una variable de estos tipos
tan slo puede contener un valor en cada momento. Sin embargo, existen otros tipos de
datos que pueden contener ms de un valor y que se denominan tipos compuestos,
estructurados o simplemente estructuras de datos. As pues:
Una estructura de datos es un tipo de datos:
- con varias componentes, cada una de las cuales puede ser un tipo simple u otra
estructura de datos.
- una relacin entre los distintos componentes que la dota de un cierto significado y
utilidad en su conjunto.
- una serie de operaciones de manipulacin.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 4 -
Ejemplo
Un vector es una estructura de datos en la que sus distintas componentes pueden
ser de cualquier tipo, todas ellas deben ser del mismo tipo, y los lenguajes de alto
nivel nos proporcionan operaciones especficas por ejemplo para la creacin de
variables y el acceso a sus distintas componentes.
En todos los lenguajes de alto nivel hay un conjunto de tipos de datos predefinidos
(En Pascal los tipos de datos estndar son Integer, Real, Boolean y Char). Esto significa
que podemos definir variables que contengan datos de estos tipos y que estos lenguajes
proporcionan una serie de operaciones para manipular estas variables.
A partir de un grupo de datos (de tipos elementales o no) podemos crear nuevas
estructuras de datos definiendo los elementos que la forman. Consideraremos tres
estructuras como Estructuras Bsicas:
- Vector
- Registro
- Conjunto
Estas estructuras estn implementadas en Pascal como Array, Record y Set. Su
estructura bsica debe ser definida por el usuario, pero el lenguaje les dota de una
herramienta de definicin y unas operaciones bsicas de manipulacin, normalmente
relacionadas con el acceso a cada uno de los tems de informacin que las componen.
Consideraremos estas estructuras ya definidas, y las utilizaremos junto con los tipos
de datos elementales, para construir estructuras de datos ms complejas como pilas, colas,
listas, rboles binarios... Estas ltimas estructuras de datos no estn predefinidas
normalmente en los lenguajes: el usuario debe decidir completamente la implementacin
final y cualquier operacin a realizar con ellas.
Nuestro objetivo en este tema es estudiar los llamados tipos bsicos. Llamaremos
tipos bsicos a los tipos elementales (Entero, Real, Lgico, Carcter...) o compuestos
(Vector, Registro...) que son tipos comunes a todos los lenguajes de programacin
estructurados y que, adems, suelen presentar una estructura y operaciones muy similares
en todos ellos.
Cada lenguaje de alto nivel nos proporciona unos tipos bsicos, as como
herramientas para construir nuevos tipos a partir de ellos. En Pascal tenemos la siguiente
clasificacin:
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 5 -
TIPOS
Escalares
Normalizados
Entero (INTEGER)
Real (REAL)
Lgico (BOOLEAN)
Carcter (CHAR)
'
'
Estructurados
Vector (ARRAY)
Conjunto (SET)
Registro (RECORD)
Fichero (FILE)
'
Puntero (POINTER)
'
<nombre> = STRING[n];
Soporta las mismas operaciones que el tipo Vector, pero adems existen otras que le
son propias y por eso lo podemos considerar un tipo aparte. Estas operaciones propias son
por ejemplo:
Longitud: CADENA 0..n
Dada un cadena, devuelve su longitud.
Subcadena: CADENA x tipo_indice x 1..n CADENA
Dada una cadena c, un ndice i y una longitud l, devuelve la subcadena que comienza
en la posicin i de c y tiene longitud l.
Posicin: CADENA x CADENA 0..n
Dadas dos cadenas c1 y c2, devuelve la posicin i a partir de la cual la cadena c2 est
contenida en la cadena c1.
Concatenar: CADENA x CADENA CADENA
Dadas dos cadena c1 y c2, devuelve una cadena c formada al concatenar la cadena c1 y
c2, c=c1+c2.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 14 -
En Pascal estas operaciones constituyen funciones o procedimientos de manejo de
strings. Entre las que proporciona el Turbo Pascal, las equivalentes a las anteriores tienen
las siguientes cabeceras:
LENGTH(cadena:STRING):INTEGER;
COPY(cadena:STRING; posicion, longitud:INTEGER):STRING;
POS(cadena_1, cadena_2: STRING): INTEGER;
CONCAT(cadena_1, cadena_2,...:STRING):STRING;
Implementacin
En PASCAL, se usa la definicin de tipo STRING[n], en la que n indica la longitud
mxima de la cadena y debe encontrarse entre 1 y 256. El elemento 0 del vector es
especial, contiene la longitud actual de la cadena, entendida como el nmero de caracteres
de que consta en un momento dado, no su tamao mximo fijado en la declaracin.
Adems, la sintaxis del Pascal permite asignar valor a las distintas componentes de
una cadena mediante una sola sentencia, utilizando constantes entrecomilladas de este tipo:
x := 'valor asignado';
Ejemplo
VAR
c:STRING[15];
...
c:='ni idea'
writeln(sizeof(c)) (* escribe 15 *)
writeln(length(c)) (* escribe 7 *)
Vectores multidimensionales
Cuando el tipo base de un vector es otro vector, obtenemos una matriz. Esta es una de la
extensiones ms habitual del tipo Vector, pero no deja de ser un caso particular del vector
n-dimensional, que se define en general como
vector_N = ARRAY [TI
1
] OF ARRAY [TI
2
] OF ... ARRAY [TI
n
] OF Tipo_base;
_
,
'
Registro=
Parte variante
Parte fija
Discriminante
Ejemplo:
estado =(casado, divorciado, soltero);
fecha = RECORD dia, mes, ao: INTEGER END;
empleado = RECORD
nombre : STRING[80];
edad : INTEGER;
domicilio : STRING[80];
CASE estado_civil: estado OF
casado: ( conyuge: STRING[80];
num_hijos: INTEGER;
tipo_irpf: REAL);
divorciado: ( fecha_div: fecha;
irpf_ant:REAL;
irpf_act:REAL);
soltero:( irpf:REAL)
END; (* del RECORD, NO del CASE *)
Los registros con parte variante admiten las mismas operaciones que hemos descrito
para cualquier tipo de registro, sin embargo conviene tomar algunas precauciones
adicionales en su manipulacin:
- Asignar siempre valores al campo discriminante antes que a los campos variantes.
- Utilizar la instruccin condicional CASE al tratar la informacin de los campos
variantes siguiendo un esquema anlogo al usado en la declaracin.
Es necesario ser cuidadoso y no confundir la sintaxis de la instruccin condicional
CASE con la sintaxis de la sentencia CASE utilizada al declarar la parte variante de un
registro. Tener en cuenta especialmente que esta ltima no termina con END y que entre
las palabras reservadas CASE y OF se est declarando un campo ms, el discriminante.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 21 -
Ejemplo:
PROCEDURE EscrEmpleado(emp:empleado);
BEGIN
WITH emp DO
CASE estado_civil OF
casado:BEGIN
Writeln('Casado');
Writeln('Datos del conyuge:');
Writeln('Nombre: ',conyuge);
Writeln('Numero de hijos: ',num_hijos);
Writeln('Tipo IRPF: ',tipo_irpf)
END;
divorciado: BEGIN
Writeln('Divorciado');
Write('Fecha divorcio: ');
EscrFecha(fecha_div);
Writeln('IRPF Anterior: ',irpf_ant);
Writeln('IRPF Actual: ',irpf_act)
END;
soltero: BEGIN
Writeln('Soltero');
Writeln('Tipo IRPF: ',irpf)
END
END (* del CASE *)
END; (* de EscrEmpleado *)
Implementacin
La asignacin de memoria para contener un registro con parte variante se hace
reservando la suficiente necesaria para el peor caso, es decir, para aquel en el que los
campos de la parte variante tengan el mayor tamao. De este modo, distintas instancias
comparten la misma rea de memoria, y ocupan una parte mayor o menor de la misma en
funcin del valor del discriminante.
Obviamente, slo podemos tratar una variante del registro cada vez; esta variante se
calcula en tiempo de ejecucin en el momento en el que el campo discriminante toma uno
de los valores posibles. Es ms, al usar una variante se pierden los datos de la variante
anterior. Finalmente decir que en todo momento slo podemos acceder a los campos que
formen parte de la variante actual.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 22 -
2.4. Ejercicios
1. Definir un tipo de datos diassemana capaz de contener cualquier da de la semana y las
operaciones diasiguiente, diaanterior y escribedia.
2. Definir un tipo de datos laborables capaz de contener cualquier da laborable de la semana,
basndose en el tipo definido en el ejercicio anterior, con las operaciones laborablesiguiente
y laborableanterior. Contestar a las siguientes preguntas:
a) Se puede emplear escribedia con un dato de tipo laborables?
b) Se puede emplear diasiguiente con un dato de entrada de tipo laborables? De qu tipo
es el resultado?
3. Se puede definir un subrango de un slo elemento? Y un subrango sin elementos?
4. Implementar un algoritmo usando el tipo de datos diassemana y sus operaciones. Este
algoritmo debe hacer lo siguiente: Dado un da de la semana, dia, y un nmero de das, n, si
n0 debe devolver qu da de la semana ser n das despus del dia, y si n<0 debe decir qu
da de la semana fue n das antes.
5. Definir los tipos de datos horas y minutos capaz de contener la hora y minutos de cualquier
momento del da, y las siguientes operaciones:
codificatiempo: algoritmo que dado un nmero entero X, (que representar una cantidad
global en minutos) devuelva 2 valores: la cantidad de horas y minutos en que se puede
disgregar X.
decodificatiempo: que haga la operacin inversa a la anterior.
incrementa1minuto: que dados la cantidad en horas y en minutos, incremente el tiempo
en un minuto, y en caso de que se acabe el da, comience de nuevo por la hora 0:0.
escribehora: que escriba la hora y los minutos en un formato determinado, por ejemplo:
15:35.
6. Dados los tipos de datos diassemana, horas y minutos, definir otro tipo de datos horario que
sea capaz de almacenar un da de la semana y una hora dada de ese da.
a) Qu estructura de datos elegiras: vector, registro o conjunto? Explicar por qu.
b) Define la estructura de datos y las siguientes operaciones:
-incrementaminutos: que dada una estructura de tipo horario, incremente una cantidad
cualquiera de minutos (entero) y devuelva la estructura modificada de modo que tenga en
cuenta que se haya cambiado de hora e incluso de da.
-escribehorario: que dado un dato de tipo horario lo escriba en un determinado formato,
por ejemplo: lunes, 18:00.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 23 -
7. Dado el siguiente algoritmo:
PROCEDURE cuenta ( a1: tipo1; b: tipo2;VAR a2: tipo1);
VAR
b2: tipo2;
BEGIN
a2 := '';
b2 := b;
WHILE (b2 <> 0) DO
BEGIN
a2 := concat (a2, a1);
b2 := b2 - 1;
END
END;
a) Deducir qu tipos de datos bsicos son tipo1 y tipo2.
b) Qu hace el algoritmo anterior?
8. Se pretende implementar una operacin bsica con polinomios de grado n, que podemos
representar genricamente como:
a
n
x
n
+ a
n-1
x
n-1
+ ... + a
2
x
2
+ a
1
x
1
+ a
0
Se pide:
a) La definicin ms adecuada del tipo polinomio. Justifquese.
b) La definicin de la operacin bsica SumaPolinomios.
9. Un filatlico desea hacer un lbum de los 200 mejores sellos del mundo. Para ello numera
estos sellos y crea una base de datos conteniendo los sellos que tiene cada uno de sus
amigos filatlicos (incluyndose l). Se pide:
a) Definir la estructura de datos ms adecuada para contener los sellos que tiene cada
filatlico y otra para todos los filatlicos sabiendo que hay 20 en total.
b) Una operacin que devuelva si entre todos los filatlicos se podr componer dicho lbum o
no.
c) Una operacin que devuelva a qu filatlicos les podra comprar un sello que l no tiene.
Define para ello la estructura necesaria.
10. Una empresa de alimentacin tiene n supermercados. Definir la estructura de datos ms
sencilla para almacenar por da, mes, y supermercado el total de caja realizado. Definir las
operaciones que indiquen:
a) Qu supermercado ha realizado el mximo de ventas totales anual,
b) Qu supermercado ha realizado el mximo de ventas totales mensual, indicando el mes,
c) Qu da del ao se ha obtenido la mayor venta, indicando el supermercado.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 24 -
11. En el juego del bingo, se pueden sacar nmeros del 1 al 99. Se tienen 200 cartones,
numerados del 1 al 200, con 15 nmeros cada uno; no hay cartones iguales y en un cartn no
puede haber nmeros repetidos. Los nmeros se obtienen de un bombo. Cuando sale un
nmero, se quita en cada uno de los cartones en los que aparezca. El cartn ganador es el
primero en el que se eliminan todos los nmeros. Se pide:
a) Definir el tipo cartn, es decir, la estructura de datos que lo ha de soportar y las
operaciones bsicas para trabajar con l.
b) Utilizarlo para elaborar un algoritmo que nos permita jugar al bingo (como salida, el
programa de dar los nmeros de los cartones ganadores). Se deben definir las estructuras
de datos adecuadas.
Nota: se supone que existe una funcin predefinida Bombo, cuya llamada proporciona un
nmero del 1 al 99, de forma que no se repitan nunca. Tambin existe un procedimiento
predefinido Rellenar, cuya misin es obtener los valores iniciales de los 200 cartones.
12. Queremos representar un fichero de libros de una librera en una estructura esttica, que
almacene la siguiente informacin de cada libro: ttulo, autor, cdigo, comentarios, stock,
mnimo stock. Se pretende que los libros estn siempre ordenados por el cdigo (pero los
cdigos no tienen porqu ser consecutivos). Se pide:
a) Definir la estructura de datos ms adecuada para representar el fichero de libros, sabiendo
que el nmero mximo de libros distintos que puede albergar la librera es de 1000.
b) Definir una operacin de bsqueda binaria de un libro por su cdigo, devolviendo si est,
la posicin del libro en el fichero, y si no est, la del cdigo inmediatamente posterior a l.
c) Definir una operacin que inserte un nuevo libro en la estructura de datos.
d) Definir una operacin que borre un libro obsoleto de la estructura de datos, sabiendo su
cdigo.
13. Una agencia de viajes ofrece n destinos; para cada destino se puede optar por 5 clases de
viaje, super, luxe, normal, turista y estudiante, y adems se ofrecen tres tipos de
alojamiento: AD (alojamiento y desayuno), MP (media pensin) y PC (pensin completa).
Cada programa de viaje se caracteriza por la informacin (destino, clase, alojamiento),
siendo la informacin significativa el precio del programa y el nmero de viajeros.
Se desea informatizar la gestin de esta agencia. Entre otras cosas, es preciso:
a) La definicin de la estructura de datos que soporte la informacin descrita (es decir, la
estructura que permita almacenar todos los programas de viaje de la agencia).
b) Escribir un algoritmo que calcule la facturacin total de la agencia y el nmero de viajeros
para cada destino. Definir la estructura de datos ms adecuada para contener la salida de
datos, en el caso en que sea necesario.
c) Escribir un algoritmo que, dada una clase, permita obtener el destino con mayor nmero
de viajeros, indicando adems dicho nmero.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 25 -
14. La empresa de construcciones "Negocietes S.A." promueve la construccin de el edificio de
viviendas de lujo "Kese-kae". El edificio est organizado en seis escaleras: A, B, C, D, E y F.
Por cada escalera hay 8 plantas, y en cada planta hay 5 puertas. Por cada una de las
viviendas la constructora guarda informacin del nmero de metros cuadrados, nmero de
habitaciones y el precio. Si adems la vivienda est vendida, se guarda la informacin del
nombre y NIF del nuevo propietario. Se pide:
a) Definir los tipos de datos capaces de describir toda esta informacin, sabiendo que las
claves para acceder a la informacin relativa a una vivienda son escalera, planta y puerta.
b) Definir una operacin que teniendo como dato de entrada el NIF de un comprador
verifique si realmente es un comprador y cuntas viviendas son de su propiedad.
15. El Instituto Nacional de Estadstica quiere guardar los datos de las ltimas elecciones locales,
autonmicas, europeas y generales en cada una de las 50 provincias espaolas. Por cada
eleccin se guardar el nmero de votos a cada uno de los 5 partidos que se presentan.
a) Definir las estructuras de datos ms adecuadas para guardar la informacin anterior.
b) Implementar un algoritmo que dado un tipo de eleccin y una provincia devuelva el partido
ganador.
c) Implementar un algoritmo que devuelva las provincias en las que el mismo partido ha
ganado todas las elecciones. Utilizar el algoritmo del apartado b). Definir la estructura de
datos ms adecuada para devolver el resultado.
d) Implementar un algoritmo que, dadas una elecciones, devuelva los votos acumulados por
cada partido en todas las provincias. Utilizar la estructura de datos ms adecuada para
devolver el resultado.
16. En una determinada carrera pueden cursarse un total de 50 asignaturas codificadas del 1 al
50. Por cada uno de los 100 alumnos que la cursan, codificados de 1 a 100, queremos
guardar aquellas asignaturas en que se encuentran matriculados y aquellas que han
aprobado.
a) Definir las estructuras de datos ms adecuadas para contener la informacin anterior.
b) Implementar un algoritmo que dada una asignatura, escriba en primer lugar los cdigos de
los alumnos que se encuentran matriculados en la misma y despus los de aquellos que la
tienen aprobada.
c) Implementar un algoritmo que dado un grupo de alumnos, escriba los cdigos de las
asignaturas que tienen aprobadas todos ellos. Definir el tipo ms adecuado para
almacenar un grupo de alumnos.
d) Implementar un algoritmo que dado un alumno, escriba los cdigos de todos aquellos
alumnos que se encuentren matriculados junto con l en alguna asignatura. Escribir cada
alumno una sola vez.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 26 -
17. En una fbrica se elaboran 500 productos diferentes, cada uno de los cuales puede contener
varias de hasta 200 piezas diferentes. Cada producto no puede tener dos piezas iguales.
a) Definir la estructura de datos ms adecuada que nos permita guardar los 500 productos
con la composicin de cada uno de ellos.
b) Definir la estructura de dato ms adecuada que nos permita guardar el nmero de
unidades de cada producto fabricadas en la ltima semana.
c) Dadas las estructuras de los apartados anteriores, escribir un algoritmo que calcule el
nmero de piezas de cada tipo consumidas en la ltima semana. Elegir la estructura de
datos ms adecuada para devolver el resultado.
18. Queremos guardar la informacin sobre los canales de televisin que se han visto cada da de
la semana. Por cada uno de los 10 canales existentes queremos guardar el nmero de veces
que se ha visto cada da y el tiempo de sintonizacin total por da medido en horas.
Supondremos la estructura inicializada con los datos de un determinado usuario.
a) Definir las estructuras de datos ms adecuadas para guardar la informacin anterior.
b) Suponiendo que un da d el usuario ha visto el canal c entre las t1 y t2 horas, desarrollar
un algoritmo que actualice la estructura con esta nueva informacin.
c) Desarrollar un algoritmo que devuelva el tiempo que el usuario ha visto cada canal durante
toda la semana y el canal ms visto. Utilizar la estructura de datos ms adecuada para
devolver los resultados.
d) Desarrollar un algoritmo que devuelva el canal que ms tiempo estuvo viendo un usuario y
el da en que ocurri.