Metodolog´ıa y Tecnolog´ıa de la Programación. Control 2.2

Anuncio
Metodologı́a y Tecnologı́a de la Programación. Control 2.2
Pregunta 1 (0.5 ptos)
Completar la clase Conjunto que implementa el TDA Conjunto (mutable). Debe utilizarse una representación basada en
el TDA Lista (mutable). Se adjuntan las especificaciones informales y métodos en Java para ambos TDAs.
public class Conjunto {
private Lista l;
...
} // fin class Conjunto
Conjunto=tipo de datos es crea, vacio, pertenece, inserta, suprime, cardinal.
DESCRIPCIÓN: Los valores del TDA Conjunto son conjuntos de elementos del tipo Elemento. El TDA Conjunto es mutable: las
operaciones inserta y suprime añaden y suprimen elementos del conjunto respectivamente.
OPERACIONES:
crea() devuelve (Conjunto)
efecto: Devuelve un conjunto vacı́o.
vacio(C:Conjunto) devuelve (booleano)
efecto: Devuelve cierto si C es vacı́o y falso en caso contrario.
cardinal(C:Conjunto) devuelve (entero)
efecto: Devuelve el número de elementos de C.
inserta(C:Conjunto, E:Elemento)
requerimientos: E∈C.
/
modifica: C.
efecto: Añade E al conjunto C.
suprime(C:Conjunto, E:Elemento)
requerimientos: E∈C.
modifica: C.
efecto: Suprime E del conjunto C.
pertenece(C:Conjunto, E:Elemento) devuelve (booleano)
efecto: Devuelve cierto si E pertenece al conjunto C y falso en caso contrario.
Clase Conjunto
class Conjunto
Clase Lista: class Lista
Clase Elemento
class Elemento
Clases Internas: class Lista.Posicion
Constructores
Conjunto()
Métodos
boolean vacio()
int cardinal()
void inserta(Elemento e)
void suprime(Elemento e)
boolean pertenece(Elemento e)
Constructores: Lista()
Constructores
Elemento(int valor)
Métodos:
Métodos
Lista.Posicion fin()
int valor()
Lista.Posicion primero()
Lista.Posicion siguiente(Lista.Posicion p)
Lista.Posicion anterior(Lista.Posicion p)
boolean vacia()
Elemento recupera(Lista.Posicion p)
int longitud()
boolean iguales(Lista.Posicion p1, Lista.Posicion p2)
void inserta(Lista.Posicion p, Elemento e)
void suprime(Lista.Posicion p)
void modifica(Lista.Posicion p, Elemento e)
TDA Lista: Especificación Informal
Lista = TDA con operaciones crea, fin, primero, siguiente, anterior, vacia, recupera, longitud, iguales, inserta, suprime,
modifica.
DESCRIPCIÓN: Los valores del TDA Lista son listas de elementos del tipo Elemento. Las posiciones son del tipo Posicion. Las
listas son mutables: inserta, suprime y modifica añaden, eliminan y modifican elementos.
OPERACIONES:
crea() devuelve (Lista)
efecto: Devuelve la lista vacı́a.
fin(L:Lista) devuelve (Posicion)
efecto: Devuelve la posición fin de la lista.
primero(L:Lista) devuelve (Posicion)
requerimientos: longitud(L)> 0.
efecto: Devuelve la posición del primer elemento.
siguiente(L:Lista; P:Posicion) devuelve (Posicion)
requerimientos: P6=fin(L).
efecto: Devuelve la posición sucesora de P.
anterior(L:Lista; P:Posicion) devuelve (Posicion)
requerimientos: longitud(L)> 0. P6=primero(L).
efecto: Devuelve la posición predecesora de P.
vacia(L:Lista) devuelve (booleano)
efecto: Devuelve cierto si L es vacı́a, y falso en caso contrario.
recupera(L:Lista; P:Posicion) devuelve (Elemento)
requerimientos: P6=fin(L).
efecto: Devuelve en el elemento que ocupa la posición P.
longitud(L:Lista) devuelve (entero)
efecto: Devuelve la longitud de la lista L.
iguales(L:Lista; P1:Posicion, P2:Posicion) devuelve (booleano)
efecto: Devuelve cierto si P1 y P2 son iguales, y falso en caso contrario.
inserta(L:Lista; P:Posicion; E:Elemento)
modifica: L.
efecto: Inserta E en la posición predecesora de P. Los casos del tipo Posicion quedan indefinidos.
suprime(L:Lista; P:Posicion)
requerimientos: P6=fin(L).
modifica: L.
efecto: Suprime el elemento que ocupa la posición P. Los casos del tipo Posicion quedan indefinidos.
modifica(L:Lista; P:Posicion; E:Elemento)
requerimientos: P6=fin(L).
modifica: L.
efecto: Modifica el elemento que ocupa la posición P, cambiándolo por el nuevo elemento E.
Resolución Control 2.2
Pregunta 1 (0.5 ptos)
public class Conjunto {
private Lista l;
public Conjunto()
{ l = new Lista(); }
public boolean vacio()
{ return l.vacia(); }
public int cardinal()
{ return l.longitud(); }
public void inserta(Elemento e) { l.inserta(l.fin(),e); }
public void suprime(Elemento e) {
Lista.Posicion p=l.primero();
while(l.recupera(p).valor()!=e.valor()) p=l.siguiente(p);
l.suprime(p);
}
public boolean pertenece(Elemento e) {
if (l.vacia()) return false;
for(Lista.Posicion p=l.primero();!l.iguales(p,l.fin());p=l.siguiente(p)) {
if (l.recupera(p).valor()==e.valor()) return true;
}
return false;
}
} // fin class Conjunto
Descargar