Primer parcial

Anuncio
FUNDAMENTOS DE PROGRAMACIÓN
Curso: 2010/11
PRIMER EXAMEN PARCIAL. SOLUCIONES
EJERCICIO 1 (2,5 puntos)
a)
public interface Encuesta extends Copiable<Encuesta>, Comparable<Encuesta> {
Integer getIdentificador();
Integer getEdad();
void setEdad (Integer e);
Character getGenero();
Double getSalario();
void setSalario(Double s);
Integer getDistrito();
Double getRelevancia();
}
b)
public class EncuestaNoValidaException extends RuntimeException {
public EncuestaNoValidaException() {
super();
}
public EncuestaNoValidaException(String s) {
super(s);
}
}
c)
public class EncuestaImpl implements Encuesta {
private static final Double FACTOR_RELEVANCIA = 0.15;
private
private
private
private
private
Integer identificador;
Integer edad;
Double salario;
Character genero;
Integer distrito;
public EncuestaImpl(Integer id, Integer edad, Double salario,
Character genero, Integer distrito) {
if((distrito < 1) || (distrito > 20)) {
throw new EncuestaNoValidaException("Encuesta no válida");
}
Identificador = id;
this.edad = edad;
this.salario = salario;
this.genero = genero;
this.distrito = distrito;
}
public Double getRelevancia() {
return getSalario() * FACTOR_RELEVANCIA;
}
public int compareTo(Encuesta c) {
return getIdentificador().compareTo(c.getIdentificador());
}
public Encuesta clone() {
Encuesta c = null;
try {
c = (Encuesta) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return c;
}
FUNDAMENTOS DE PROGRAMACIÓN
Curso: 2010/11
PRIMER EXAMEN PARCIAL. SOLUCIONES
public boolean equals(Object o) {
boolean res=false;
if(o instanceof Encuesta) {
Encuesta e = (Encuesta) o;
res =getIdentificador().equals(e.getIdentificador());
}
return res;
}
public String toString() {
return getIdentificador() + "," + getEdad() + "," + getGenero();
}
public int hashCode() {
return getIdentificador().hashCode();
}
}
EJERCICIO 2 (2,5 puntos)
a)
public interface EncuestaPolitica extends Encuesta {
Boolean getAfiliado();
String getVoto();
}
b)
public class EncuestaPoliticaImpl extends EncuestaImpl
implements EncuestaPolitica {
private Boolean afiliado;
private String voto;
public EncuestaPoliticaImpl (Integer id, Integer edad, Double salario,
Character genero, Integer distrito, String voto, Boolean afiliado) {
super(id, edad, salario, genero, distrito);
if((edad < 18) || (edad > 85)) {
throw new EncuestaNoValidaException("Encuesta no válida");
}
this.afiliado = afiliado;
this.voto = voto;
}
public Boolean getAfiliado(){
return afiliado;
}
public String getVoto(){
return voto;
}
public String toString() {
return super.toString() + "," + getVoto();
}
public void setEdad(Integer e) {
if((e < 18) || (e > 85)) {
throw new EncuestaNoValidaException("Encuesta no válida");
}
super.setEdad(e);
}
public Double getRelevancia() {
Double res;
FUNDAMENTOS DE PROGRAMACIÓN
Curso: 2010/11
PRIMER EXAMEN PARCIAL. SOLUCIONES
if (getAfiliado()) {
res = 0.0;
}
else {
res=super.getRelevancia();
}
return res;
}
}
EJERCICIO 3 (1,5 puntos)
a)
public class CuestionarioImpl<T> implements Cuestionario<T> {
private String codigo;
private List<T> informes;
public CuestionarioImpl(String n) {
codigo = n;
informes = new LinkedList<T>();
}
b)
public void añadeInforme(T i) {
getInformes().add(i);
}
public T recuperaInforme(Integer pos) {
return getInformes().get(pos);
}
public void incorporaInformes(Cuestionario<T> c) {
getInformes().addAll(c.getInformes());
}
// Se considera válido también usar un for extendido
EJERCICIO 4 (3,5 puntos)
a)
public static Integer votosPartidoMayorEdad (
Cuestionario<EncuestaPolitica> c, String partido, Integer edad) {
Integer cont = 0;
for (EncuestaPolitica e: c.getInformes()){
if(e.getVoto().equals(partido) && e.getEdad().compareTo(edad)>0){
cont++;
}
}
return cont;
}
b)
public static Double salarioMaximoPartido(Cuestionario<EncuestaPolitica> c,
String partido) {
Double max = null;
for (EncuestaPolitica e: c.getInformes()) {
if(e.getVoto().equals(partido)) {
if (max == null)
max = e.getSalario();
else if (e.getSalario().compareTo(max)>0) {
max = e.getSalario();
}
}
FUNDAMENTOS DE PROGRAMACIÓN
Curso: 2010/11
PRIMER EXAMEN PARCIAL. SOLUCIONES
}
return max;
}
c)
public static Double resultadosPartido(Cuestionario<EncuestaPolitica> c,
String partido) {
Integer cont = 0;
for (EncuestaPolitica e: c.getInformes()) {
if(e.getVoto().equals(partido)) {
cont++;
}
}
return 100.0 * cont / c.getInformes().size();
}
d)
public static Encuesta buscaEncuesta(Cuestionario<Encuesta> c, Integer
distrito, Integer edad1, Integer edad2) {
Encuesta res = null;
for (Encuesta e: c.getInformes()){
if(e.getDistrito().equals(distrito) &&
e.getEdad().compareTo(edad1) >= 0 &&
e.getEdad().compareTo(edad2) <= 0) {
res = e;
break;
}
}
return res;
}
e)
public static Set<Integer> distritos(Cuestionario<Encuesta> c){
Set<Integer> s = new HashSet<Integer>();
for(Encuesta e:c.getInformes()) {
s.add(e.getDistrito());
}
return s;
}
Descargar