Septiembre 2007 - resuelto

15

Click here to load reader

Transcript of Septiembre 2007 - resuelto

Page 1: Septiembre 2007 - resuelto

7/23/2019 Septiembre 2007 - resuelto

http://slidepdf.com/reader/full/septiembre-2007-resuelto 1/15

PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007

Pag. 1

 Apell idos Nombre

Firma NIA Grupo

Pregunta 1 (0,5 puntos).- Indicar si las siguientes afirmaciones son ciertas, y explicar  brevemente por qué.

a) Al crear objetos de una clase abstracta, sólo podremos usar los métodos que no seanabstractos.

Falso, no pueden crearse objetos de una clase abstracta, por tanto no pueden invocarsemétodos sobre estos objetos.

b) Una clase derivada sólo puede acceder a un método privado de la superclase si y sólosi ambas pertenecen al mismo paquete.

Falso, una clase derivada no puede acceder a los métodos privados de la superclase, sólola misma clase tiene acceso a sus métodos privados.

EXAMEN PROGRAMACIÓN21 de Septiembre de 2007

INGENIERÍA INFORMÁTICAPrimera parte: Cuestiones

1,5 horas 

Page 2: Septiembre 2007 - resuelto

7/23/2019 Septiembre 2007 - resuelto

http://slidepdf.com/reader/full/septiembre-2007-resuelto 2/15

PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007

Pag. 2

Pregunta 2 (0,5 puntos).- Indicar si las siguientes afirmaciones son ciertas, y explicar  brevemente por qué.

a) Al igual que es posible que distintas clases implementen una única interfaz, una únicaclase puede implementar dos o más interfaces.

Verdadero, una clase puede implementar varias interfaces. Lo que no puede hacer esheredar a la vez de más de una superclase (no está permitida la herencia múltiple).

b) Para implementar una interfaz, la clase debe proporcionar la implementación de almenos un método definido en la interfaz.

Falso, para implementar una interfaz la clase debe proporcionar la implementación deTODOS los métodos de la interfaz.

Pregunta 3 (0,5 puntos).- Dada la siguiente lista: (21, 5, 34, 6, 17, 11). Escribir cómoevolucionaría dicha lista hasta quedar completamente ordenada mediante el métodoRápido (QuickSort) 

Lista parcial: (21, 5, 34, 6, 17, 11), Pivote: 34. Intercambios: 11 con 34

(21, 5, 11, 6, 17, 34)

Lista parcial: (21, 5, 11, 6, 17), Pivote: 11. Intercambios: 21 con 6

(6, 5, 11, 21, 17, 34)

Lista parcial: (6, 5), Pivote: 6. Intercambios: 6 con 5

(5, 6, 11, 21, 17, 34)

Lista parcial: (21, 17), Pivote: 21. Intercambios: 21 con 17

(5, 6, 11, 17, 21, 34)

Page 3: Septiembre 2007 - resuelto

7/23/2019 Septiembre 2007 - resuelto

http://slidepdf.com/reader/full/septiembre-2007-resuelto 3/15

PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007

Pag. 3

Pregunta 4 (0,5 puntos).-  Dado el siguiente método:

publ i c st at i c voi d l eer ( St r i ng nombr e) {St r i ng l i nea;i nt x = 0;i nt y = 0;try {

Buf f eredReader br = new Buf f eredReader ( newFi l eReader ( nombr e) ) ;

l i nea = br . r eadLi ne( ) ;whi l e ( l i nea==nul l ) {

l i nea = br . r eadLi ne( ) ;Syst em. out . pr i nt l n( l i nea) ;

}Syst em. out . pr i nt l n( “l ei do”) ;br . cl ose( ) ;

}cat ch ( I OExcept i on e) {Syst em. out . pr i nt l n( "Except i on") ;

}f i nal l y {System. out . pr i nt l n( "- - - ") ;

}Syst em. out . pr i nt l n( "adi os") ;

}

Y el fichero prueba.txt con el siguiente contenido:a bcde fgh

Explicar  qué sale por pantalla al invocar l eer ( “pr ueba. t xt ”) . Modificar el métodol eer  para que imprima sólo las líneas impares.

Salida por pantalla:leido---adios

