Problema 1. (3 puntos) Segundo Parcial de Programación 2 Curso 2010/2011

Anuncio
Segundo Parcial de Programación 2
Curso 2010/2011
Problema 1. (3 puntos)
Dada la siguiente clase:
1 public class Vector3D {
2 private double x;
3 private double y;
4 private double z;
5 public Vector3D(double x, double y, double z) {
6
this.x = x; this.y = y; this.z = z;
7 }
8 public void add(Vector3D other) {
9
x += other.x; y += other.y; z += other.z;
10 }
11 public void normalize() {
12
double mag = Math.sqrt(x*x + y*y + z*z);
13
x = x/mag; y = y/mag; z = z/mag;
14 }
15 public static Vector3D mistery(Vector3D v1, Vector3D v2) {
16
Vector3D result = new Vector3D(v1.x, v1.y, v1.z);
17
v2.normalize(); result.add(v2); return result;
18 }
19 public String toString() {
20
return “x=” + String.valueOf(x)
21
+ “ y=” + String.valueOf(y)
22
+ “ z=” + String.valueOf(z);
23 }
24 }
Y dado el siguiente código que la utiliza:
1
2
3
4
5
6
Vector3D first = new Vector3D(1.0, 2.0, 3.0);
Vector3D second = new Vector3D(0.0, 0.0, 3.0);
Vector3D third = Vector3D.mistery(first, second);
println(“first: “ + first.toString());
println(“second: “ + second.toString());
prinltn(“third: ” + third.toString());
Indicad qué escribe dicho código en la pantalla. Para ello, mostrad cómo se
ejecutan las diferentes llamadas a métodos indicando en todo momento cada uno
de los objetos referenciados, ya sea por las variables del programa principal, por
los parámetros, variables locales, o por la referencia mágica this (cuando ésta
existe).
Problema 2. (3 puntos)
Un amigo biólogo está analizando secuencias de ADN y quiere que le ayudemos a
buscar fragmentos interesantes dentro de ellas. Como está trabajando con ADN
muy deteriorado, en vez de un único bloque de ADN, lo que obtiene después del
análisis es una cadena que contiene espacios en blanco en las partes que no se han
podido recuperar. Diremos que un fragmento es interesante si contiene como
subcadena a alguno de los marcadores predefinidos. Para representar estos
Segundo Parcial de Programación 2
Curso 2010/2011
marcadores usaremos el vector de cadenas MARKERS, que estará predefinido en
nuestro programa.
Lo que quiere es que le implementemos una función para saber cuántos
fragmentos interesantes hay en los pedazos de ADN que ha podido recuperar. Es
decir:
1 public class ADNAnalyser extends ConsoleProgram {
2 private String[] MARKERS = { “taca”, “gata”, “caca” };
3 private int countInteresting(String dna) {
4
¿?
5 }
6 public void run() {
7
String analysis = readLine(“Resultado del análisis: “);
8
int numInterentingFragments = countInteresting(analysis);
9
println(“Número de interesantes: “ + numInterestingFragments);
10 }
11 }
Recordad el uso de la descomposición en métodos auxiliares y la elección de
nombres adecuados tanto para las variables como para los métodos.
Algunos métodos útiles


class StringTokenizer:
o new StringTokenizer(String str): devuelve una instancia de
StringTokenizer que lee trozos de la cadena str separados por
caracteres en blanco.
o new StringTokenizer(String str, String delims): devuelve una
instancia de StringTokenizer que lee trozos de la cadena str
separados por alguno de los caracteres en delims.
o boolean hasMoreTokens(): indica si quedan más trozos que extraer
del StringTokenizer.
o String nextToken(): devuelve el siguiente trozo disponible.
class String:
o char charAt(int index): devuelve el carácter correspondiente a la
posición index.
o String substring(int begin, int end): obtiene la subcadena que
empieza en la posición begin y se extiende hasta, pero no incluye,
end.
o boolean equals(String other): indica si la cadena receptora es igual a
la dada.
o boolean equalsIgnoreCase(String other) indica si la cadena
receptora es igual a la dada, ignorando diferencias entre mayúsculas
y minúsculas.
o int indexOf(String s): devuelve el índice de la primera aparición de s
en la cadena receptora o -1 si no aparece.
o int indexOf(String s, int begin): igual que la anterior, pero solamente
considerando las posiciones de la cadena receptora a partir de begin.
o String toUpperCase(): devuelve la cadena que contiene los mismos
caracteres que la cadena receptora pero en mayúsculas.
Segundo Parcial de Programación 2
Curso 2010/2011
o String toLowerCase():devuelve la cadena que contiene los mismos
caracteres que la cadena receptora pero en minúsculas.
Problema 3. (4 puntos)
Queremos hacer una clase para representar polinomios. Recordad que un
polinomio es una expresión de la forma:
𝑃(𝑥) = 𝑎0 + 𝑎1 𝑥 + 𝑎2 𝑥 2 + ⋯ + 𝑎𝑛 𝑥 𝑛
dónde 𝑛 es el grado del polinomio (𝑎𝑛 ≠ 0). Para un polinomio de grado 𝑛
necesitaremos 𝑛 + 1 coeficientes.
Por tanto definiremos una clase, denominada Polynomial, con las siguientes
operaciones:
 new Polynomial(int maxDegree): que creará un polinomio con grado
máximo degree.
 int getMaxDegree(): devuelve el grado máximo del polinomio.
 int getDegree(): devuelve el grado correspondiente al coeficiente no nulo
de grado más alto. Si todos los coeficientes son nulos, devuelve 0.
 void setCoefficient(int degree, double coeff): que indica que el
coeficiente del grado degree es coeff. Si el grado es superior al definido
como máximo para el polinomio, la operación no hace nada.
 double getCoefficient(int degree): que devuelve el coeficiente de ese
grado dentro del polinomio. Si el grado es superior al definido como
máximo para el polinomio, devuelve 0.0
 static Polynomial add(Polynomial p1, Polynomial p2): que devuelve la
suma de los dos polinomios. Recordad que el grado de la suma es el grado
correspondiente al polinomio de grado más alto. Además, querremos que el
resultado sea un polinomio normalizado.
 void normalize(): ajusta el polinomio de manera que el coeficiente de
grado máximo no sea nulo (excepto para el caso en que solamente quedara
el coeficiente de grado 0). Después de normalizar, getDegree y
getMaxDegree devuelven el mismo valor.
Lo que se pide es que diseñéis e implementéis la clase Polynomial con los métodos
y constructores mostrados.
Recordad el uso de la descomposición en métodos auxiliares y la elección de
nombres adecuados tanto para las variables como para los métodos.
Descargar