Estructura de Datos y de la Información

Anuncio
Universidad Rey Juan Carlos
Curso 2012/13
Ingeniería Técnica en Informática de Gestión
Estructura de Datos y de la Información
Examen Final Mayo 2013
Fecha: 18-5-2013
PRIMER PARCIAL - soluciones
Ejercicio 1. (Puntuación total: 3,5 puntos)
PROCEDURE PrefijoMax(lista: LE.TipoLista;
n: Natural;
prefijo: IN OUT LE.TipoLista) IS
salida: LE.TipoLista;
cursor: LE.TipoCursor := LE.PrimerCursor(lista);
suma : Natural := 0;
BEGIN
LE.CrearVacia(salida);
WHILE LE.EsCursorValido(lista,cursor) AND THEN
LE.Elemento(lista,cursor) >= 0 AND THEN
suma + LE.Elemento(lista,cursor) <= n LOOP
suma := suma + LE.Elemento(lista,cursor);
LE.InsertarFinal(salida, LE.Elemento(lista,cursor));
cursor := LE.Siguiente(lista, cursor);
END LOOP;
-- terminar de recorrer la lista para ver negativos
WHILE LE.EsCursorValido(lista,cursor) AND THEN
LE.Elemento(lista,cursor) >= 0 LOOP
cursor := LE.Siguiente(lista, cursor);
END LOOP;
IF LE.EsCursorValido(lista,cursor) AND THEN
LE.Elemento(lista,cursor) < 0 THEN
LE.Destruir(salida);
RAISE HayNegativos;
ELSE
LE.Copiar(prefijo, salida);
LE.Destruir(salida);
END IF;
END PrefijoMax;
Ejercicio 2. (Puntuación total: 2 puntos)
OPERACIONES
(* observadoras no selectoras *)
TamHastaPrioridad: TipoColaP x TipoPrioridad -> Natural
VARIABLES
cola: TipoColaP; e: TipoElemento;
p: TipoPrioridad;
ECUACIONES
TamHastaPrioridad (CrearColaVacía, p) = 0
TamHastaPrioridad (Insertar(e,cola), p) =
SI MejorOIgual(Prioridad(e), p)
-> 1 + TamHastaPrioridad(cola, p)
| TamHastaPrioridad(cola, p)
1
Ejercicio 3. (Puntuación total: 4,5 puntos)
PROCEDURE Mezcla (entrada: IN TipoCola; salida: IN OUT TipoCola) IS
-- instanciación del paquete pilas
PACKAGE MiPila IS NEW Pilas (TipoElemento);
-- variables
copia: TipoCola;
-- para copiar la entrada
pila_noprop: MiPila.TipoPila; -- para almacenar los elementos que no cumplen 'propiedad'
cola_prop: TipoCola;
-- para almacenar los elementos que cumplen 'propiedad'
ele: TipoElemento;
BEGIN
IF EsColaVacia(entrada) THEN
CrearColaVacia(salida);
ELSE
Copiar(copia, entrada);
MiPila.CrearPilaVacia(pila_noprop);
CrearColaVacia(cola_prop);
WHILE NOT EsColaVacia(copia) LOOP
ele := PrimeroCola(copia);
IF Propiedad(ele) THEN
Insertar(ele, cola_prop);
ELSE
MiPila.Apilar(ele, pila_noprop);
END IF;
Eliminar(copia);
END LOOP;
CrearColaVacia(salida);
WHILE NOT EsColaVacia(cola_prop) AND THEN NOT MiPila.EsPilaVacia(pila_noprop) LOOP
Insertar(Combina(PrimeroCola(cola_prop), MiPila.Cima(pila_noprop)), salida);
Eliminar(cola_prop);
MiPila.Desapilar(pila_noprop);
END LOOP;
-- una de las dos estructuras auxiliares puede no estar vacía
Destruir(cola_prop);
MiPila.Destruir(pila_noprop);
END IF;
EXCEPTION
WHEN MiPila.PilaLLena =>
Raise ColaLLena;
END Mezcla;
2
Descargar