Esto es debido a que nunca se entra por el bucle whi l e, ya que al leer la primera línea

del fichero con r eadLi ne( )  la variable l i nea no vale nul l .

Para modificarlo para leer las líneas pares, habría que sustituir el bloque de dentro del

try por el siguiente código:Buf f eredReader br = new Buf f eredReader ( new

Fi l eReader ( nombr e) ) ;l i nea = br . r eadLi ne( ) ;whi l e ( l i nea !=  nul l ) {

l i nea = br . r eadLi ne( ) ;if(x % 2 == 0) {

System.out.println(linea);

}

x++;

}Syst em. out . pr i nt l n( “l ei do”) ;

br . cl ose( ) ;  

Page 4: Septiembre 2007 - resuelto

7/23/2019 Septiembre 2007 - resuelto

http://slidepdf.com/reader/full/septiembre-2007-resuelto 4/15

PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007

Pag. 4

Pregunta 5 (0,5 Puntos).- Dadas las siguientes clases e interfaces:

publ i c abst r act cl ass Pr i mer Pl at o {publ i c voi d Pedi r Agua( ) {

Syst em. out . pr i nt l n( " Agua, por f avor . . . ") ;}publ i c voi d Pedi r Pan( ) {

Syst em. out . pr i nt l n( " Pan, por f avor . . . ") ;}}

publ i c abst r act cl ass SegundoPl at o {publ i c abst r act voi d Pedi r Vi no( ) ;

}

publ i c i nt er f ace Post r e {publ i c voi d Pedi r Dul ce( ) ;publ i c voi d Pedi r Amar go( ) ;

}

Implementar, si es posible, la clase MenuDel Di a de tal forma que herede los métodosde Pr i mer Pl at o  y SegundoPl at o, e implemente a su vez todos los métodos

contenidos en la clase Postre. Si no es posible, explicar por qué, y modificar el códigode tal forma que permita crear dicha clase MenuDel Di a.

No es posible, ya que en java una clase no puede heredar a la vez de dos superclases(no es posible la herencia múltiple), por tanto no puede heredar a la vez de la clasePr i mer Pl at o y SegundoPl at o.

Para modificar el código para permitir crear dicha clase, podemos cambiar la clase

SegundoPl at o por una interfaz:

publ i c i nt er f ace SegundoPl at o {publ i c voi d Pedi r Vi no( ) ;

}

 Así, podemos hacer que nuestra clase herede de la clase Pr i mer Pl at o, e implemente

las dos interfaces:

publ i c cl ass MenuDel Di a ext ends Pr i merPl ato i mpl ement s SegundoPl ato,Post r e{

publ i c voi d Pedi r Vi no( ) {

System. out . pr i nt l n( " Vi no, por f avor . . . ") ;}publ i c voi d Pedi r Dul ce( ) {

Syst em. out . pr i nt l n( " Dul ce, por f avor . . . ") ;}publ i c voi d Pedi r Amar go( ) {

Syst em. out . pr i nt l n( " Amar go, por f avor . . . ") ;}

}

Page 5: Septiembre 2007 - resuelto

7/23/2019 Septiembre 2007 - resuelto

http://slidepdf.com/reader/full/septiembre-2007-resuelto 5/15

PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007

Pag. 5

Pegunta 6 (0,5 puntos).- Dado el siguiente método:

publ i c st at i c i nt r ecurs i vo ( i nt [ ] vect or , i nt j ) {i f ( j > 0) {

i nt aux = 0;f or ( i nt i =0; i <j ; i ++) {

aux += vect or [ i ] ;}r et ur n aux - r ecur si vo( vect or , j - 1) + r ecur si vo( vect or ,

 j - 2) ;}el se r et ur n 0;

}

Explicar  cual sería el resultado por pantalla de la siguiente invocación:

i nt [ ] vector = {3, 5, - 2, 1};Syst em. out . pr i nt l n( r ecur si vo( vector, 3) ) ;

Resultado:

recursivo(3) = (3 + 5 – 2) – recursivo(2)+recursivo(1) = (3 + 5 – 2) – ((3 + 5) – recursivo(1) +recursivo(0))+recursivo(1)(3 + 5 – 2) – ((3 + 5) – 3 + 0)+36 – (8 – 3) + 34

