You are on page 1of 26

ESTRUCTURAS DE DATOS I

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)

'

Def. por usuario: Enumerado, Subrango

'

Estructurados
Vector (ARRAY)
Conjunto (SET)
Registro (RECORD)
Fichero (FILE)

'

Puntero (POINTER)

'

2.2. Tipos escalares


Definicin:
Un tipo de datos es escalar si existe una relacin de orden entre todos los
elementos de ese tipo.
Si un tipo es escalar, podremos utilizar entonces los Operadores Relacionales:
, <>, <, <, >, >
con los valores de ese tipo.
Definicin:
Un tipo de datos es ordinal si es escalar y adems cada elemento tiene
predecesor, sucesor y ordinal (podemos asociar a un elemento su anterior, su
posterior y el puesto que ocupa dentro del tipo)
Los tipos escalares en Pascal son todos ordinales a excepcin del tipo Real. Este
ltimo tipo no puede ser un tipo ordinal, ya que el conjunto de los nmeros reales no es un
conjunto contable. Esto es, no podemos decir que un valor real es justo el siguiente de otro.
Siempre habr un nmero infinito de reales entre dos cualesquiera.
En Pascal podemos utilizar los operadores Pred, Succ y Ord para calcular,
respectivamente, el predecesor, sucesor y ordinal de un valor de cualquier tipo ordinal.
Ejemplo
En el caso de los nmeros enteros Pred(4)=3=Succ(2)=Succ(Succ(1)). Ord(7)=7,
Ord(4)=4 y en general Ord(i)=i, para todo i entero representable.
Dentro de los tipos escalares, distinguiremos entre los normalizados y los que pueden
ser definidos por el usuario.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 6 -
2.2.1. Tipos normalizados
Podemos llamar tipos normalizados a aquellos que ya estn predefinidos en el lenguaje y
para los que el usuario no tiene que definir su estructura ni sus posibles valores.
Para cada uno de los tipos normalizados veremos el conjunto de valores asociados,
distinguiremos si es o no es un tipo ordinal, las operaciones asociadas al tipo y cul es su
representacin en el lenguaje de programacin Pascal.
Tipo Entero
Conjunto de valores asociado
Es un subconjunto de ZZ cuyo tamao variar segn el ordenador y/o el lenguaje de
programacin y el rango de representacin que admita. Esto es, los valores abarcados
dependern del nmero de bits utilizados y de la representacin elegida ( signo-magnitud,
complemento a uno, complemento a dos, ...). Se suele definir este conjunto como
[-( MAX_ENTERO +1) , MAX_ENTERO]
donde MAX_ENTERO es una constante que representa el mximo valor entero
representable.
Es un tipo escalar y ordinal, ya que ZZ es un conjunto contable.
Operaciones asociadas:
- Operadores aritmticos: + , - , * , DIV, MOD,...
- Operadores relacionales.
- Operadores ordinales: Pred, Succ, Ord.
Implementacin:
Normalmente binario natural con signo. Por lo tanto, si se representa con n bits
MAX_ENTERO = 2
n-1
- 1. En Turbo Pascal tenemos 5 implementaciones del tipo Entero
en funcin del nmero de bits utilizados y por tanto del rango de valores representables:
ShortInt, Integer, LongInt, Byte y Word.
Tipo Real
Conjunto de valores asociado
Es un subconjunto de RR cuyo tamao variar segn el ordenador y/o el lenguaje de
programacin, el rango de representacin y la precisin que admita. Se suele definir este
conjunto como
{[-MAX_REAL, -MIN_REAL], 0, [MIN_REAL, MAX_REAL]}
donde MAX_REAL es una constante que representa el mximo valor real representable y
MIN_REAL es una constante que representa el mnimo valor real positivo distinguible del
0 por el ordenador. Grficamente
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 7 -
0
-MIN_REAL
MIN_REAL
MAX_REAL -MAX_REAL
En la figura anterior los nmeros reales representables, exceptuando el 0, se
distribuyen en las zonas sombreadas.
La imprecisin en la implementacin nos puede llevar a errores de clculo. Es
habitual intentar eliminar errores debido a la imprecisin con tcnicas como cambiar
expresiones del tipo x = y por expresiones del tipo x - y < , es decir, ms que ver si
dos nmeros reales son exactamente iguales, conviene ver si la diferencia es menor que un
valor infinitesimal, por ejemplo =10
-10
.
Es un tipo escalar, pero NO ordinal, ya que RR no es un conjunto contable.
Operaciones asociadas
- Operadores aritmticos: + , - , * , /,...
- Operadores relacionales.
Como la mayora de los lenguajes de alto nivel, Pascal proporciona una serie de
funciones predefinidas que corresponden a distintas operaciones con nmeros reales.
Algunas de las ms usadas son las siguientes:
Abs(x): Devuelve el valor absoluto de la variable x.
Sqr(x): Devuelve el cuadrado de x.
Sqrt(x): Devuelve la raz cuadrada de x, para x >= 0
Exp(x): Proporciona la exponencial de x, es decir e
x
.
Sin(x): Devuelve el seno de x
Cos(x): Devuelve el coseno de x.
...
Implementacin
Normalmente los reales se representan en coma flotante, distinguiendo el signo, el
exponente y la mantisa normalizada. En Turbo Pascal disponemos 5 implementaciones del
tipo Real en funcin del tamao de su representacin y por tanto del rango de valores
representables: Real, Single, Double, Extended y Comp.
Entre los tipos Entero y Real es posible realizar una Conversin de tipos. Un valor
Entero normalmente se admite como Real
1
. Para convertir un valor Real a Entero se
utilizan los operadores Trunc y Round.
Trunc(x): deja la parte entera de x eliminando los decimales.
Round(x) = trunc(x+0.5).
1
No siempre: En MODULA-2 hay que utilizar un operador especfico para que un valor
Entero pueda aparecer en una expresin Real.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 8 -
Tipo Carcter
Conjunto de valores asociado
Un conjunto de caracteres imprimibles que comprende:
- Alfabeto latino
- Dgitos rabes
- Smbolos de puntuacin y caracteres especiales
- Caracteres de control
En principio, y con esta definicin no es un tipo normalizado, ni sabemos si es
escalar u ordinal. Para subsanar este problema lo que se hace es utilizar una representacin
de los distintos caracteres que establezca un orden entre los mismos, asocindolos con
nmeros enteros. El resultado es una tabla de caracteres posibles en los que cada carcter
ocupa siempre una posicin bien definida. Aunque existen distintas tablas, se suele admitir
la tabla ASCII como estndar. En su versin bsica esta tabla contiene 95 caracteres
imprimibles y 33 de control.
Es un tipo escalar y ordinal.
Operaciones asociadas:
- Operadores relacionales.
- Operadores ordinales: Pred, Succ, Ord.
Entre los tipos Entero y Carcter es posible realizar una Conversin de tipos, basada
en el orden impuesto por la tabla ASCII. La operacin
Ord: carcter entero
Ord(c) = posicin en tabla ASCII del carcter c
y la operacin inversa:
Chr: entero carcter
Chr(i) = carcter que ocupa la posicin i en la tabla ASCII (si existe)
permiten realizar dicha conversin. Estas operaciones se relacionan mediante las
propiedades siguientes:
Ord(chr(i)) = i, si existe chr(i),
Chr(ord(c)) = c.
Implementacin
Normalmente un carcter se representa utilizando la representacin binaria de su
ordinal.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 9 -
Ejemplo
El carcter 'A' ocupa la posicin 65 en la tabla ASCII, es decir, ord('A')=65. As
pues, se utilizar el valor 65 en binario para representar este carcter.
Tipo Lgico
Conjunto de valores asociado
Este tipo admite tan slo dos valores posibles:{falso, cierto} (o el conjunto formado
por un par de constantes equivalente).
Es un tipo escalar y ordinal, ya que falso < cierto.
Operaciones asociadas
- Operadores lgicos: NOT, AND, OR, ...
- Operadores relacionales.
- Operadores ordinales: Pred, Succ, Ord.
Implementacin
La ms simple asume el valor entero 1 para cierto y 0 para falso.
2.2.2. Tipos escalares definidos por el usuario
Dentro de este apartado estudiaremos una serie de tipos escalares que proveen una serie de
lenguajes, entre los cuales est el Pascal. El lenguaje nos dar la posibilidad de definirlos,
pero es el programador de quien depende su definicin concreta.
Normalmente la necesidad de utilizar estos tipos surge a la hora de seleccionar un
determinado conjunto restringido de valores. Al usar un tipo que slo admite los valores
posibles para un problema dado, estamos simplificando el diseo del algoritmo y evitando
ciertos errores que pueden surgir cuando las variables toman valores no deseados.
Ejemplo:
Un programa gobernado por un men de seleccin: un cajero automtico en el
que podemos elegir entre 5 opciones (pulsar 1, 2, 3, 4 5); dependiendo de la
opcin se ejecuta una accin u otra. Puede ser ms interesante utilizar una
variable que slo pueda tomar como valores (1,2,3,4,5) que una variable que
pueda tomar cualquier valor entero.
Dado que los tipos escalares definidos por el usuario nos permiten seleccionar un
subconjunto de otro conjunto ordinal, son tipos ordinales.
Tipo enumerado
Se llama as porque lo definimos enumerando todos y cada uno de los valores que pueden
tomar, utilizando para ello identificadores:
<nombre_tipo> = (<valor_1>, <valor_2>,..., <valor_n>);
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 10 -
Ejemplo
TYPE
dia_semana = (lunes,martes,miercoles,jueves,viernes,sabado,domingo);
palo = (oros, copas, espadas, bastos);
colores = (verde, rojo, azul, amarillo);
Para definir el tipo enumeramos los valores que son de inters entre parntesis y
mediante una lista de identificadores separados por comas. El orden de la declaracin es
significativo y atendiendo a este orden podemos afirmar que cualquier definicin de tipo
enumerado, produce un tipo escalar. Esto nos permitir utilizar los operadores relacionales.
Siguiendo con el ejemplo anterior, tal y como estn hechas las definiciones se
cumplir
lunes < martes, jueves > martes, azul < amarillo,...
Adems, el orden establecido en la declaracin tambin nos permite afirmar que
cualquier definicin de un tipo enumerado, produce un tipo ordinal: al 1 se le asigna la
posicin 0, al 2 la 1, ...
La implementacin interna del tipo est basada en el tipo entero, ya que a cada
identificador internamente se le asocia un valor entero dado por su posicin en la
definicin.
Al trabajar con un tipo enumerado es importante darse cuenta de que los valores que
enumeramos para definirlo son, a todos los efectos, identificadores. Por lo tanto, estos
valores no pueden leerse desde teclado ni escribirse en pantalla. Es habitual que para
realizar un tratamiento, haya que utilizar un condicional generalizado de tipo CASE.
Ejemplo:
p: colores;
...............
CASE p OF
verde: writeln ('verde');
rojo: writeln ('rojo');
azul: writeln ('azul');
amarillo: writeln ('amarillo')
ELSE
writeln ('error, no existe ese color')
END
Tipo subrango
Este tipo recibe este nombre porque se define como un subconjunto dentro de un tipo base
ya definido y ordinal, indicando para ello el valor inicial y el valor final del subconjunto:
<nombre_tipo> = Valor
inicial
..Valor
final
;
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 11 -
Ejemplo
TYPE
Alfabeto ='A' ..'Z';
opciones =1..5;
laborables = lunes ..viernes;
(supuesta la definicin previa del tipo enumerado dia_semana)
En un subrango estn todos los valores entre el inicial y el final (ambos incluidos) y
en el mismo orden que estn en el tipo base. Las variables de tipo subrango heredan las
propiedades y operaciones del tipo base a partir del que se han definido.
Teniendo en cuenta el ejemplo anterior, no podremos leer ni escribir una variable
del tipo laborables, como tampoco podamos leer o escribir una variable del tipo
dia_semana. Sin embargo, s podemos aplicar estas operaciones a las variables
del tipo opciones, puesto que son un subrango del tipo Entero.
Se heredan las operaciones, pero es MUY ACONSEJABLE replantearse las mismas
al utilizar una variable de tipo subrango, por si el resultado de la operacin da lugar a un
valor fuera del rango definido.
Ejemplo
VAR
w, x, y : opciones;
...
w := y + z;
Son validos los siguientes valores?
y=1 z=2 SI
y=4 z=5 NO , el resultado se encuentra fuera del rango de opciones.
2.3. Tipos estructurados
Los tipos estructurados son aquellos que nos permiten almacenar ms de un dato en cada
una de las variables en un momento dado. El lenguaje nos dota de las herramientas para
definir su estructura y tambin de las operaciones bsicas de manipulacin, pero es el
programador el que elige y decide la organizacin concreta de los datos que lo forman.
Una vez definidos los nuevos tipos, podrn declararse variables de los mismos como si se
tratar de tipos escalares. Adems el usuario podr acceder a las distintas componentes de
las variables con operaciones especficas cuya sintaxis se incluye en el lenguaje.
En concreto en este apartado estudiaremos los tipos estructurados bsicos: Vector,
Conjunto y Registro.
Antes de poder estudiar cada uno de estos tres tipos es necesario definir dos
conceptos a los que nos referiremos muy a menudo a partir de ahora.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 12 -
Definicin
Denominaremos tipo base a cualquier tipo que nos sirva como constructor de una
estructura de datos, predefinido o no (en este caso, la definicin correcta debe ser
previa al uso). Normalmente, usaremos la nomenclatura TB Tipo_Base T
b
.
Denominaremos tipo ndice a cualquier tipo ordinal (es decir, Entero, Carcter,
Lgico, Enumerado, Subrango) que nos permita identificar un valor de forma
nica en una estructura de datos. Normalmente usaremos la nomenclatura TI
Tipo_Indice T
i
.
2.3.1. Tipo Vector
Definicin 1:
Conjunto finito y ordenado de elementos homogneos.
Definicin 2:
Conjunto de pares (x, i) donde i indica la posicin dentro del vector del valor x
entre un conjunto de valores del mismo tipo, el tipo base.
i T
i
; T
i
debe ser Ordinal.
x T
b
; T
b
puede ser cualquiera que ya est definido.
Definicin como TAD :
TAD: vector
Operaciones:
Crear: vector
El resultado es un nuevo vector, cuyos componentes no estn definidos.
Extraer: vector x tipo_indice tipo_base
Dado un vector v y un ndice i, devuelve el valor que est almacenado en la posicin i
del vector v.
Almacenar: vector x tipo_indice x tipo_base vector
Dado un vector v, un ndice i y un valor k del tipo base, devuelve un nuevo valor de v
que se diferencia del anterior porque el valor k se almacena en la posicin i de v
(destruyendo el que hubiera antes de la operacin)
Axiomas: A vector, i, j T
i
, x,y T
b
1) Extraer(Crear,i) = Error
2) Extraer(Almacenar(A,i,x),j) = Si i=j entonces x
sino Extraer(A,j)
3) Almacenar(Almacenar(A,i,x),j,y) = Si i=j entonces Almacenar(A,i,y)
sino Almacenar(Almacenar(A,j,y),i,x)
La estructura Vector est presente en casi todos los lenguajes de alto nivel. En
concreto, en Pascal, las operaciones con vectores las realizamos usando el tipo estructurado
predefinido ARRAY, con una sola dimensin. Las operaciones que hemos definido quedan
de la siguiente forma:
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 13 -
Crear :
TYPE
<nombre> = ARRAY [Tipo_indice] OF Tipo_base;
(* un Tipo_indice tpico es el subrango 1..N, N constante *)
VAR
A: <nombre>;
B: ARRAY [Tipo_Indice] OF Tipo_base;
(* si se quiere usar una creacin implcita del tipo *)
Extraer(A,i): A[i];
Almacenar(A,i,x): A[i] := x;
Implementacin
Los elementos de un vector se almacenan en posiciones consecutivas de memoria, a
partir de una direccin base, que es la del primer elemento. Esta implementacin permite el
acceso directo a un valor si conocemos la posicin en la que est almacenado, ya que slo
supone realizar un desplazamiento en memoria proporcional al ndice del elemento
buscado y al tamao necesario para almacenar el Tipo base.
Ejemplo
Si el tamao del tipo base es p, la posicin de memoria en la que encontraremos
el elemento i-simo ser Direccin =Base + (i-1)*p.
Cadenas de caracteres
Un caso especial del tipo vector es el vector de caracteres, que denominaremos tipo
CADENA (en Turbo Pascal, STRING).
Es un tipo que podramos definir como:
TYPE
<nombre> = PACKED ARRAY [0..n] OF CHAR;

