Problemas - Universidad Politécnica de Madrid

Anuncio
Dpto. Ingeniería de Sistemas Telemáticos
Universidad Politécnica de Madrid
ETSI Telecomunicación,CiudadUniversitaria,28040Madrid
FUNDAMENTOS DE PROGRAMACIÓN. FEBRERO 2003.
Normas de examen:
o Con libros y apuntes.
o Duración: 2 horas.
o Responda a cada bloque de preguntas en hojas separadas
o NO SE CONTESTARÁ NINGUNA PREGUNTA DURANTE EL EXAMEN
BLOQUE 1 (3 puntos)
Un programa de ajedrez utiliza objetos de la clase TableroDeAjedrez para representar la situación de
las fichas en el tablero en un momento dado. Para ello, TableroDeAjedrez tiene un atributo que es
un array de Piezas de tamaño 8x8.
Pieza [][] tablero = new Pieza[8][8];
Este atributo se rellena en el constructor de la clase, que sitúa las diferentes piezas en sus casillas
iniciales, dejando a null las posiciones sin pieza. Tras varios movimientos, se habrán actualizado los
valores de este array, de forma que ciertas posiciones apuntarán a Piezas y otras a null.
Problema 1.1 (3 puntos)
Se pide codificar un método llamado Piezas perteneciente a la clase TableroDeAjedrez. Este método
devuelve un Enumeration con las posiciones de las piezas del tablero. Codifique la posición de cada
pieza según su criterio.
public Enumeration Piezas() {
Vector p = new Vector();
for (int a=0 ; a<8 ; a++)
for (int b=0 ; b<8 ; b++)
if (tablero[a][b] != null)
p.add(a+""+b);
return p.elements();
}
BLOQUE 2 (3 puntos)
A partir de la clase Mensaje construida en la Práctica 1 se va a construir la clase derivada
MensajeMultimedia. Un Mensaje multimedia es una particularización de los Mensajes normales,
donde el campo contenido tiene una estructura determinada:
contenido="tipo info=/…/"
donde tipo es el tipo de información multimedia y puede ser “video” o “audio” y el campo info
almacena una lista de caracteres que contiene la información multimedia asociada al campo. En
todo, los mensajes multimedia responden a la misma definición usada para los Mensajes en la
práctica 1:
<mensaje remitente="Pepe" posicion="1.0:2.4" destinatario="Paco" contenido="video info=/bla bla/" >
Suponga que el carácter ‘/’ no aparece en ningún lugar del mensaje salvo como inicio y fin del
campo info del contenido de los mensajes multimedia.
Problema 2.1 (1 Punto)
Escriba la cabecera de la nueva clase MensajesMultimedia, los atributos y las cabeceras de los
métodos. La nueva clase MensajesMultimedia debe definirse a partir de la clase Mensaje de la
práctica 1, y debe tener métodos para conocer el tipo y la información de los mensajes multimedia.
package fprg.practica1;
…
public class MensajeMultimedia extends Mensaje{
String info =null;
String tipo =null;
public MensajeMultimedia (String s) throws Exception {
…
}
public String getInfo (){
return info;
}
public String getTipo (){
return tipo;
}
}
Problema 2.2 (2 Punto)
Codifique el Constructor de la clase MensajesMultimedia. Tenga en cuenta que debe utilizar el
constructor de la clase Mensaje para analizar los elementos no específicos de los mensajes
multimedia.
…
public class MensajeMultimedia extends Mensaje{
private static String audio ="audio";
private static String video ="video";
private static String infokey="info=";
String info =null;
String tipo =null;
public MensajeMultimedia (String s) throws Exception {
super (s);
String contenido = super.getContenido ();
StringTokenizer st= new StringTokenizer (contenido);
String token =null;
if (!st.hasMoreTokens ()) throw new Exception ("Faltan Tokens");
tipo = st.nextToken();
if ((!tipo.equals(video)) && (!tipo.equals(audio)))
throw new Exception ("Los servicios válidos son: "+video+" y " + audio );
if (!st.hasMoreTokens ()) throw new Exception ("Faltan Tokens");
token = st.nextToken ("/"); token=token.trim();
if (!token.equals(infokey)) throw new Exception ("Campo de nombre en contenido incorrecto");
if (!st.hasMoreTokens ()) throw new Exception ("Faltan Tokens");
info = st.nextToken ("/\"");
if (st.hasMoreTokens ()) throw new Exception ("Sobran Tokens");
}
…..
}
BLOQUE 3 (4 puntos)
Pregunta 3.1 (2 Puntos)
Escriba un método que, dado un número entero mayor que 1, devuelva un Vector con todos los
divisores resultantes de la descomposición del número en sus factores primos. El método deberá
lanzar una excepción si el dato de entrada no es válido. Por ejemplo, dado el número 12, el método
devolvería un Vector con los divisores: 2, 2, 3.
public static Vector descNum (int n) {
Vector v= new Vector();
int div= 2;
while (n > 1) {
while ((n % div) == 0) {
v.addElement(new Integer(div));
n /= div;
}
div++;
}
return v;
}
Pregunta 3.2 (2 Punto)
Una matriz cuadrada se dice antisimétrica si A = -At, es decir, aij = -aji ∀ i, j.
Suponga que existe un método con la siguiente signatura:
boolean esCuadrada (double [][] m) throws Exception
que determina si una matriz es cuadrada o no, y lanza una excepción si la entrada no es válida por
alguna razón.
Se pide realizar un método que determine si una matriz es antisimétrica. Para ello, debe basarse en
el método anterior para determinar si la matriz es válida o no (y se lanzará una excepción) y
cuadrada. Si la matriz es cuadrada se procederá a comprobar la condición aij = -aji ∀i, j.
public static boolean esAntisimetrica (double [][]m) throws Exception {
if (!esCuadrada(m))
return false;
for(int i=0; i<m.length; i++)
for(int j=0; j <= i; j++)
if(m[i][j] != -m[j][i])
return false;
return false;
}
Descargar