Page 6: Septiembre 2007 - resuelto

7/23/2019 Septiembre 2007 - resuelto

http://slidepdf.com/reader/full/septiembre-2007-resuelto 6/15

PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007

Pag. 6

Pregunta 7 (0,5 puntos).- Dadas las siguientes clases:publ i c cl ass Mami f er o {

pr i vat e St r i ng habi t at ;publ i c Mami f er o ( St r i ng h) {

habi t at =h;}publ i c Mami f er o( ) {

thi s( " ter r est r e" ) ;}publ i c St r i ng t i po ( ) {

r et ur n "mamí f er o "+habi t at ;}

}

publ i c cl ass Cetaceo ext ends Mami f er o{publ i c Cet aceo ( St r i ng h) {

super ( h) ;}

publ i c Cet aceo( ) {t hi s("acuát i co") ;}publ i c St r i ng t i po( ) {

r et ur n super . t i po( ) + " ( cet áceo) ";}

}

Y el método:

publ i c st at i c voi d i mpr i mi r Ti po( Mami f er o m) {

Syst em. out . pr i nt l n( m. t i po( ) ) ;}

Explicar  cuál será el resultado por pantalla de la siguiente secuencia de invocaciones:

Mami f ero el ef ant e = new Mami f ero( ) ;Cet aceo del f i n = new Cet aceo( ) ;i mpr i mi r Ti po( el ef ant e) ;i mpr i mi r Ti po( del f i n) ;

mami f er o t er r est r emami f ero acuat i co ( cetáceo)

Page 7: Septiembre 2007 - resuelto

7/23/2019 Septiembre 2007 - resuelto

http://slidepdf.com/reader/full/septiembre-2007-resuelto 7/15

PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007

Pag. 7

Pregunta 8 (0,5 puntos).- Dado el siguiente método:

publ i c st at i c voi d met odo1 ( ) {St r i ng [ ] MensCi f r ado = new St r i ng[ 11] ;MensCi f r ado[ 1] = "excepci ones";

MensCi f r ado[ 2] = "i nt er f aces";MensCi f r ado[ 3] = "de" ;MensCi f r ado[ 4] = "er r or " ;MensCi f r ado[ 5] = "ej empl o" ;MensCi f r ado[ 6] = "ot r o" ;MensCi f r ado[ 7] = "un" ;MensCi f r ado[ 8] = "es" ;MensCi f r ado[ 9] = "Aquel " ;MensCi f r ado[ 10] = "Est e" ;try{

Syst em. out . pr i nt l n( "El mensaj e ci f r ado es: ") ;f or ( i nt i =8; i <MensCi f r ado. l engt h; i =i - 2) {

Syst em. out . pr i nt l n( MensCi f r ado[ i - 1] ) ;}Syst em. out . pr i nt l n( "For your eyes onl y" ) ;}cat ch ( Nul l Poi nt er Except i on npe) {

System. out . pr i nt l n( " nul l poi nt er ") ;}cat ch ( Ar r ayI ndexOut Of BoundsExcept i on ai obe){

Syst em. out . pr i nt l n( " arr ay i ndex out ") ;}cat ch ( Except i on e) {

Syst em. out . pr i nt l n( " except i on ") ;}f i nal l y{

Syst em. out . pr i nt l n( "Fi n del comuni cado" ) ;}

Explicar  cual sería la salida por pantalla al invocar dicho método

Salida:El mensaje cifrado es:unejemplodeexcepciones

 Aquí salta una excepción ArrayIndexOutOfBoundsException, ya que el valor de ies menor que cero.array index out

Fin del comunicado

Page 8: Septiembre 2007 - resuelto

7/23/2019 Septiembre 2007 - resuelto

http://slidepdf.com/reader/full/septiembre-2007-resuelto 8/15

PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007

Pag. 8

EXAMEN PROGRAMACIÓN21 de Septiembre de 2007

INGENIERÍA INFORMÁTICASegunda parte: problemas

2,5 horas

Nos encontramos en algún momento entre los años 1.100 y 1.300 a.C. El rapto de Helena deEsparta por Paris de Troya ha desencadenado la guerra. Para vengar la afrenta, los príncipesgriegos se disponen a asaltar la ciudad de Troya. El objetivo de los problemas es crear loselementos que van a tomar parte en la batalla, incluyendo el famoso caballo de Troya.

Problema 1 (2 puntos)En este problema se crearán la clase Guerr ero y las clases derivadas Tr oyano y Gr i ego.

a) (0,1 punto) Crear  la clase abstracta Guerr ero, que deberá poder serializarse. Deberá contar

