Examen - Universidad Politécnica de Madrid

Anuncio
Depto. Ingeniería de Sistemas Telemáticos
Universidad Politécnica de Madrid
ETSI Telecomunicación
Fundamentos de Programación
15 de diciembre de 2011
Apellidos:
Nombre:
•
•
•
Duración máxima del examen: 2 horas.
Se permiten libros y apuntes.
No olvide poner el nombre en todas las hojas.
Ejercicio 1 (2 puntos)
Una tarjeta de crédito se modela usando los siguientes campos:
saldo disponible
indica cuánto dinero podemos extraer con la tarjeta
clave
clave secreta para autenticar al usuario
estado de la tarjeta: cerrada, abierta o bloqueada
la tarjeta está normalmente cerrada; pasa a abierta si el usuario introduce la clave correcta y
queda bloqueada para siempre si el usuario introduce 3 claves incorrectas consecutivas
número de intentos fallidos consecutivos
cuenta el número de intentos consecutivos de abrir la tarjeta usando una clave equivocada
a) Desarrolle por completo una clase, TarjetaDeCredito:
public class TarjetaDeCredito {
/**
* Inicializa los atributos privados de la clase.
*
* @param saldoInicial saldo inicial en la cuenta.
* @param clave
clave de acceso.
*/
public TarjetaDeCredito(int saldoInicial, int clave) {
}
/**
* Getter.
*
* @return true si la tarjeta está cerrada.
*/
public boolean isCerrada() {
}
/**
* Getter.
*
* @return true si la tarjeta está abierta.
*/
public boolean isAbierta() {
}
/**
* Getter.
*
* @return true si la tarjeta está bloqueada.
*/
public boolean isBloqueada() {
}
/**
* Método para autenticar la clave de la tarjeta.
* Si se llama tres veces seguidas a este método con clave,
* no válida, la tarjeta queda bloqueada.
*
* @param clave clave numérica que el usuario.
* @return true si la clave es válida; false si no lo es.
* @throws TarjetaBloqueadaException
*
Si la tarjeta estaba o queda bloqueada.
*/
public boolean abre(int clave)
throws TarjetaBloqueadaException {
}
/**
* Método para 'irse': el usuario cierra la tarjeta.
*/
public void cierra() {
}
/**
* Método para sacar dinero de la cuenta asociada a la tarjeta.
* Antes de sacar dinero, hay que autenticar la tarjeta.
*
* @param cantidad dinero que queremos sacar.
* @return el saldo total que queda en la cuenta después.
* @throws NohaySaldoSuficienteException Si no hay suficiente.
* @throws TarjetaBloqueadaException
Si está bloqueada.
*/
public int sacar(int cantidad)
throws NohaySaldoSuficienteException,
TarjetaBloqueadaException {
}
}
b) Escriba un método main para probar la clase desarrollada. Haga en dicho método al menos las
siguientes operaciones:
a. autenticar la tarjeta con clave válida y comprobar que no se bloquea,
b. extraer con la tarjeta más dinero del que se tiene como saldo y comprobar que no se puede y
c. comprobar que la tarjeta se bloquea tras autenticarse con tres claves seguidas incorrectas.
Ejercicio 2 (2 puntos)
Desarrolle un método que, recibiendo como parámetro un array de entrada con una secuencia de números
enteros, devuelva un nuevo array en el que primero aparezcan los números pares que había en el array
original ordenados en orden creciente y después aparezcan los números impares que había en el array
original, también ordenados en orden creciente. Puede desarrollar métodos auxiliares, si le simplifica el
trabajo.
Ejercicio 3 (2 puntos)
a) Programar un método recursivo que permita sumar los dígitos de un número entero. Por ejemplo: si
se le pasa como parámetro al método el número 1245, el resultado del método será 12.
b) Programar otro método que permita sumar de forma iterativa los dígitos de un número entero. Aplica
el mismo ejemplo que antes.
Ejercicio 4 (2 puntos)
ELIZA es un programa informático diseñado en el MIT entre 1964 y 1966 que intentaba mantener una
conversación de texto coherente con el usuario. ELIZA funciona buscando palabras clave en la frase escrita
por el usuario y responde con una frase modelo registrada en su base de datos. A veces, las respuestas de este
bot conversacional resultaban tan convincentes que al conversar por primera vez con él, algunas personas
creyeron que en verdad estaban dialogando con un interlocutor humano.
Se pide desarrollar un método que realice una aproximación muy sencilla a la funcionalidad que
proporcionaba ELIZA. En concreto, el método debe realizar lo siguiente:
•
•
•
Recibir frases tecleadas por un humano desde el ordenador (bucle infinito).
Comprobar para cada frase que teclea el humano si existen en la misma una serie de palabras clave.
Responder con un texto por pantalla a cada frase del humano en función de que la misma contuviera
o no una determinada palabra clave.
En la siguiente tabla se resumen las palabras claves posibles y la frase de respuesta del ordenador:
Palabra clave
Hola
Encantado
Adiós
Hora
Nombre
Frase de Respuesta
“Hola, ¿qué tal?”
“Encantado de conocerte yo también”
“Adiós, espero volverte a ver pronto”
“Lo siento, no llevo reloj”
“Mi nombre es Eliza”
En caso de que la frase introducida por el humano no contenga ninguna de las palabras clave indicadas, el
ordenador ha de escribir por pantalla “Lo siento, no te comprendo”.
Puede resultarle de utilidad el método de la clase String “public boolean contains(String s)”, que
devuelve true si la cadena original contiene la cadena s que se le pasa como parámetro al método.
Ejercicio 5 (2 puntos)
a) Defina una clase “NumeroNegativoException” que herede de la clase “Exception” y que contenga un
constructor sin parámetros y otro constructor que reciba como parámetro una “String”, de tal modo
que ambos invoquen a los constructores de la clase “Exception” correspondiente.
b) Indique cuándo se producirían las siguientes excepciones definidas en Java e incluya un breve
fragmento de código con un ejemplo para cada caso: RunTimeException, NumberFormatException,
ClassCastException, ClassNotFoundException e IndexOutOfBoundsException.
c) Describa el resultado que se produciría al ejecutar el método “main” que se muestra a continuación
public static double acceso_por_indice(double[] v, int j)
throws Exception {
try {
if ((0 <= j) && (j <= v.length))
return v[j];
else
throw new RuntimeException("fuera de rango");
} catch (Exception e) {
throw e;
}
}
public static void main(String[] args)
throws Exception {
double[] v = new double[15];
acceso_por_indice(v, 16);
}
Descargar