Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
Ejercicio 1. ( proyecto prAnagramasSimple)
1. Un anagrama de una palabra es otra palabra obtenida mediante una permutación de sus letras; por
ejemplo, saco es un anagrama de cosa. La signatura de una palabra se define como la cadena resultante
de ordenar alfabéticamente las letras de dicha palabra en minúsculas. Así, la signatura de saco y cOSa es
acos. Teniendo en cuenta esto se deberá construir una clase Palabra con las siguientes características:
Las instancias de esta clase deben mantener información de una palabra: una cadena de caracteres
que la representa y su correspondiente signatura.
El constructor de la clase recibirá como argumento la cadena de caracteres y deberá construir su
signatura.
La clase contará con un método boolean esAnagrama(Palabra), que determinará si la
palabra argumento es o no un anagrama de la receptora.
Redefine los métodos equals(Object), hashCode() y toString(), teniendo en cuenta
que para que dos palabras sean iguales basta con que lo sean las cadenas de caracteres
correspondientes, con independencia de su tipografía (no se distinguen mayúsculas de minúsculas).
Deberá existir un orden natural entre palabras basado en el orden lexicográfico de las cadenas
correspondientes con independencia de su tipografía.
Debe existir un método String getPalabra() que devuelve la cadena que representa la
palabra y otro String getSignatura() que devuelve la cadena que representa la signatura.
2. Crear la clase Anagrama que almacenará palabras a partir de cadenas de caracteres que le
proporcionaremos. En la información almacenada, cada palabra estará asociada con el conjunto de otras
palabras incluidas en esta clase con las que forma un anagrama (ver el listado más abajo).
Define un constructor para crear la clase que inicializará las estructuras necesarias para guardar la
información. Las palabras deberán estar ordenadas según el orden natural (ver el listado más
abajo).
Define el método void nuevaPalabra(String) que incluye una nueva palabra a partir de
la cadena que se le proporciona. Si la palabra ya se encuentra en la estructura no hace nada. Si no
estaba, deberá asociarse a cualquier palabra que forme anagrama con ella. Además, esas que
forman anagrama también deberán estar asociadas con ésta. Por ejemplo, al introducir mora, se
debe asociar con amor, roma y ramo y a su vez, estas tres se deben asociar con mora.
Define el método void mostrarEnConsola() que muestra la información contenida en el
anagrama en la salida estándar. El listado que hay más abajo muestra cómo hacerlo.
Si las palabras introducidas en un anagrama son olí, ramo, amor, cosa, caso, ostra, lío, roma,
astro, mora, lió, saco, el método que muestra en consola deberá producir la siguiente salida (nótese
que no se muestra la signatura de las palabras):
3. Además del orden natural definido para las palabras, construye una clase SatPalabra que
proporcione un orden alternativo para las palabras basado en la longitud de las cadenas y, en caso de
igualdad, en el orden ascendente lexicográfico, con independencia de su tipografía.
Incluir un nuevo constructor a la clase Anagrama que tome como argumento un objeto de
SatPalabra y cree un anagrama que genere el listado con esta ordenación alternativa:
1
lió ( )
lío ( olí )
olí ( lío )
amor ( mora ramo roma )
caso ( cosa saco )
cosa ( caso saco )
ramo ( amor mora roma )
roma ( amor mora ramo )
saco ( caso cosa )
astro ( ostra )
ostra ( astro )
Ejemplo del programa principal (las palabras se debe introducir como argumentos del programa):
La salida producida:
Orden natural
amor ( mora ramo roma )
astro ( ostra )
caso ( cosa saco )
cosa ( caso saco )
lió ( )
lío ( olí )
mora ( amor ramo roma )
olí ( lío )
ostra ( astro )
ramo ( amor mora roma )
roma ( amor mora ramo )
saco ( caso cosa )
Orden alternativo
lió ( )
lío ( olí )
olí ( lío )
amor ( mora ramo roma )
caso ( cosa saco )
cosa ( caso saco )
mora ( amor ramo roma )
ramo ( amor mora roma )
roma ( amor mora ramo )
saco ( caso cosa )
astro ( ostra )
ostra ( astro )
3
Se piide:
IImplementaar las clasess Llave y C ra con los métodos
Cerradur m esppecificados en el
ddiagrama dee clases mostrado más abajo.
CControlad por medioo de la exccepción LyCExcepti ion que ttanto los diientes
ccomo los anclajes
a ussados sean correctos. La excepcción debe sser de obligado
ccumplimiennto.
Probar el funcioonamiento de
d las clasess con la sigu
uiente aplicaación:
publi
ic class TestLlaves {
public sttatic void main(String[
m ] args) {
trry {
Llave l = new Lla
ave(3);
Cerradura c = new
w Cerradura(
(3);
Cerradura cc = ne
ew Cerradura
a(3);
Cerradura ccc = n
new Cerradur
ra(2);
l.limarDiente(2, 4);
l.limarDiente(1, 3);
l.limarDiente(0, 8);
System.out.printl
ln("Llave " + l);
c.agregarMarca(0,
, 8);
c.agregarMarca(1,
, 3);
c.agregarMarca(2,
, 4);
System.out.printl
ln("Cerradur
ra 1 " + c);
cc.agregarMarca(0
0, 3);
cc.agregarMarca(2
2, 9);
cc.agregarMarca(0
0, 8);
cc.agregarMarca(1
1, 3);
cc.agregarMarca(2
2, 4);
System.out.printl ra 2 " + cc);
ln("Cerradur
ccc.agregarMarca(
(0, 2);
ccc.agregarMarca(
(0, 5);
ccc.agregarMarca(
(1, 9);
System.out.printl
ln("Cerradur
ra 3 " + ccc
c);
System.out.printl
ln("¿Encaja la llave co
on la cerrad
dura 1? "
+ c.abrir(l));
System.out.printl
ln("¿Encaja la llave co
on la cerrad
dura 2? "
+ cc.abrir(l));
System.out.printl
ln("¿Encaja la llave co
on la cerrad
dura 3? "
+ ccc.abrir(l
l));
} catch (LyCEException e)
) {
System.out.printl
ln("Operació
ón incorrect
ta: " + e.ge
etMessage());
}
}
}