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.

Ver los 5 temas

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)