Examen de Programació II UDL 2010 · Exámenes de Recuperación y Tercer Parcial de Programación 2 (Curso 2010/2011)
Examen de Programació II de la UDL (Grado en Ingeniería Informática) 2010, Exámenes de Recuperación y Tercer Parcial de Programación 2 (Curso 2010/2011): 5…
Temas del examen: Recursión: diseño, traza y diagramas de llamadas · Diseño de clases y objetos en Java, herencia e igualdad · Ficheros en Java: texto secuencial y acceso directo binario
Ejercicio Recuperación - Problema 1. Distancia de Manhattan… · Recursión: diseño, traza y diagramas de llamadas
Dados dos vectores de números reales en doble precisión ( double[]) que cuentan con la misma longitud, se pretende programar una función que halle la distancia de Manhattan existente entre ellos. Dicha métrica responde a la siguiente formulación matemática:Considerando que en Java los índices de un vector se indexan a partir del valor 0, la signatura del método público principal es: public double manhattan(double[] a, double[] b) {
//...
} Con el fin de posibilitar la recursividad, es necesario introducir un parámetro complementario que determine la posición o segmento del vector sobre el que se opera: public double manhattan(double[] a, double[] b, int pos) {
//...
}
a)
Escribir la implementación de la función recursiva manhattan(double[] a, double[] b, int pos), justificando de forma explícita el caso base, el paso inductivo y el esquema de avance.
public double manhattan(double[] a, double[] b, int pos) { }
b)
Escribir la llamada inicial correspondiente que debe realizarse desde el método manhattan(double[] a, double[] b) para evaluar los vectores al completo.
public double manhattan(double[] a, double[] b) { }
Ejercicio Recuperación - Problema 2. Clase StatVar y agrega… · Diseño de clases y objetos en Java, herencia e igualdad
Recuperación - Problema 2. Clase StatVar y agregación estadística
Se desea programar una clase en Java denominada StatVar orientada al cálculo progresivo de diversas medidas estadísticas (media, máximo y mínimo) a partir de los datos numéricos suministrados secuencialmente.
Por ejemplo, ante la siguiente secuencia de instrucciones:
StatVar v = new StatVar();
v.add(2.0);
v.add(4.0);
System.out.println("La media es " + v.getMean());
System.out.println("El máximo es " + v.getMax());
System.out.println("El mínimo es " + v.getMin()); El programa imprime por consola:
La media es 3.0
El máximo es 4.0
El mínimo es 2.0 Para optimizar el uso de memoria, no está permitido almacenar individualmente los datos suministrados; únicamente deben mantenerse la suma acumulada, el recuento de valores introducidos, el valor máximo y el valor mínimo observados.
Adicionalmente, se requieren dos variantes (de instancia y estática) de un método merge que permita combinar la información de dos instancias de StatVar, obteniendo un estado representativo del conjunto global.
La plantilla estructural de la clase es:
public class StatVar {
private double sum;
private int num;
private double max;
private double min;
public StatVar() {... }
public void add(double value) {... }
public double getMean() {... }
public double getMin() {... }
public double getMax() {... }
public void merge(StatVar other) {... }
public static StatVar merge(StatVar sv1, StatVar sv2) {... }
} Consideraciones:
No es necesario contemplar el caso de error en el que se solicite la media, el máximo o el mínimo sin haber agregado ningún dato previo.
Las constantes Double.MIN_VALUE (o -Double.MAX_VALUE) y Double.MAX_VALUE pueden resultar apropiadas para inicializar los límites numéricos.
Ejercicio Recuperación - Problema 3. Procesamiento de nómin… · Ficheros en Java: texto secuencial y acceso directo binario
Recuperación - Problema 3. Procesamiento de nóminas por categoría
Se dispone de un fichero de texto secuencial cuyas líneas contienen información laboral de empleados con el siguiente formato:
Nombre, Categoría, SueldoBase, Complemento
El campo Categoría únicamente puede tomar uno de los tres valores: Base, Media o Alta. Por ejemplo:
José María, Base, 1500.0, 800.0
María Luisa, Media, 2000.0, 1200.0
Luisa Fernanda, Alta, 8000.5, 10000.0
...
Se pide desarrollar un programa completo en Java que lea un fichero con dicha estructura (asumiendo formato correcto y la existencia de al menos un registro por cada categoría) y calcule e imprima la media de retribución total ( sueldo base + complementos) para cada una de las tres categorías de trabajadores.
Nota: Se permite hacer uso de la clase StatVar desarrollada en el Problema 2.
Ejercicio Tercer Parcial - Problema 1. Cálculo de áreas de… · Ficheros en Java: texto secuencial y acceso directo binario
4. Tercer Parcial - Problema 1. Cálculo de áreas de figuras desde fichero
Dado un fichero secuencial de texto estructurado por líneas, cada una de ellas describe una figura geométrica de acuerdo con el formato:
tipo, x, y, anchura, altura
Donde:
tipo: corresponde al tipo de figura, restringido exclusivamente a GRect (rectángulo) o GOval (óvalo).
x, y: coordenadas de posicionamiento espacial.
anchura, altura: magnitudes dimensionales de la figura geométrica.
Ejemplo de contenido:
GRect, 20.0, 12.3, 23.2, 100.0
GOval, 18.4, 15.3, 245.89, 112.25
...
Se pide desarrollar un programa que procese un fichero con esta información y obtenga la suma acumulada de las áreas de la totalidad de figuras contenidas en él.
Consideraciones a tener en cuenta:
Aplicar descomposición funcional (diseño descendente), modularizando el código en métodos auxiliares y evitando concentrar la lógica en un único bloque.
Se garantiza que el fichero está bien formado: los tipos son válidos y la cantidad y tipología de los datos numéricos son consistentes.
El área de un rectángulo se define como: .
El área de un óvalo se calcula como: .
Ejercicio Tercer Parcial - Problema 2. Persistencia de Prod… · Ficheros en Java: texto secuencial y acceso directo binario
Tercer Parcial - Problema 2. Persistencia de Product e inversión de fichero
Considérese la clase Product que modela los artículos de un inventario:
public class Product {
public static final int SIZE = /* ¿ ? */;
private int type;
private long code;
private double price;
private String description;
public Product(int type, long code, double price, String descr) {
this.type = type;
this.code = code;
this.price = price;
this.description = descr;
}
//...
public byte[] toByteArray() { /* ¿ ? */ }
public static Product fromByteArray(byte[] record) { /* ¿ ? */ }
}
Para almacenar instancias de esta entidad en un fichero de acceso directo ( RandomAccessFile), se debe definir una longitud fija por registro y utilizar métodos de empaquetado/desempaquetado a bajo nivel con la clase de utilidades PackUtils.
byte
char
int
long
float
double
8 bits (1 B)
16 bits (2 B)
32 bits (4 B)
64 bits (8 B)
32 bits (4 B)
64 bits (8 B)
Considerando una longitud máxima para la cadena description de 30 caracteres (utilizando packLimitedString y unpackLimitedString, ocupando 2 bytes por carácter):
a)
Determinar el valor exacto de la constante SIZE en bytes e implementar los métodos toByteArray() y fromByteArray(byte[] record).
b)
Escribir un programa que reciba un fichero de acceso aleatorio con registros de productos consecutivos (sin huecos) y lo invierta in situ (el primer producto pasa al último lugar, el segundo al penúltimo, y así sucesivamente).
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