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