<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;

vector_N = ARRAY [TI


1,
TI
2
, .., TI
n
] OF Tipo_base;
Si llamamos M a una variable de tipo vector_N, la notacin que utilizaremos para
referirnos a uno de sus elementos ser M[i
1
, i
2
, ...,i
n
], con i
1
TI
1
, i
2
TI
2
,..., i
n
TI
n
.
Implementacin
Los elementos de un vector multidimensional se almacenan en posiciones
consecutivas de memoria, fijndose previamente el orden en el que se recorren las
dimensiones. En el caso de las matrices, por ejemplo, existen lenguajes como el Pascal o el
C que utilizan un almacenamiento por filas, mientras otros, como el Fortran, utilizan un
almacenamiento por columnas.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 15 -
Ejemplo
Sea A una matriz de tamao 2x3 de la forma
a a a
a a a
11 12 13
21 22 23

_
,

declarado como un vector bidimensional mediante


A : ARRAY [1..2, 1..3] OF Tipo_base;
Los dos tipos de almacenamiento citados daran lugar al siguiente orden en la
disposicin de los elementos en celdas consecutivas de memoria:
Almacenamiento por filas: a
11
, a
12
, a
13
, a
21
, a
22
, a
23
Almacenamiento por columnas: a
11
, a
21
, a
12
, a
22
, a
13
, a
23
2.3.2. Tipo Conjunto
Definicin:
Coleccin finita de elementos distintos y homogneos (del mismo tipo base) entre
los que no hay ninguna relacin de orden.
Definicin como TAD:
TAD: conjunto
Operaciones:
Crear: Conjunto
El resultado es un conjunto sin ningn elemento.
Esvacio: Conjunto Logico
Devuelve cierto slo si el conjunto est vaco. En otro caso devuelve falso.
Pertenece: Tipo Base x Conjunto Logico
Dado un conjunto y un valor de tipo base, el resultado es un valor lgico que indica si
dicho valor pertenece o no al conjunto.
Insertar: Conjunto x Tipo Base Conjunto
Dado un conjunto y un valor de tipo base, el resultado es un nuevo conjunto formado al
aadir a los elementos del conjunto original el valor de tipo base.
Union: Conjunto x Conjunto Conjunto
Dados dos conjuntos, el resultado es el conjunto que contiene todos los valores de
ambos.
Diferencia: Conjunto x Conjunto Conjunto
Dados dos conjuntos, el resultado es el conjunto que contiene los valores que se
encuentran en el primero pero no en el segundo.
Interseccion: Conjunto x Conjunto Conjunto
Dados dos conjuntos, el resultado es el conjunto que contiene los valores que se
encuentran en ambos conjuntos.
Inclusion: Conjunto x Conjunto Logico
Dados dos conjuntos, el resultado es un valor lgico que indica si el segundo est
contenido en el primero.
Igualdad: Conjunto x Conjunto Logico
Dados dos conjuntos, el resultado es un valor lgico que indica si son iguales.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 16 -
Axiomas: S
1
, S
2
conjunto, x, y T
b
1) Esvacio(Crear) = verdadero
2) Esvacio(Insertar(S
1
, x)) = falso
3) Pertenece(x, Crear) = falso
4) Pertenece(x, Insertar(S
1
, y)) = Si x=y entonces verdadero
sino Pertenece(x, S
1
)
5) Insertar(Insertar(S
1
, x), y) = Si x=y entonces Insertar(S
1
, x)
sino Insertar(Insertar(S
1
, y), x)
6) Union(S
1
, Crear) = S
1
7) Union(S
1
, Insertar(S
2
, x)) = Insertar(Unin(S
1
, S
2
), x)
8) Diferencia(Crear, S
1
) = Crear
9) Diferencia(Insertar(S
1
, x), S
2
) =
Si Pertenece(x, S
2
) entonces Diferencia(S
1
,S
2
)
sino Insertar(Diferencia(S
1
,S
2
),x)
10) Interseccion(S
1
, Crear) = Crear
11) Interseccion(Insertar(S
1
, x), S
2
) =
Si Pertenece(x, S
2
) entonces Insertar(Interseccion(S
1
, S
2
), x)
sino Interseccion(S
1
, S
2
)
12) Inclusion(S, Crear) = verdadero
13) Inclusion(S
1
, Insertar(S
2
, x)) =
Si Pertenece(x, S
1
) entonces Inclusion(S
1
, S
2
)
sino falso
14) Igualdad(S
1
, S
2
) = Inclusin(S
1
, S
2
) Y Inclusin(S
2
, S
1)
Las operaciones que hemos definido quedan de la siguiente forma en Pascal:
Crear :
TYPE
<nombre_tipo> = SET OF Tipo_base;
VAR
S: <nombre_tipo>;
Esvacio: x = [];
Pertenece: x IN A, siendo x un valor de TB y A un conjunto.
Insertar:
a) un valor x de TB en el conjunto vaco: S := [x];
b) un valor x de TB en un conjunto S := S + [x];
(caso particular de la unin).
Union: D:= A + B
Diferencia: D:= A - B
Interseccion: D:= A * B
Inclusion: A <= B, es cierto si A B
A >= B, es cierto si A B
Igualdad: A = B (A <> B es cierto si A y B NO son iguales)
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 17 -
Un aspecto muy importante a tener en cuenta en el caso de los conjuntos es que el
tipo base utilizado debe ser finito y ordinal. Es ms, en la prctica debe tratarse de un tipo
con una cardinalidad reducida.
Ejemplo:
No podemos admitir como vlida la declaracin
<nombre_tipo>: SET OF INTEGER;
An cuando sabemos que el tipo Entero tiene cardinalidad finita, debido al modo
en que se implementan los conjuntos, esta excede con mucho el rango que puede
soportar este tipo. El cardinal mximo que acepta Pascal, por ejemplo, es 256.
Por ello, normalmente definiremos los conjuntos tomando como tipo base bien un
enumerado, bien un subrango.
<nombre_tipo>: SET OF min..max;
Una forma tpica de construir un conjunto es la siguiente:
C := []; (* asignamos a C el conjunto vaco *)
WHILE <condicion> DO
BEGIN
x := ....
C := C + [x]; (* Insertamos x en el conjunto C usando la unin*)
END;
Sin embargo esta no es la nica forma de construir un conjunto. Si queremos definir
por extensin un conjunto, utilizamos los corchetes, [ ] y separamos mediante comas sus
distintas componentes, o bien las definimos como un subrango. Si no incluimos ningn
elemento entre los corchetes, nos estaremos refiriendo al conjunto vaco.
C := [x
1
, x
2
, x
3
];
C := [1..5];
La prueba de pertenencia mediante el operador IN es la herramienta bsica de la que
disponemos para tratar con los elementos de un conjunto. Una vez que hemos aadido un
valor a un conjunto, no podemos acceder a l, slo preguntar si ese valor pertenece al
conjunto.
Conociendo el tipo base del conjunto (ya hemos dicho que tiene que ser un tipo
ordinal y de cardinalidad limitada), un procedimiento habitual para poder encontrar el
mnimo en un conjunto es el siguiente:
VAR
C: SET OF V
min
..V
max
;
...
i:= V
min
;
enc := false;
WHILE (NOT enc) AND (i <= V
max)
DO
BEGIN
enc := i IN C;
IF (NOT enc) THEN i := i+1
END;
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 18 -
Implementacin
En Pascal el tipo SET se representa mediante una secuencia de valores lgicos
(generalmente bits), de tal forma que el valor i-simo indica si la componente i-sima
pertenece o no al conjunto.
Ejemplo
VAR
s: SET OF 0..9;
...
s:=[2,4,5,9];
En la memoria del ordenador el conjunto anterior se representa mediante la
siguiente secuencia de bits:
0 1 2 3 4 5 6 7 8 9
0 0 1 0 1 1 0 0 0 1
El uso de esta representacin permite realizar las distintas operaciones entre
conjuntos de forma muy eficiente, ya que stas se reducen a operaciones elementales bit a
bit.
2.3.3. Tipo Registro
Definicin 1:
Un registro es una estructura de datos con un nmero fijo de componentes
heterogneos y distinguibles.
Cada componente se suele denominar Campo y se distingue por su Identificador.
Definicin 2:
Un registro es un conjunto de pares (id, x) donde id indica un identificador de
campo y x el valor de dicho campo.
Definicin como TAD:
TAD: Registro
Operaciones:
Crear: Registro
El resultado es un registro, cuyos campos no estn definidos.
Extraer
i
: Registro x Id
i
Tipobase
i
Dado un registro y un identificador de campo, devuelve el valor de tipo base
almacenado en ese campo.
Almacenar
i
: Registro x Id
i
x Tipobase
i
Registro
Dado un registro, un identificador de campo y un valor de tipo base, devuelve un nuevo
valor del registro que se diferencia del anterior porque se ha sustituido el valor anterior
del campo asociado al identificador por el nuevo valor de tipo base.
Hay tantas operaciones Extraer y Almacenar diferentes como diferentes identificadores de campo haya
en el registro.
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 19 -
Axiomas: r registro, id
i
, id
j
, x,y T
b
1) Extraer(Crear,id) = error
2) Extraer
j
(Almacenar
i
(r,id
i
,x),id
j
) = Si id
i
= id
j
entonces x
sino Extraer
j
(r, id
j
)
3) Almacenar
j
(Almacenar
i
(r,id
i
,x),id
j
,y) =
Si id
i
= id
j
entonces Almacenar
j
(r, id
j
, y)
sino Almacenar
i
(Almacenar
j
(r,id
j
,y),id
i
,x)
La representacin que utilizaremos en Pascal de las operaciones anteriores es la
siguiente:
Crear :
TYPE
<nombre> =RECORD
id
1
: TipoBase_1;
id
2
: TipoBase_2;
...
id
n
: Tipo Base_n
END;
VAR
r: <nombre>;
Extraer
i
(r,id
i
): r.id
i
Almacenar
i
(r,id
i
,x): r.id
i
:= x
Implementacin
Como en el caso del vector, los elementos de un registro se almacenan en posiciones
consecutivas de memoria a partir de un direccin base, en el mismo orden en el que se ha
hecho la declaracin de los campos.
Es usual utilizar los registros en combinacin con la instruccin WITH, que nos
permite especificar una nica vez el identificador de nivel superior (el identificador del
registro) y acceder directamente a los campos. De esta forma se simplifica la escritura del
cdigo y se optimiza el acceso a los elementos del registro (slo se carga una vez la
direccin base). Por ejemplo, en el caso de la variable r de tipo <nombre> declarada
anteriormente, podemos acceder a sus distintos campos de las dos formas siguientes:
r.id
1
:= ....;
r.id
2
:=....;
r.id
n
:= r.id
1
+ r.id
2
WITH r DO
BEGIN
id
1
:= ....;
id
2
:= ....;
id
n
:= id
1
+ id
2
END
Tema 2. Tipos y estructuras bsicas E04. Estructuras de datos I
- 20 -
Registros con parte variante
El estudio de los registros se generaliza al introducir los registros con parte variante.
Realmente la estructura Registro hay que verla como una estructura de datos que, en
general, est formada por una serie de campos fijos y, opcionalmente, un discriminante y
una parte variante. El registro toma una estructura concreta dependiendo del valor actual
del discriminante:

'

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.

You might also like