Examen de Programació II UDL 2011 · Juny
Examen de Programació II de la UDL (Grado en Ingeniería Informática) 2011, Juny: 3 problemas con solución. Hazlo online con corrección al momento.
Temas del examen: Diseño de clases y objetos en Java, herencia e igualdad
Problema 1 · Diseño de clases y objetos en Java, herencia e igualdad
Problema 1 (3 puntos). Traza de ejecución con objetos Vector3D
Considérese la siguiente definición de clase en Java:
public class Vector3D {
private double x;
private double y;
private double z;
public Vector3D(double x, double y, double z) {
this.x = x; this.y = y; this.z = z;
}
public void add(Vector3D other) {
x += other.x; y += other.y; z += other.z;
}
public void normalize() {
double mag = Math.sqrt(x*x + y*y + z*z);
x = x/mag; y = y/mag; z = z/mag;
}
public static Vector3D mistery(Vector3D v1, Vector3D v2) {
Vector3D result = new Vector3D(v1.x, v1.y, v1.z);
v2.normalize();
result.add(v2);
return result;
}
public String toString() {
return "x=" + String.valueOf(x)
+ " y=" + String.valueOf(y)
+ " z=" + String.valueOf(z);
}
}
Y el siguiente fragmento de código que interactúa con ella:
1 Vector3D first = new Vector3D(1.0, 2.0, 3.0);
2 Vector3D second = new Vector3D(0.0, 0.0, 3.0);
3 Vector3D third = Vector3D.mistery(first, second);
4 println("first: " + first.toString());
5 println("second: " + second.toString());
6 println("third: " + third.toString());
Indique con precisión qué salida produce este código por pantalla. Para justificar la respuesta, muestre paso a paso el flujo de ejecución de los métodos invocados, señalando el estado y las referencias de cada objeto manipulado (variables locales del programa principal, parámetros, variables auxiliares y la referencia implícita this en las llamadas donde exista).
Problema 2 · Diseño de clases y objetos en Java, herencia e igualdad
Problema 2 (3 puntos). Conteo de fragmentos de ADN interesantes
Un biólogo requiere asistencia informática para analizar secuencias de ADN deteriorado y localizar fragmentos de interés. Debido a la degradación de la muestra, el resultado del análisis no es un bloque continuo de material genético, sino una cadena de texto en la que los tramos perdidos o no recuperados están representados por uno o más espacios en blanco consecutivos.
Se considera que un fragmento continuo es interesante si contiene al menos uno de los marcadores preestablecidos como subcadena. La lista de marcadores está fijada en el vector constante MARKERS:
public class ADNAnalyser extends ConsoleProgram {
private String[] MARKERS = { "taca", "gata", "caca" };
private int countInteresting(String dna) {
// ?
}
public void run() {
String analysis = readLine("Resultado del análisis: ");
int numInterestingFragments = countInteresting(analysis);
println("Número de interesantes: " + numInterestingFragments);
}
}
Se pide implementar el método countInteresting(String dna), utilizando descomposición en funciones o métodos auxiliares donde proceda y eligiendo identificadores claros.
Métodos útiles disponibles
class StringTokenizer:
new StringTokenizer(String str): devuelve un iterador de fragmentos separados por espacios en blanco.
new StringTokenizer(String str, String delims): separa la cadena por cualquiera de los caracteres especificados en delims.
boolean hasMoreTokens(): indica si aún quedan fragmentos pendientes de procesar.
String nextToken(): extrae y devuelve el siguiente fragmento disponible.
class String:
char charAt(int index): devuelve el carácter ubicado en el índice solicitado.
String substring(int begin, int end): retorna la subcadena desde begin (inclusive) hasta end (exclusive).
boolean equals(String other) / boolean equalsIgnoreCase(String other).
int indexOf(String s) / int indexOf(String s, int begin): devuelve la posición de inicio de la primera coincidencia de la subcadena recibida, o -1 si no está presente.
String toUpperCase() / String toLowerCase().
Problema 3 · Diseño de clases y objetos en Java, herencia e igualdad
Problema 3 [4 puntos]. Implementación de la clase Polynomial
Se desea diseñar e implementar una clase en Java denominada Polynomial para representar y operar con polinomios de una variable de la forma:
donde es el grado del polinomio (). Recordar que para un polinomio de grado se necesitan coeficientes.
La clase debe proporcionar obligatoriamente las siguientes operaciones y constructores:
new Polynomial(int maxDegree): crea un polinomio cuyo grado máximo admitido es maxDegree, con todos sus coeficientes inicializados a cero.
int getMaxDegree(): devuelve la capacidad máxima de grado permitida en el polinomio.
int getDegree(): devuelve el grado efectivo del polinomio, correspondiente a la potencia con el coeficiente no nulo más alto. Si todos los coeficientes fuesen cero, debe devolver 0.
void setCoefficient(int degree, double coeff): asigna el valor coeff al término de grado degree. Si el valor de degree excede el grado máximo permitido para la instancia (o es negativo), la operación no realiza ninguna modificación.
double getCoefficient(int degree): devuelve el coeficiente del grado especificado. Si el grado solicitado es mayor que el grado máximo permitido (o negativo), debe devolver 0.0.
static Polynomial add(Polynomial p1, Polynomial p2): calcula y retorna un nuevo polinomio correspondiente a la suma algebraica de p1 y p2. El grado de la suma es el grado del polinomio de mayor grado. Además, se requiere que el resultado devuelto sea un polinomio normalizado.
void normalize(): ajusta la representación interna del polinomio de manera que su grado máximo coincida con su grado real no nulo (salvo en el caso del polinomio nulo, donde únicamente subsiste el término de grado 0). Tras llamar a normalize(), los métodos getDegree() y getMaxDegree() deben devolver exactamente el mismo valor.
Implemente la clase completa con sus atributos, constructores y métodos, aplicando buenas prácticas de encapsulación y descomposición auxiliar.
También puedes estudiar por temas
Practica un tema con ejercicios de los exámenes de todos los años, mezclados.
- Diseño de clases y objetos en Java, herencia e igualdad · 7 problemas · 35 % de que salga
- Recursión: diseño, traza y diagramas de llamadas · 10 problemas · 25 % de que salga
- Ficheros en Java: texto secuencial y acceso directo binario · 5 problemas · 25 % de que salga
- Árboles binarios y heaps · 2 problemas · 40 % de que salga
- Tablas hash · 1 problema · 40 % de que salga
- Listas en Java: uso de la API, implementación enlazada y coste · 3 problemas · 35 % de que salga
Otras convocatorias de 2011
Examen Primer Parcial (Curso 2011/2012) (2011) · Examen Segundo Parcial Curso 2011-2012 (2011)