Está en la página 1de 4

POO PRÁCTICA 6.

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):

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 )

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):

public class Main {


public static void main(String [] args) {
// Con el orden natural
System.out.println("Orden natural");
Anagrama an1 = new Anagrama();
for(String arg : args) {
an1.nuevaPalabra(arg);
}
an1.mostrarEnConsola();

// Con un orden alternativo


System.out.println();
System.out.println("Orden alternativo");
Anagrama an2 = new Anagrama(new SatPalabra());
for(String arg : args) {
an2.nuevaPalabra(arg);
}
an2.mostrarEnConsola();
}
}

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 )

Ejercicio 2. (proyecto prLlaves)


Una llave está formada por un número determinado de dientes, cada uno de una altura
(una llave se representará como una lista de enteros). Inicialmente las llaves tienen sus
2
dienttes sin limaar a una altu
ura de 10 m milímetros, obteniéndos
o se el perfil ddeseado lim
mando
cada uno de esttos dientes una altura ni (entre 0 y 10), de forma
f que lla altura fin
nal de
cada uno de estoos dientes seea 10 - ni.
Una cerradura tiene un bombillo
b ccon un númmero deterrminado dee “anclajes””. Al
introducir una llave en el e bombilloo de una cerradura
c cada diente de la llav ve se
correesponderá con
c un anclaaje del bom mbillo. Cadaa anclaje pu
uede llevar hasta 4 corrtes, a
los ccuales llammaremos “m marcas”. Caada marca estará a un na altura dde entre 0 y 10
milímmetros, commenzando deesde la basee del anclajee. (Una cerrradura se reepresentará como
una llista de conjjuntos de en
nteros, el coonjunto de marcas
m de caada anclaje))
Una llave abre unau cerradu ura si el núm
mero de dien ntes de la lllave coincidde con el nú
úmero
de aanclajes de la cerradu ura y, adem más, cada diente
d empuja el émbbolo del an nclaje
correespondientee de manera que niveela una de las marcass con la zoona de giro o. En
definnitiva, si exiiste una maarca cuyo vaalor sumado o con el dell diente corrrrespondientte sea
10, eentonces esee anclaje peermite la appertura. Si todos
t los an
nclajes perm miten la apeertura,
el boombillo giraa y la cerrad
dura se abre..
En laa siguiente figura
f vemo os, en la parrte superiorr, el frente y el perfil dee un bombilllo de
tres aanclajes, doonde se puede observarr la altura ded la zona de d giro y lass marcas dee cada
uno de los ancclajes. Vem mos tambiénn cómo el primer anclaje (el siituado más a la
izquiierda del diibujo) tienee dos marcaas, el segun ndo otras dos
d y el terrcero tres. En el
detallle de la paarte inferior derecha dde la figurra se puedeen ver las aalturas a que se
encuuentran las marcas
m de unn émbolo. E En la parte inferior
i izquuierda obser
ervamos cómmo un
dientte de una alttura 6 elevaaría lo suficiiente un ém
mbolo con un na marca a uuna altura 4 para
hacerr coincidir dicha
d marcaa con la zonna de giro.

bombbillo bommbillo (visto


(visto de dessde el frentee)
perfiil)

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());
}
}
}

También podría gustarte