Examen - Universidad Politécnica de Madrid

Anuncio
Dpto. Ingeniería de Sistemas Telemáticos
Universidad Politécnica de Madrid
ETSI Telecomunicación, Ciudad Universitaria, 28040 Madrid
FUNDAMENTOS DE PROGRAMACIÓN - Febrero 2011
Normas del examen:
•
•
•
•
Fechas:
Con libros y apuntes.
Duración: 3 horas.
Responda a cada problema en hojas separadas.
No se contestará ninguna pregunta durante el examen.
•
•
•
notas provisionales: 14.2.2011
revisión: 18.2.2011
notas finales: 5.3.2011
Se proponen 11 ejercicios. Debe responder a 10 de los 11 ejercicios.
Si responde a más de 10, se ignorará el problema 11.
Problema 1 (1 punto)
Escriba un método que recibe como argumentos 2 arrays de enteros, a1 y a2. Los datos de estos
arrays están ordenados. El método debe devolver otro array, que contenga todos los elementos de a1 y
todos los elementos de a2, ordenados.
Ejemplo
a1 = [ -30, 10, 13, 77 ]
a2 = [ 0, 10, 20 ]
resultado = [ -30, 0, 10, 10, 13, 20, 77 ]
Problema 2 (1 punto)
Escriba un método que recibe como argumentos 2 listas de enteros, a1 y a2. Los datos de estas listas
están ordenados y no contienen elementos duplicados. El método debe devolver otra lista, que
contenga todos los elementos de a1 y todos los elementos de a2, ordenados y sin duplicados.
Ejemplo
a1 = [ -30, 10, 13, 77 ]
a2 = [ 0, 10, 20 ]
resultado = [ -30, 0, 10, 13, 20, 77 ]
Problema 3 (1 punto)
Tenemos un array de String, de forma que todas las posiciones que contienen una String están al
principio, y las vacías (null) al final.
Se pide hacer un método para meter nuevas String en el array, de forma que la nueva String se coloca
en la primera celda con NULL, y si no cabe, se pierde.
Se pide hacer otro método para sacar la String en una cierta posición, de forma que tras sacar la String
de la posición indicada, las demás se desplazan para ocupar el hueco, y al final se coloca otro null.
Ejemplo
operación
inicial
mete(“D”)
mete(“E”)
mete(“F”)
saca(2)
array
[ “A”,
[ “A”,
[ “A”,
[ “A”,
[ “A”,
Fundamentos de Programación
“B”,
“B”,
“B”,
“B”,
“B”,
“C”,
“C”,
“C”,
“C”,
“D”,
null, null ]
“D”, null ]
“D”, “E” ]
“D”, “E” ]
“E”, null ]
4.2.2011
Página 1 de 4
Problema 4 (1 punto)
Escriba una clase MiExcepcion, que deriva de java.lang.Exception, y tiene un constructor
public MiExcepcion(String mensaje, Object[] datos);
y un getter
public Object[] getDatos();
Problema 5 (1 punto)
Los números de Catalan deben su nombre al matemático belga Eugène C. Catalan (1814-1894) y se
utilizan frecuentemente en problemas de combinatoria.
1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, …
Su definición básica
se puede traducir en una fórmula recursiva
Escriba un método recursivo que calcula el enésimo número de Catalan
public int catalan(int n)
Problema 6 (1 punto)
Relativo al problema 5, los números de Catalan también se pueden calcular con la fórmula
escriba un método iterativo que calcula el enésimo número de Catalan
public int catalan(int n)
Problema 7 (1 punto)
Dada una clase que contiene un array de tamaño limitado
public class Armario {
private String[] datos;
public Armario(int capacidad) { datos = new int[capacidad]; }
public boolean mete(int posicion, String dato) { … }
}
se pide desarrollar el método mete(), de forma que el dato se intenta meter en la posición indicada. Si la
posición está ocupada (no es NULL), se intenta meter en la posición siguiente, y así sucesivamente. Si
se llega al final del array, se pasa a intentarlo desde el principio. Si se logra colocar el dato en alguna
posición, se devuelve TRUE. Si el array está lleno de datos y no cabe nada más, se devuelve FALSE.
Fundamentos de Programación
4.2.2011
Página 2 de 4
Ejemplo
operación
array
devuelve
inicial
[ null, “A”, null, null, “B”, null ]
mete(5, “C”)
[ null, “A”, null, null, “B”, “C” ]
TRUE
mete(1, “D”)
[ null, “A”, “D”, null, “B”, “C” ]
TRUE
mete(4, “E”)
[ “E”, “A”, “D”, null, “B”, “C” ]
TRUE
mete(4, “F”)
[ “E”, “A”, “D”, “F”, “B”, “C” ]
TRUE
mete(4, “G”)
queda igual
FALSE
Problema 8 (1 punto)
Dada una lista de números reales, List<Double>,
1. escriba un método que devuelva el valor medio (la suma de los valores, dividida por el número
de valores)
2. escriba un método que devuelva la mediana (un valor que tiene tantos mayores o iguales a él
como menores que él)
Ejemplo. Dada la lista [ 30, 17, 514, 216, 701, 0 ]

media() = 246.33

mediana() = 216 (3 menores y 3 iguales o mayores)
Para calcular la mediana puede ser interesante escribir un método auxiliar que cuente cuántos valores
hay inferiores a uno dado.
Problema 9 (1 punto)
Dada la interface
public interface Asignatura {
double nota(List<Double> parciales) throws Exception;
}
Escriba 2 implementaciones:
1. NotaMedia: calcula la nota media, dando igual peso en todos los parciales, y admitiendo
cualquier nota parcial
2. NotaMediaPonderadaProtegida: calcula la nota media, pero da el doble de peso a los parciales
pares frente a los impares, y además lanza una excepción si alguna nota parcial fuera menor
que 0.0 o superior a 10.0
Fundamentos de Programación
4.2.2011
Página 3 de 4
Problema 10 (1 punto)
Se pide escribir una clase ListaSinDuplicados que sea un refinamiento de la clase java.util.ArrayList con
la característica de que no se pueden insertar datos que ya estén en la lista. O sea, si se intenta meter
un dato que ya está, el método no hace nada.
Trabaje con datos que son Object, y recurra el método estándar contains(Object) para saber si la lista
ya contiene un cierto dato.
De los métodos de la clase ArrayList, se pide reescribir los siguientes
void add(Object dato)
void add(int posicion, Object dato)
void set(int posicion, Object dato)
Notas
 no se piden los constructores nuevos; harían falta, pero no se piden aquí
 la signatura de los métodos que se piden se ha modificado para hacer el ejercicio más simple
Problema 11 (1 punto)
Se pide modelar un conjunto de excepciones que derivan de java.lang.Exception siguiendo este
esquema de herencia:
Suponga de disponemos de un método ir(String origen, String destino) que normalmente nos devuelve
el destino, aunque puede lanzar alguna de las excepciones anteriores. Envuelva dicho método dentro
de otro método viaje(String origen, String destino), que internamente atrapa las posibles excepciones,
devolviendo una String que puede ser

lo que devuelve ir() si no saltan excepciones

devuelve “al hospital” si hay un accidente, salvo que el accidente sea leve, en cuyo caso
devuelve “llego tarde”

si el accidente es grave, devuelve “no llego nunca”
Fundamentos de Programación
4.2.2011
Página 4 de 4
Descargar