Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Wuolah Free 2017parcialsol
Wuolah Free 2017parcialsol
Carlesmg
Programación
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Ejercicio 1
p u b l i c c l a s s Test {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
s1 . setValor ( 1 5 0 ) ;
s2 . setValor ( 1 5 0 ) ;
s3 = s2 ;
}
}
C l a s s Prueba {
Sensor vSensores [ ] ;
v S e n s o r e s [ 0 ] = new S e n s o r ( ) ;
}
A Correcto.
B Falta indicar la cantidad de elementos del vector n=10.
C Falta la inicialización del vector vSensores.
D La posición 0 no existe, la primera posición del vector es 1.
3. Dada una clase Sensor, queremos definir un método para saber si dos Sensores son del mismo
tipo. Indica la signatura más adeucada para definir el método:
1
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3768637
Parcial Alumno:
Programacion (27-04-2017)
5. Dado el siguiente código en Java. Corrige los errores sobre el código para que éste sea correcto.
Sabemos que los instrumentos de cuerda frotada se afinan de forma distinta a los de cuerda
pulsada, y qué todos los de la misma familia se afinan igual (por ejemplo todos los de cuerda
pulsada). Sin embargo, la forma de tocar cada tipo de instrumento es propia de cada uno de
ellos. Si se señalan errores incorrectos restan.
public i n t e r f a c e I n s t r u m e n t o {
public void t o c a r ( ) ;
public void a f i n a r ( ) ;
}
public abstract c l a s s I n s t r u m e n t o s C u e r d a s implements I n s t r u m e n t o {
public I n s t r u m e n t o s C u e r d a s ( ) {
}
}
public void a f i n a r ( ) {
System . out . p r i n t l n ( ” Afinando c u e r d a p u l s a d a ” ) ;
}
}
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3768637
Alumno: Parcial
Programacion (27-04-2017)
Ejercicio 2
4 puntos (0.25+0.25+0.25+0.25+0.25+0.75+1.25+0.5+0.25)
public c l a s s Material {
private int codigo ;
p r i v a t e double p r e c i o ;
p u b l i c c l a s s Bota e x t e n d s M a t e r i a l {
private String t a l l a ;
p u b l i c c l a s s E squi e x t e n d s M a t e r i a l {
p r i v a t e S t r i n g marca ;
}
p u b l i c c l a s s Snowboard e x t e n d s M a t e r i a l {
private String color ;
}
1. ¿Qué clase crees que serı́a la más adecuada para implementar los métodos getPrecio y
getCodigo?. Razona tu respuesta. Reescribe dicha clase con los nuevos métodos y los cambios
que consideres oportunos.
La clase Material ya que cualquier material independientemente del tipo que sea tiene un
atributo código y precio, y por tanto, necesitaremos consultarlo.
p u b l i c c l a s s M a t e r i a l impplements M a t e r i a l T i e n d a {
private int codigo ;
p r i v a t e double p r e c i o ;
p u b l i c double g e t P r e c i o (){
return precio ;
}
p u b l i c i n t getCodigo (){
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3768637
Parcial Alumno:
Programacion (27-04-2017)
return codigo ;
}
}
3. Si tenemos un objeto Bota cuya referencia es miBota creado con el siguiente código. ¿Qué
mensajes le puedes mandar a miBota?.
M a t e r i a l miBota= new Bota ( c o d i g o , p r e c i o , t a l l a ) ;
getPrecio ( ) ;
getCodigo ( ) ;
5. Indica todas las formas con las que podemos referenciar a una bota de la tienda de alquiler.
Object
MaterialTienda
Material
Bota
public String t a l l a B o t a ( i n t i ){
S t r i n g nombre =””;
M a t e r i a l m= m i s M a t e r i a l e s . g e t ( i ) ;
i f (m i n s t a n c e o f Bota )
{
nombre= ( ( Bota ) m) . g e t T a l l a ( ) ;
}
r e t u r n nombre ;
}
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3768637
Alumno: Parcial
Programacion (27-04-2017)
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
7. Escribe un método insertaMaterial para dar de alta un nuevo material en la tienda. Sabemos
que la capacidad máxima de la tienda es de 100 productos, por tanto si intentamos dar de
alta un producto cuando la tienda ha alcanzado su capacidad máxima de almacenamiento, el
método tiene que lanzar una excepción ExcepcionTiendaLlena.
Escribe también la clase excepción ExcepcionTiendaLlena sabiendo que cuando se lanza una
excepción de esto tipo se manda un mensaje por pantalla indicando que ese material con toda
la información referente a sus atributos no se puede dar de alta en la tienda. A continuación
tienes un ejemplo del mensaje que se la excepción ExcepcionTiendaLlena.
M a t e r i a l [ c o d i g o= 2 9 , p r e c i o= 2 . 4 ] no s e puede a l m a c e n a r .
p u b l i c E x c e p c i o n T i e n d a L l e n a ( M a t e r i a l m) {
t h i s . mat= m;
s u p e r ( ” M a t e r i a l ”+mat+” no s e puede a l m a c e n a r ” ) ;
}
p u b l i c v o i d i n s e r t a M a t e r i a l ( M a t e r i a l a ) throws E x c e p c i o n T i e n d a L l e n a
{
i f ( m i s M a t e r i a l e s . s i z e ()== m i s M a t e r i a l e s . c a p a c i t y ( ) ) {
throw new E x c e p c i o n T i e n d a L l e n a ( a ) ;
}
m i s M a t e r i a l e s . add ( a ) ;
}
}
8. En la siguiente clase Prueba tenemos el programa principal para dar de alta un producto en
la tienda. Rellena los huecos 1 y 2 para realizar actividad indicada en cada uno de ellos.
p u b l i c c l a s s Prueba {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
// 2 : Da de a l t a e l nuevo m a t e r i a l en l a t i e n d a .
try {
miTienda . i n s e r t a M a t e r i a l (m) ;
} catch ( ExcepcionTiendaLlena e ) {
System . out . p r i n t l n ( e ) ;
}
}
/ / 3 : Mostramos l o s p r o d u c t o s de l a t i e n d a por P a n t a l l a
System . out . p r i n t l n ( ” Mi t i e n d a ” ) ;
5
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3768637
Parcial Alumno:
Programacion (27-04-2017)
9. Si queremos que nos salga por pantalla toda la información de los materiales de la tienda de
la siguiente forma
Mi t i e n d a
Material [ c o d i g o =0 , p r e c i o = 0 . 0 ] Bota [ t a l l a=bota0 ]
Material [ c o d i g o =1 , p r e c i o = 1 . 0 ] Bota [ t a l l a=bota1 ]
Material [ c o d i g o =2 , p r e c i o = 2 . 0 ] Bota [ t a l l a=bota2 ]
Material [ c o d i g o =3 , p r e c i o = 3 . 0 ] Bota [ t a l l a=bota3 ]
Material [ c o d i g o =4 , p r e c i o = 4 . 0 ] Bota [ t a l l a=bota4 ]
Explica qué método/s tendrı́as que implementar y en qué clase/s. No hace falta que escribas
el código.
Tenemos que implementar el método toString que muestra por pantalla la información de un objeto
en la clase Esqui, Bota, y Snowboard para sacar la información propia de cada clase; en la clase
Material para mostrar la información de un material, y en la clase Alquiler para que recorra el
vector y muestre todos los materiales.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3768637
Alumno: Parcial
Programacion (27-04-2017)
Ejercicio 3
3 puntos
Tenemos el código en Java de un contenedor de datos ordenados, que es el mismo que habéis
usado en las prácticas. Queremos usar este contenedor ordenado para almacenar los materiales de
la tienda de alquiler de esquı́. Explica qué cambios tienes que realizar en las clases del ejercicio
anterior (alquiler del material de esquı́), y en el programa principal para que los materiales en vez
de guardarse en un Vector de las Collection Framework, se guarden en un ContenedorOrdenado.
Reescribe las partes del código que sufren modificaciones.
import j a v a . u t i l . V e c t o r ;
/∗ ∗
∗ Construye un Contenedor de d a t o s con p a r á m e t r o s de e n t r a d a :
∗ Capacidad i n t
∗ @return
∗/
public ContenedorOrdenado ( i n t cap ) {
d a t o s= new Vector<T>(cap ) ;
}
/∗ ∗
∗ Nos i n d i c a s i e l c o n t e n e d o r e s t a o no l l e n o
∗ @return b o o l e a n
∗/
private boolean c o n t e n e d o r L l e n o ( ) {
i f ( d a t o s . s i z e ()== d a t o s . c a p a c i t y ( ) )
return true ;
else
return f a l s e ;
}
/∗ ∗
∗ Anyade un d a t o ordenado que l e pasamos como parametro a l c o n t e n e d o r
∗ @param d a t o
∗ @return b o o l e a n o : S i s e puede a n y a d i r o no e l d a t o a l c o n t e n e d o r
∗/
public boolean anyadeDatoOrdenado (T dato ) {
boolean ok=f a l s e ;
i n t i =0;
return ok ;
}
/∗ ∗
∗ Metodo para o b t e n e r e l d a t o que e s t á en una d e t e r m i n a d a p o s i c i ó n
∗ @param pos p o s i c i ó n d e l e l e m e n t o que queremos o b t e n e r
∗ @return e l e l e m e n t o que e s t á en e s a p o s i c i ó n
∗/
public T getDatoPos ( i n t pos ) {
T res ;
r e s= d a t o s . elementAt ( pos ) ;
return r e s ;
}
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3768637
Parcial Alumno:
Programacion (27-04-2017)
/∗ ∗
∗ Método para e l i m i n a r un d a t o d e l c o n t e n e d o r
∗ @param d a t o que queremos e l i m i n a r d e l c o n t e n e d o r
∗/
public void e l i m i n a r D a t o (T dato ) {
d a t o s . removeElement ( dato ) ;
}
/∗ ∗
∗ Método que d e v u e l v e e l número de d a t o s a c t u a l e s
∗ e x i s t e n t e s en e l c o n t e n e d o r
∗ @return número de d a t o s d e l c o n t e n e d o r
∗/
public i n t numElementos ( ) {
return d a t o s . s i z e ( ) ;
}
public S t r i n g t o S t r i n g ( ) {
return ” Contenedor [ d a t o s=” + d a t o s + ” ] ” ;
}
/∗ ∗
∗ Método para b u s c a r un d a t o en e l c o n t e n e d o r
∗ @param d a t o a b u s c a r
∗ @return b o o l e a n o i n d i c a n d o s i e l d a t o s e e n c u e n t r a o no en e l c o n t e n e d o r .
∗/
public boolean buscarDato (T dato ) {
boolean e s t a= f a l s e ;
i n t i =0;
while ( ( i <d a t o s . s i z e ( ) ) & & ( ! dato . e q u a l s ( d a t o s . elementAt ( i ) ) ) )
i ++;
// Elemento e s t a en e l v e c t o r
i f ( i <d a t o s . s i z e ( ) )
e s t a= true ;
return e s t a ;
}
/∗ ∗
∗ Método para b u s c a r un d a t o en e l c o n t e n e d o r
∗ @param d a t o a b u s c a r
∗ @return e n t e r o i n d i c a n d o s i l a p o s i c i o n d e l d a t o en e l c o n t e n e d o r , −1 s i no e s t a
∗/
public i n t buscarDatoPos (T dato ) {
i n t pos =−1;
i n t i =0;
while ( ( i <d a t o s . s i z e ( ) ) & & ( ! dato . e q u a l s ( d a t o s . elementAt ( i ) ) ) )
i ++;
// Elemento e s t a en e l v e c t o r
i f ( i <d a t o s . s i z e ( ) )
pos=i ;
return pos ;
}
}
Y la interfaz
/∗ ∗ I n t e r f a z p a r a m e t r i z a d a que implementa l a c l a s e Contenedor
∗ @param <T>
∗/
public i n t e r f a c e EsComparable <T> {
public boolean mayorQue (T dato ) ;
}
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3768637
Alumno: Parcial
Programacion (27-04-2017)
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Los cambios se realizan en las clases:
Alquiler En esta clase cambiamos el atributo privado misMateriales que era un vector de ma-
teriales, Vector<Material> misMateriales, por un objeto de tipo ContenedorOrdenado,
ContenedorOrdenado<Material> misMateriales. Esto hace que cambia en el construc-
tor de Alquiler la forma en la que se reserva memoria. En la misma clase, el método
insertaMaterial que añade un material (Material) al Vector ahora tiene que añadir un
objeto Material al ContenedorOrdenado, y por tanto hacer uso de los métodos definidos
en la clase ContenedorOrdenado, usando el método anyadeDatoOrdenado para añadir el
elemento al contenedor. Para comprobar si el contenedor está lleno usaremos el método
contenedorLleno() sustituyendo al método size() de la clase Vector.
public class Alquiler {
p r i v a t e S t r i n g nombre ;
p u b l i c A l q u i l e r ( S t r i n g nombre ) {
t h i s . nombre= nombre ;
m i s M a t e r i a l e s= new ContenedorOrdenado<M a t e r i a l >(N ) ;
p u b l i c i n t capacidadTienda () {
r e t u r n N;
}
// I n c o r p o r a a l v e c t o r un m a t e r i a l a l q u i l a d o
p u b l i c v o i d i n s e r t a M a t e r i a l ( M a t e r i a l a ) throws E x c e p c i o n T i e n d a L l e n a
{
i f ( misMateriales . contenedorLleno ( ) ) {
throw new E x c e p c i o n T i e n d a L l e n a ( a ) ;
}
m i s M a t e r i a l e s . anyadeDatoOrdenado ( a ) ;
}
Material Los objetos de esta clase son los que guardamos en la clase contenedora ContenedorOrdenado,
y, es por tanto, esta clase la que tiene que implementar la interfaz parametrizada EsComparable<Material>
que le obliga a implementar el método boolean mayorQue(Material dato). Si observamos
el código de la clase ContenedorOrdenado, en el método buscarDato hace uso del método
boolean equals(Object o). Por lo tanto, la clase Material está obligada a implementar
dicho método.
public c l a s s Material implements M a t e r i a l T i e n d a , EsComparable<M a t e r i a l >{
p u b l i c b o o l e a n mayorQue ( M a t e r i a l dato ) {
i f ( c o d i g o >dato . g e t C o d i g o ( ) )
return true ;
else
return f a l s e ;
}
p u b l i c b o o l e a n e q u a l s ( M a t e r i a l dato ) {
i f ( c o d i g o== dato . g e t C o d i g o ( ) )
return true ;
else
return f a l s e ;
}
}
9
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3768637
Parcial Alumno:
Programacion (27-04-2017)
Ejercicio 4
1.5puntos (0.5*3)
1. Se deseen leer tipos primitivos almacenados en un fichero binario cuyo nombre es ”datos2.txt”,
usando un buffer intermedio para mejorar la velocidad de lectura.
DataInputStream i n 1 = new DataInputStream (new B u f f e r I n p u t S t r e a m (new F i l e I n p u t S t r e a m ( ” d a t o s 2 . t x t ” ) ) ) ;
o
DataInputStream f r = new DataInputStream ( F i l e I n p u t S t r e a m ( ” p a l a b r a s . t x t ” ) ) ;
10
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-3768637