con los siguientes atributos, no accesibles por ninguna otra clase:

•  nombr e, de tipo St r i ng, que no podrá cambiar una vez le hemos dado valor.

•  edad, f uer za, de tipo i nt .•  her i do, muert o de tipo bool ean.

b) (0,1 punto) Crear dos métodos públicos, uno para acceder al atributo edad y otro para darle

valor. Suponer que existen métodos equivalentes para el resto de atributos.

c) (0,3 puntos) Crear dos métodos, accesibles solamente por sus clases derivadas, st at i c bool ean  compr obarEdad ( i nt e) y st at i c bool ean compr obarFuerza  ( i ntf )  que calculen si edad y f uer za están dentro de los siguientes rangos: edad entre 15 y

60 (ambos inclusive), f uer za  entre 1 y 10 (ambos inclusive). Devolverán t rue  si son

correctos y f al se en caso contrario.

d) (0,8 puntos) Crear tres constructores para la clase Guerr ero:

• El primero recibirá valores para todos los atributos, excepto her i do y muert o, queobviamente serán falsos. Deberá comprobar que los valores dados son válidos y encaso contrario poner como edad 25 y como f uer za 5.

•  El segundo, que deberá utilizar el primero, no recibirá ningún valor y creará unguerrero cuyo nombr e  sea guerreroX y edad  y f uer za  valgan 15 y 1

respectivamente.

• El tercero, recibirá un objeto de tipo Guerr ero y un nombr e y creará una copia del

guerrero pasado con el nuevo nombre.

e) (0,2 puntos) Crear el siguiente método público y abstracto:

•  bool ean r et i r ar se ( )

f) (0,2 puntos) Crear la clase Tr oyano, que hereda de Guerr ero y que no tiene ningún nuevoatributo. Crear un constructor para esta clase que reciba el nombr e, edad y f uer za  del

 Tr oyano y utilice alguno de los constructores de la clase Guerr ero.

g) (0,3 puntos)  Implementar los métodos necesarios para que la clase  Tr oyano  no sea

abstracta, teniendo en cuenta que:

•  Los métodos devolverán t rue si se ha podido realizar la acción y f al se si no.

•  Los troyanos no pueden retirarse.

h) (0,2 Puntos) Crear la clase Gr i ego, que hereda de Guerr ero y que no tiene ningún nuevo

atributo. Los métodos y constructores de esta clase serán similares a los de Tr oyano (no

hace falta repetirlos), salvo el método ret i rarse, ya que los griegos sí lo pueden hacer,

siempre que estén heridos y, evidentemente, no estén muertos. Implementar este método.

Page 9: Septiembre 2007 - resuelto

7/23/2019 Septiembre 2007 - resuelto

http://slidepdf.com/reader/full/septiembre-2007-resuelto 9/15

PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007

Pag. 9

Clase Guerrero

import  j ava. i o. * ;

 public  abstract  class  Guer r ero implements  Ser i al i zabl e {

 private  final  St r i ng nombr e;

 private  int  edad, f uer za;

 private  boolean  her i do, muer t o;

/ / Apar t ado b)  

 public  int  get Edad() {

return  edad;

}

 public  void   set Edad( int  e){

edad  = e;

}

/ / Est os se dan por supuest os, no hací a f al t a hacer l os.  

 public  int  get Fuer za( ) {

return  f uer za;

}

 public  void   set Fuerza(int  f ){

f uer za  = f ;

}

 public  St r i ng getNombre( ) {

return  nombr e;

}

 public  boolean  get Her i do ( ) {

return  her i do;

}

 public  void   setHer i do ( boolean  h) {her i do  = h;

}

 public  boolean  get Muer t o ( ) {

return  muert o;

}

 public  void   set Muert o ( boolean  m) {

muer t o  = m;

}

