Estructuras de datos y algoritmos Solución del examen del 5 de

Transcripción

Estructuras de datos y algoritmos Solución del examen del 5 de
Estructuras de datos y algoritmos
Ingeniería en Informática
Solución del examen del 5 de septiembre de 2008
Centro Politécnico Superior, Universidad de Zaragoza
Ejercicio 1:
espec árbolinferior
usa árbolesbinarios, booleanos, elementos
operaciones
esinferior: arbin arbin -> bool
ecuaciones A,Aizq,Ader,Bizq,Bder:arbin; e1,e2:elem
esinferior(vacío,A) = verdad
esinferior(A,vacío) = verdad
esinferior(plantar(e1,Aizq,Ader),plantar(e2,Bizq,Bder)) =
= (e1<e2)  esinferior(Aizq,Bizq)  esinferior(Ader,Bder)
fespec
función esinferior(a,b:arbin) devuelve bool
principio
si a = nil entonces devuelve verdad
sino_si b = nil entonces devuelve verdad
sino dev. (a.dato<b.dato) andthen esinferior(a.izq,b.izq) andthen esinferior(a.der,b.der)
fsi
fin
Ejercicio 2:
tipos ptnodo = puntero a nodo;
nodo = registro v:vector[1..10] de entero; sig:ptnodo freg;
lev = registro PR,UL:ptnodo freg
Parte 2.1:
algoritmo eliminarrepetidos(e/s l:lev; sal r:entero)
variables aux: ptnodo; índice,índ2,número:entero
principio
aux:=l.PR;
r:=0;
mq auxnil hacer
para índice:=1 hasta 9 hacer
número:=aux.v[índice];
si número0 entonces
para índ2:=índice+1 hasta 10 hacer
si número=aux.v[índ2] entonces
aux.v[índ2]:=0;
r:=r+1
fsi
fpara
fsi
fpara;
aux:=aux.sig
fmq
fin
Parte 2.2:
algoritmo distintos(ent l:lev; sal m:conjEnteros)
variables aux:ptnodo; índice:entero
principio
aux:=l.PR;
crear(m);
mq auxnil hacer
para índice:=1 hasta 10 hacer
si aux.v[índice]0 entonces poner(m,aux.v[índice]) fsi
fpara;
aux:=aux.sig
fmq
fin
Parte 2.3:
algoritmo eliminar(e/s l:lev; ent n:entero)
variables aux:ptnodo; índice:entero; buscandoprimero:booleano
principio
aux:=l.PR;
buscandoprimero:=verdad;
mq auxnil hacer
si buscandoprimero entonces
índice:=1;
mq aux.v[índice]n and índice<10 hacer
índice:=índice+1
fmq;
si aux.v[índice]=n entonces buscandoprimero:=falso fsi;
sino
para índice:=1 hasta 10 hacer
si aux.v[índice]=n entonces aux.v[índice]:=0 fsi
fpara
fsi;
aux:=aux.sig
fmq
fin
Ejercicio 3:
tipos ptrnodo = puntero a nodo;
nodo = registro dato:tarea; sig:ptrnodo freg;
cola = registro pri,ult:ptrnodo freg;
colatareas = vector[1..5] de cola
algoritmo crearcolatareas(sal ct:colatareas)
{Inicializa la estructura de datos, sin tareas}
algoritmo añadirtarea(e/s ct:colatareas;
ent t:tarea; ent p:1..5)
{Añade la tarea t con prioridad p en la cola ct}
algoritmo próximatarea(e/s ct:colatareas;
sal proxtarea:tarea; sal error:booleano)
{Selecciona la tarea a ejecutar y la elimina de la cola;
error devuelve verdad si no hay tareas pendientes}
variables auxptrnodo:ptrnodo; índicecola:entero
algoritmo siguientetarea(e/s c:cola;
sal t:tarea; sal error:booleano)
{devuelve en t la 1ª tarea de una cola FIFO c y la
borra de la cola; si la cola es vacía error:=verdad}
variables aux:ptrnodo
principio
si c.pri=nil entonces error:=verdad
sino
error:=falso;
aux:=c.pri;
t:=aux.dato;
c.pri:=c.pri.sig;
disponer(aux);
si c.pri=nil entonces c.ult:=nil fsi
fsi
fin
Cinco colas FIFO, una por cada prioridad.
... ... ... ... ... principio
error:=verdad;
índicecola:=1;
mq error and índicecola<=5 hacer
siguientetarea(ct[índicecola],proxtarea,error)
índicecola:=índicecola+1
fmq
fin
El coste en tiempo de la operación próximatarea es de orden constante (es decir, independiente del número de tareas en la cola).

Documentos relacionados