Hoja
4
1
Queremos definir dentro del paquete figuras una clase Cuadrado aprovechando por medio de los mecanismos
que proporciona Java que ya disponemoos de la clase Rectángulo.java,
ya que un cuadrado puede verse como un rectángulo en el que lx==ly.
La clase Cuadrado debe tener una constructora con 3 parámetros enteros, los
dos primeros representando las coordenadas de la esquina superior izquierda del cuadrado,
y el tercero especificando el ancho del cuadrado. El resto de los métodos
deben ser idénticos a los de Rectángulo, y no se permite introducir ningún atributo nuevo.
La implementación de la clase debe asegurar que un programa como:
import figuras.*;
public class Principal {
public static void main(String []args) {
Cuadrado c = new Cuadrado(20,20,5);
System.out.println(c.getX()+" "+c.getY()+" "+
c.getLx()+" "+c.getLy());
System.out.println("Área: "+c.área());
System.out.println(c);
}
}
escribirá por pantalla:
20 20 5 5 Área: 25 (20, 20) Lado: 5Consideramos ahora el siguiente programa:
Cuadrado c1 = new Rectángulo(10,10,6,6);
Rectángulo r1 = new Cuadrado(20,20,5);
Cuadrado c2 = new Cuadrado(20,20,5);
Rectángulo r2 = new Rectángulo(10,10,6,6);
c2 = r2;
r2 = c2;
System.out.println(c2);
System.out.println(r2);
Indica razonadamente qué líneas darán error al compilar y cuáles son por el contrario correctas. Indica también qué escribirá el programa por pantalla tras quitar las líneas incorrectas.
2
Queremos escribir código para representar los valores de una factura telefónica. La factura contendrá el nombre de la compañía, el total a pagar y el número total de llamadas realizadas.
Compañía: Vozarrón - 3 llamadas - Importe: 127.24 euros.
3
Ahora vamos a utilizar la clase anterior, utilizando los mecanismos de Java, para
representar la
factura telefónica de la compañía TeLeLe. Esta empresa cobra las llamadas según la
hora de inicio h (se considera la parte entera, p.ej. para las 7:54 se
tomará h=7) según los
siguiente criterios:
Hora de inicio (de 0 a 24): 13 Duración (segundos): 50 Más llamadas? (s/n) s Hora de inicio (de 0 a 24): 17 Duración (segundos): 1121 Más llamadas? (s/n) s Hora de inicio (de 0 a 24): 23 Duración (segundos): 170 Más llamadas? (s/n) n Factura: Compañía: TeLeLe - 3 llamadas - Importe: 29.07 euros
4  Partimos
de la siguiente clase Marcador:
package deportes;
// marcador de un deporte genérico
public class Marcador {
// atributos
private int puntLocal, puntVisitante; private String nombreLocal, nombreVisitante;
// constructora. Recibe como parámetro el nombre de los equipos.
//Las puntuaciones iniciales son 0-0
public Marcador(String nombreLocal,String nombreVisitante) {
this.nombreLocal = nombreLocal;
this.nombreVisitante = nombreVisitante;
puntLocal = puntVisitante = 0;
}
// métodos de consulta
public int getPuntLocal() { return puntLocal;}
public int getPuntVisitante() { return puntVisitante;}
public String getNombreLocal() { return nombreLocal;}
public String getNombreVisitante() { return nombreVisitante;}
// incremento de cada equipo
public Marcador incLocal() {puntLocal++; return this;}
public Marcador incVisitante() { puntVisitante++; return this;}
// para deportes que admiten incrementos de más de un punto
public Marcador incLocal(int inc) {puntLocal += inc; return this;}
public Marcador incVisitante(int inc) {puntVisitante+=inc; return this;}
// para convertir el objeto a cadena
public String toString() {
return nombreLocal + ": "+puntLocal+" - "+
nombreVisitante+": "+puntVisitante;
}
}
Aprovechando la clase anterior, escribir una nueva clase MarcadorBaloncesto para representar un marcador para dicho juego. Debe formar parte de un paquete juegos.
La clase debe contener los siguientes métodos (además de los atributos que se consideren necesarios):
La clase debe contener únicamente los métodos descritos (por
ejemplo no debe tener métodos como incLocal o incVisitante).
5 Queremos representar en Java fórmulas lógicas, formadas por
variables combinadas mediantes las operaciones Neg (negación), And
(conjunción) y Or (disyunción). Un ejemplo de fórmula: (X And Z) Or
(Neg(Y And Z)), donde X, Y, Z son variables. Una valoración de la
fórmula será el valor booleano (true o false) obtenido al dar valor booleano a
las variables. Por ejemplo si en la fórmula anterior damos a X, Y el valor
true y a Z el valor false obtendremos la valoración true, ya que
(true And false) Or (Neg(true And false)) = false Or (Neg false) = false Or true = true
Para fijar el valor de cada variable se empleará la siguiente clase ValorVar:
package lógica;
// Clase ValorVar: fija el valor (true o false) de una variable
public class ValorVar {
// atributos
private String nombreVar; // nombre de la variable
private boolean valor; // valoración
// constructora.
// - n: Nombre de la variable
// - v: Valoración que le corresponde
public ValorVar(String n, boolean v) {
this.nombreVar = n; this.valor = v;
}
// métodos de consulta
public String nombreVar() {return nombreVar;}
public boolean valor(){return valor;}
}
6 Escribir un
programa de prueba para las clases del ejercicio anterior en el que:
7 Consideramos
la siguiente clase, que permite calcular raíces de funciones usando el
método de Newton:
// halla un raíz de f(x)==0
public abstract class Newton {
// función de la que se quiere hallar la raíz
// devuelve un valor 'y' tal que y=f(x)
public abstract double f (double x);
// derivada de f. devuelve un valor 'y' tal que y=df(x)
public abstract double df (double x);
// hay que pasarle el valor inicial desde el que buscará la raíz
public double raíz (double xIni) {
final double error = 1e-5; //
final int imax = 100; // nº máximo de iteraciones
double x,aprox=xIni;
double estimación = xIni; // estimación actual
// en cada vuelta 'aprox' representa la última aproximación
double iteración = 0;
do {
iteración++;
x = aprox;
aprox = x - f(x) / df(x); // nueva aproximación
} while (Math.abs(aprox - x) > error && iteración < imax);
return aprox;
}
}
Como se puede observar esta clase tiene 3 métodos:
Escribir una clase TercerGrado para representar polinomios de tercer
grado. La clase incluirá los atributos que considere necesarios y al
menos los siguientes métodos:
a) Una constructora que reciba como parámetros 4 números reales
a,b,c,d representando el polinomio ax³ + bx² +cx +d.
b) Un método raíz sin parámetros que devuelva una raíz del polinomio obtenida al aplicar el método de Newton tomando como aproximación inicial el valor 0.0.
La clase puede incluir otros métodos que se consideren necesarios y debe aprovechar, usando los recursos de Java, la clase Newton, que no puede ser modificada.
8 Escribir un programa principal de prueba para la clase anterior en el
que se represente el polinomio de tercer grado 4x³ -2x² +3x +1, y
se muestre por pantalla la raíz que se obtiene al aplicar el método de Newton-Raphson,
con aproximación inicial el valor 0.0. (el resultado debe ser -0.262978.....).
2004-2006 Rafael Caballero