/ / Apar t ado c)  

 protected   static  boolean compr obarEdad (int  e){

return  e>=15 && e<=60;

}

 protected   static  boolean comprobarFuerza ( int  f ){

return  f >0 && f <=10;

}

/ / Const r uct or es, apar t ado d)  

 public  Guer r er o ( St r i ng n, int  e, int  f ){

nombr e  = n;

if  ( comprobarEdad(e) ) edad=e;else  edad=25;

if  ( compr obar Fuer za( f ) ) f uer za=f ;

Page 10: Septiembre 2007 - resuelto

7/23/2019 Septiembre 2007 - resuelto

http://slidepdf.com/reader/full/septiembre-2007-resuelto 10/15

PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007

Pag. 10

else  f uer za= 5; }

 public  Guer r er o ( ) {

this  ( "Guerr eroX" , 15, 1) ;

}

 public  Guer r er o (Guer r er o g, St r i ng n) {

nombr e  = n;

edad  = g. edad;f uer za  = g. f uer za;

}

/ / Apar t ado e)   public  abstract  boolean  ret i rarse( ) ;

}

Clase Troyano

/ / Apar t ado f )

 public  class  Troyano extends  Guer r ero {

 public  Troyano ( St r i ng n, int  e, int  f ){

super  ( n, e, f ) ;

}

/ / Apart ado g)  

 public  boolean  ret i r arse( ) {

Syst em.  out. pr i nt l n( "No nos podemos r et i r ar " ) ;

return  false;

}

}

Clase Griego public  class  Gr i ego extends  Guer r ero {

/ / El const r uct or se daba por hecho public  Gr i ego ( St r i ng n, int  e, int  f ){

super  ( n, e, f ) ;}

/ / Apar t ado h) public  boolean  ret i r ar se( ) {

if  ( get Her i do( ) && ! get Muer t o( ) ) return  true;return  false;

}

Page 11: Septiembre 2007 - resuelto

7/23/2019 Septiembre 2007 - resuelto

http://slidepdf.com/reader/full/septiembre-2007-resuelto 11/15

PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007

Pag. 11

Problema 2 (4 puntos)Este problema creará la clase para representar al Caballo de Troya. Aunque es continuaciónlógica del anterior se puede realizar independientemente.

a) (0,2 puntos) Crear la clase Cabal l o que tendrá como atributos públicos:

  capaci dad, de tipo i nt , representa el número de guerreros griegos que puedehaber dentro del caballo. No se podrá cambiar una vez le hemos dado valor.

•  ocupaci on, de tipo i nt , representa el número actual de griegos en el caballo.

•  ocupant es, array de objetos de la clase Guerr ero.

b) (0,8 puntos) Crear dos constructores para la clase Cabal l o:

•  el primero recibirá un array de Guerr eros, deberá comprobar que todos los

ocupant es son Gr i egos, en caso contrario se creará un Cabal l o sin ocupant es 

con capaci dad 100 (en caso positivo, suponer que la capaci dad es la del número

de Guerr eros que se ha pasado como parámetro)

•  el segundo recibirá un único Guerr ero y la capaci dad. También deberá comprobar

que el Guerr ero  es Gr i ego, en caso contrario se creará un Cabal l o  sin

ocupant es.

c) (0,4 puntos) Crear el método voi d or denar ( )  que ordene descendentemente el array de

ocupant es según su f uer za utilizando el algoritmo de selección directa.

d) (0,4 puntos) Crear un método i nt buscar ( St r i ng nombr e)  que busque por su nombr e 

un guerrero dentro del array ocupant es ordenado según el método anterior y devuelva la

posición en que está ó -1 si no está.

e) (0,4 puntos) Definir la interfaz PuedeMont ar se que especifica que se puede montar en los

objetos de tipo Cabal l o. Tendrá dos métodos:

•  i nt mont ar ( Guerr ero g)  que monta un Guerr ero en el Cabal l o y devuelve

el número de ocupant es  que hay actualmente ó -1 si el Cabal l o  ya está lleno.

Deberá comprobar que sólo los gr i egos  puedan montar en el Cabal l o  (si seintenta montar un Tr oyano devolverá -2).

•  void desmontar () que desmonta todos los Guerr eros del Cabal l o.

