Examen de Prácticas de programación UOC 2021 · Prueba de síntesis. Enero de 2021
Examen de Prácticas de programación de la UOC (Grado en Ingeniería Informática) 2021, Prueba de síntesis. Enero de 2021: 5 problemas con solución. Gratis.
Temas del examen: Especificación: precondiciones y postcondiciones · Diseño descendente sobre vectores de registros en lenguaje algorítmico · Comprensión y traza de algoritmos recursivos · Transformación entre versión recursiva e iterativa en C · Análisis de complejidad y eficiencia
Pregunta 1.a · Especificación: precondiciones y postcondiciones
Pregunta 1. Gestión de espacios de coworking mediante diseño descendente
Tomando como base el sistema de administración de un centro de trabajo compartido ( coworking), se definen los siguientes tipos de datos y constantes:
// Valores límite y tarifas base
constante
MAX_SPACES: entero = 50;
MAX_ANNEXES: entero = 3;
PRICE_TABLEFLEX: real = 50.00;
PRICE_TABLEFIX: real = 80.00;
PRICE_OFFICEFIX: real = 140.00;
fin constante
tipo
tRate = {tableFlex, tableFix, officeFix};
tWorkSpace = registro
id: entero;
area: real;
rate: tRate;
fin registro
tContractAnnex = registro
idWorkSpace: entero;
price: real;
fin registro
tContract = registro
idPartner: entero;
month: entero;
year: entero;
annexesSet: vector [1..MAX_ANNEXES] de tContractAnnex;
numAnnex: entero;
fin registro
tCoworking = registro
workSpaceSet: vector [1..MAX_SPACES] de tWorkSpace;
numWorkSpaces: entero;
contractsSet: puntero a tContract;
numContracts: entero;
fin registro
fin tipo
Se dispone del encabezado del siguiente subprograma:
function useless_workspaces (c: tCoworking): integer
El propósito de esta función consiste en computar la cantidad total de puestos de trabajo ( workspaces) que jamás han sido objeto de contratación.
a.
[10%] Detalla las precondiciones pertinentes para la función useless_workspaces, teniendo en cuenta que se asume que la entidad dispone como mínimo de un espacio dado de alta. Acompaña la respuesta con una justificación concisa (una o dos líneas).
Pregunta 1.b · Diseño descendente sobre vectores de registros en lenguaje algorítmico
Pregunta 1. Gestión de espacios de coworking mediante diseño descendente
Tomando como base el sistema de administración de un centro de trabajo compartido ( coworking), se definen los siguientes tipos de datos y constantes:
// Valores límite y tarifas base
constante
MAX_SPACES: entero = 50;
MAX_ANNEXES: entero = 3;
PRICE_TABLEFLEX: real = 50.00;
PRICE_TABLEFIX: real = 80.00;
PRICE_OFFICEFIX: real = 140.00;
fin constante
tipo
tRate = {tableFlex, tableFix, officeFix};
tWorkSpace = registro
id: entero;
area: real;
rate: tRate;
fin registro
tContractAnnex = registro
idWorkSpace: entero;
price: real;
fin registro
tContract = registro
idPartner: entero;
month: entero;
year: entero;
annexesSet: vector [1..MAX_ANNEXES] de tContractAnnex;
numAnnex: entero;
fin registro
tCoworking = registro
workSpaceSet: vector [1..MAX_SPACES] de tWorkSpace;
numWorkSpaces: entero;
contractsSet: puntero a tContract;
numContracts: entero;
fin registro
fin tipo
Se dispone del encabezado del siguiente subprograma:
function useless_workspaces (c: tCoworking): integer
El propósito de esta función consiste en computar la cantidad total de puestos de trabajo ( workspaces) que jamás han sido objeto de contratación.
b.
[30%] Diseña e implementa la función useless_workspaces en pseudocódigo algorítmico empleando la técnica de diseño descendente. Se deben codificar todos los módulos auxiliares requeridos en los niveles inferiores, incorporando una breve descripción de 1 a 2 líneas para cada uno de ellos (los métodos que no cuenten con explicación no obtendrán puntuación).
Pregunta 2.a-b · Comprensión y traza de algoritmos recursivos
Se facilita la siguiente rutina recursiva escrita en lenguaje C:
#define MAX 42
int guess(int v[MAX], int a, int b)
{
int result;
assert(0 <= a && a < MAX && 0 <= b && b < MAX && a <= b);
if (a == b) // (1)
result = v[b]; // (2)
else { // (3)
result = guess(v, a + 1, b); // (4)
if (result > v[a]) // (5)
result = v[a]; // (6)
} // (7)
return result; // (8)
}
a.
[10%] ¿Qué repercusiones acarrea sustituir la llamada de la línea (4) por la instrucción result = guess(v, a + 2, b); ?
b.
[10%] Detalla la finalidad del algoritmo guess (qué cálculo resuelve sobre los datos). Asimismo, refleja la secuencia de ejecución paso a paso (mediante traza o diagrama de llamadas) ante la siguiente invocación con un array de muestra:
int datos[] = {0, -4, 2, 6, 1, 3};
int test = guess(datos, 2, 5);
Pregunta 2.c · Transformación entre versión recursiva e iterativa en C
Se facilita la siguiente rutina recursiva escrita en lenguaje C:
#define MAX 42
int guess(int v[MAX], int a, int b)
{
int result;
assert(0 <= a && a < MAX && 0 <= b && b < MAX && a <= b);
if (a == b) // (1)
result = v[b]; // (2)
else { // (3)
result = guess(v, a + 1, b); // (4)
if (result > v[a]) // (5)
result = v[a]; // (6)
} // (7)
return result; // (8)
}
[20%] c. Desarrolla una versión equivalente puramente iterativa en lenguaje C y razona el enfoque adoptado para la transformación.
Pregunta 2.d-e · Análisis de complejidad y eficiencia
Se facilita la siguiente rutina recursiva escrita en lenguaje C:
#define MAX 42
int guess(int v[MAX], int a, int b)
{
int result;
assert(0 <= a && a < MAX && 0 <= b && b < MAX && a <= b);
if (a == b) // (1)
result = v[b]; // (2)
else { // (3)
result = guess(v, a + 1, b); // (4)
if (result > v[a]) // (5)
result = v[a]; // (6)
} // (7)
return result; // (8)
}
d.
[15%] Formula y resuelve de manera exhaustiva la ecuación en recurrencia que modela la complejidad temporal de la implementación recursiva original (peor caso).
e.
[5%] Si se planteara una solución alternativa cuya complejidad algorítmica fuera igualmente de orden lineal, ¿existiría algún criterio teórico relevante de complejidad para decantarse por ella? Razona la contestación en cuatro o cinco líneas.
También puedes estudiar por temas
Practica un tema con ejercicios de los exámenes de todos los años, mezclados.
- Comprensión y traza de algoritmos recursivos · 9 problemas · 95 % de que salga
- Especificación: precondiciones y postcondiciones · 8 problemas · 95 % de que salga
- Diseño descendente sobre vectores de registros en lenguaje algorítmico · 8 problemas · 95 % de que salga
- Transformación entre versión recursiva e iterativa en C · 8 problemas · 95 % de que salga
- Análisis de complejidad y eficiencia · 8 problemas · 95 % de que salga
Otras convocatorias de 2021
Examen de síntesis de Prácticas de programación (Convocatoria de enero 2021) (2021) · Prueba de síntesis enero 2021 (2021)