f) (0,9 puntos) Realizar los cambios oportunos en la clase Cabal l o  para que implemente la

interfaz PuedeMont ar se.

g) (0,3 puntos)  Crear un método voi d guar dar ( St r i ng f i cher o)   que guarde en un

fichero los nombres de todos los Guerr eros montados en el Cabal l o.

h) (0,3 puntos) Crear un método St r i ng [ ] l eer ( Fi l e f i chero)  que lea los nombres de

los Guerr eros guardados en un fichero y los devuelva en un array de St r i ng.

i) (0,3 puntos) Crear una clase Usuar i a, que en su método mai n  cree un  Tr oyano, unCabal l o y un Gr i ego, y monte al soldado Gr i ego en el Cabal l o.

Page 12: Septiembre 2007 - resuelto

7/23/2019 Septiembre 2007 - resuelto

http://slidepdf.com/reader/full/septiembre-2007-resuelto 12/15

PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007

Pag. 12

Clase Caballo

import  j ava. i o. * ;

 public  class  Cabal l o implements  PuedeMontar se / / Par a apar t ado f )

{

 public  final  int  capaci dad;

 public  int  ocupaci on;

 public  Guer r er o [ ] ocupant es;

/ / Apar t ado b) const r uct or es 

 public  Cabal l o ( Guer r er o [ ] g) {

/ / Comprobamos que t odos l os ocupant es son gr i egos 

 boolean  corr ecto = true;

int  cont ador = 0;

while  ( cont ador<g. l engt h  && cor r ecto){

cor r ect o = g[ cont ador] instanceof  Gr i ego;

contador++;}

if  (correcto) {

ocupant es  = g;

capaci dad  = ocupant es. l engt h;

ocupaci on  = capaci dad;

}

else  {

capaci dad  = 100;

ocupaci on  = 0;

ocupant es  = new  Guer r er o [ 0] ;

}}

 public  Cabal l o ( Guer r er o g, int  c) {

if  ( g instanceof  Gr i ego){

capaci dad  = c;

ocupaci on  = 1;

ocupant es  = new  Guerr ero [ capaci dad] ;

ocupant es[ 0] =g;

}

else  {

capaci dad  = c;

ocupaci on  = 0;

ocupant es  = new  Guerr ero [ capaci dad] ;

}

}

Page 13: Septiembre 2007 - resuelto

7/23/2019 Septiembre 2007 - resuelto

http://slidepdf.com/reader/full/septiembre-2007-resuelto 13/15

PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007

Pag. 13

/ / Apar t ado c)  

 public  void   ordenar ( ) {

/ / def i ni mos l as var i abl es auxi l i ar es 

int  posi ci onMayor ;Guer r ero val orMayor ;

int  ul t i mo = ocupant es. l engt h;

/ / buscamos sucesi vament e el mayor el ement o de l a l i st a

for  ( int  i =0; i <=ul t i mo; i ++) {

/ / el mayor empi eza si endo el val or de l a posi ci ón i  

posi ci onMayor =i ;

val orMayor=ocupant es[ i ] ;

/ / Buscamos el mayor de l os r est ant es r ecor r i endo l a l i st a conel í ndi ce j  

for  ( int  j =i +1; j <=ul t i mo; j ++) {

/ / Si el el ement o l i st a[ j ] es mayor que el val or Mayor , pasa aser el

/ / val or Mayor  

if  ( ocupant es[ j ] . get Fuer za( ) <val or Mayor . get Fuer za( ) ) {

val orMayor=ocupant es[ j ] ;

posi ci onMayor =j ;

}/ / f i n i f   

}/ / f i n f or ( j )  

/ / una vez encont r ado el mayor l o i nt ercambi amos por el de l aposi ci ón i  

ocupant es[ posi ci onMayor ] =ocupant es[ i ] ;

ocupant es[ i ] =val or Mayor ;/ / y segui mos con el bucl e 

} / / f i n f or ( i )  

}/ / f i n sel ecci onDi rect a 

/ / Apart ado d) No val e l a búsqueda bi nar i a por que el ar r ay est á or denado 

/ / por f uer za y no por nombre, usamos búsqueda secuenci al  

 public  int  buscar ( St r i ng nombr e){

/ / def i ni mos l as var i abl es auxi l i ar es 

 boolean  encontr ado = false;

int  cont ador = 0, r esul t ado = - 1;

/ / mi ent r as nos queden el ement os en l a l i st a y no hayamosencont r ado el que buscamos 

while  ( cont ador <= ocupant es. l engt h  && ! encont r ado) {

if  ( ocupant es[ cont ador] . get Nombr e( ) . equal s( nombr e) ) {

r esul t ado=cont ador;

encontr ado = true;

}/ / f i n i f   

contador++;

}/ / f i n whi l e 

return  r esul t ado;

}

Page 14: Septiembre 2007 - resuelto

7/23/2019 Septiembre 2007 - resuelto

http://slidepdf.com/reader/full/septiembre-2007-resuelto 14/15

PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007

Pag. 14

/ / Apar t ado f )  

 public  int  mont ar ( Guer r ero g){

/ / Si est á l l eno devuel ve - 1 if  ( ocupant es. l engt h  == ocupaci on) return  - 1 ;

/ / Si no es gr i ego devuel ve - 2;  

if  ( ! (g instanceof  Gr i ego) ) return  - 2 ;

/ / Si no, busca el pr i mer hueco l i br e ( ser á un nul l )  

int  cont ador=0;

 boolean  mont ado = false;

while  ( cont ador <ocupant es. l engt h  && ! mont ado) {

if  ( ocupant es[ cont ador] ==null) {

ocupant es[ cont ador ] = g;

mont ado = true;

}contador++;

}

ocupaci on++;

return  ocupaci on;

}

 public  void   desmont ar ( ) {

/ / Pone t odos a nul l  

for  ( int  i =0; i <ocupaci on; i ++)

ocupant es[ i ] =null;

ocupaci on  = 0;}

/ / Apar t ado g)  

 public  void   guar dar ( St r i ng f i cher o) {

try  {

Pr i nt Wr i t er pw = new  Pr i nt Wr i t er ( f i cher o) ;

/ / Par a saber cuant os hay escri t os en el f i cher o 

pw. pr i nt l n( ocupaci on) ;

for  ( int  i =0; i <ocupaci on; i ++)

pw. pr i nt l n( ocupant es[ i ] . get Nombr e( ) ) ;

pw. cl ose( ) ;

}catch  ( Fi l eNot FoundExcept i on f ) {

Syst em.  out. pr i nt l n ( "No se ha podi do escr i bi r en elf i cher o") ;

}

}

Page 15: Septiembre 2007 - resuelto

7/23/2019 Septiembre 2007 - resuelto

http://slidepdf.com/reader/full/septiembre-2007-resuelto 15/15

PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007

Pag. 15

/ / Apar t ado h)  

 public  St r i ng [ ] l eer ( Fi l e f i chero){St r i ng [ ] r esul t ado=null;

try  {

Buf f eredReader br = new  Buf f eredReader ( new  Fi l eReader( f i chero) ) ;

int  t mp = I nteger .  parseInt( br. readLi ne( ) ) ;

r esul t ado = new  St r i ng [ t mp] ;

for  ( int  i =0; i <t mp; i ++)

r esul t ado[ i ] = br . r eadLi ne( ) ;

br . cl ose( ) ;

}

catch  ( Fi l eNot FoundExcept i on e) {Syst em.  out. pr i nt l n( "No se encuent r a el f i cher o "+f i cher o) ;

}

catch  ( I OExcept i on e) {

Syst em.  out. pr i nt l n( "Er r or con el f i cher o") ;

}

return  r esul t ado;

}

Interfaz PuedeMontarse

 public  interface  PuedeMontar se {

int  mont ar ( Guerr er o g) ;

void   desmont ar ( ) ;

}

Clase Usuaria

 public  class  Usuar i a {

 public  static  void   mai n( St r i ng[ ] ar gs) {

 Tr oyano t r oyano1 = new  Tr oyano( "Par i s", 20, 10) ;

Gr i ego gr i ego1 = new  Gr i ego ( "Ul i ses", 25, 10) ;

Cabal l o cabal l oDeTr oya = new  Cabal l o ( gr i ego1, 100) ;

}