Examen de Prácticas de programación UOC 2021 · síntesis de (Convocatoria de enero 2021)
Examen de Prácticas de programación de la UOC (Grado en Ingeniería Informática) 2021, síntesis de (Convocatoria de enero 2021): 5 problemas con solución.
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
Tomando como base el modelo de administración de puestos de trabajo de un espacio colaborativo (coworking), disponemos de las definiciones de tipos y constantes especificadas a continuación:
const
MAX_SPACES: integer:= 50;
MAX_ANNEXES: integer:= 3;
PRICE_TABLEFLEX: real:= 50.00;
PRICE_TABLEFIX: real:= 80.00;
PRICE_OFFICEFIX: real:= 140.00;
end const
type
tRate = {tableFlex, tableFix, officeFix};
tWorkSpace = record
id: integer;
area: real;
rate: tRate;
end record
tPartner = record
id: integer;
name: string;
discount: integer;
end record
tContractAnnex = record
idWorkSpace: integer;
price: real;
end record
tContract = record
idPartner: integer;
month: integer;
year: integer;
annexesSet: vector[MAX_ANNEXES] of tContractAnnex;
numAnnex: integer;
end record
tCoworking = record
workSpaceSet: vector[MAX_SPACES] of tWorkSpace;
numWorkSpaces: integer;
partnersSet: pointer to tPartner;
numPartners: integer;
contractsSet: pointer to tContract;
numContracts: integer;
end record
end type
Se plantea el desarrollo de una acción/función con la signatura:
function first_partner(c: tCoworking): string
Su cometido reside en retornar el nombre del miembro asociado a la contratación más antigua registrada. Si aconteciera un empate temporal exacto entre varios acuerdos, se desempatará seleccionando aquel cuyo número de identificación de contrato sea estrictamente inferior.
a.
[10%] Detalla razonadamente en una o dos frases la precondición matemática o lógica requerida para first_partner, partiendo de la premisa de que la compañía alberga un mínimo de un asociado, un espacio físico y una vinculación contractual dada de alta.
Pregunta 1.b · Diseño descendente sobre vectores de registros en lenguaje algorítmico
Tomando como base el modelo de administración de puestos de trabajo de un espacio colaborativo (coworking), disponemos de las definiciones de tipos y constantes especificadas a continuación:
const
MAX_SPACES: integer:= 50;
MAX_ANNEXES: integer:= 3;
PRICE_TABLEFLEX: real:= 50.00;
PRICE_TABLEFIX: real:= 80.00;
PRICE_OFFICEFIX: real:= 140.00;
end const
type
tRate = {tableFlex, tableFix, officeFix};
tWorkSpace = record
id: integer;
area: real;
rate: tRate;
end record
tPartner = record
id: integer;
name: string;
discount: integer;
end record
tContractAnnex = record
idWorkSpace: integer;
price: real;
end record
tContract = record
idPartner: integer;
month: integer;
year: integer;
annexesSet: vector[MAX_ANNEXES] of tContractAnnex;
numAnnex: integer;
end record
tCoworking = record
workSpaceSet: vector[MAX_SPACES] of tWorkSpace;
numWorkSpaces: integer;
partnersSet: pointer to tPartner;
numPartners: integer;
contractsSet: pointer to tContract;
numContracts: integer;
end record
end type
Se plantea el desarrollo de una acción/función con la signatura:
function first_partner(c: tCoworking): string
Su cometido reside en retornar el nombre del miembro asociado a la contratación más antigua registrada. Si aconteciera un empate temporal exacto entre varios acuerdos, se desempatará seleccionando aquel cuyo número de identificación de contrato sea estrictamente inferior.
b.
[30%] Codifica en pseudocódigo o lenguaje algorítmico la rutina first_partner empleando una estrategia estructurada de descomposición top-down (diseño descendente). Desarrolla los subprogramas auxiliares pertinentes e incluye una breve reseña (1-2 renglones) que resuma con precisión el propósito de cada módulo implementado.
Pregunta 2.a y 2.b · Comprensión y traza de algoritmos recursivos
Analiza el siguiente fragmento programado en lenguaje C perteneciente a un procedimiento denominado guess:
Analiza el siguiente fragmento programado en lenguaje C perteneciente a un procedimiento denominado guess:
int guess(int x)
{
int result;
assert(x >= 0);
if (x == 0) // (1)
result = 1; // (2)
else // (3)
result = guess(x - 1) * x; // (4)
return result; // (5)
}
a.
[10%] ¿Qué efectos prácticos desencadenaría sobre el flujo de control reemplazar la instrucción indicada con la etiqueta (2) por la llamada result = guess(4); ?
b.
[10%] Especifica el significado matemático o funcional que desempeña el algoritmo guess. Asimismo, describe cronológicamente la cadena de llamadas y el cálculo intermedio que surge al ejecutar el siguiente fragmento:
int res;
res = guess(4);
Pregunta 2.c · Transformación entre versión recursiva e iterativa en C
Analiza el siguiente fragmento programado en lenguaje C perteneciente a un procedimiento denominado guess:
Analiza el siguiente fragmento programado en lenguaje C perteneciente a un procedimiento denominado guess:
int guess(int x)
{
int result;
assert(x >= 0);
if (x == 0) // (1)
result = 1; // (2)
else // (3)
result = guess(x - 1) * x; // (4)
return result; // (5)
}
c.
[20%] Desarrolla una versión no recursiva (iterativa) equivalente para guess en código C, empleando una estructura de repetición.
Pregunta 2.d y 2.e · Análisis de complejidad y eficiencia
Analiza el siguiente fragmento programado en lenguaje C perteneciente a un procedimiento denominado guess:
int guess(int x)
{
int result;
assert(x >= 0);
if (x == 0) // (1)
result = 1; // (2)
else // (3)
result = guess(x - 1) * x; // (4)
return result; // (5)
}
d)
[15%] Efectúa el estudio formal del coste computacional (complejidad temporal) correspondiente al diseño recursivo original a través de su relación de recurrencia detallada paso a paso.
e)
[5%] En caso de que se concibiera una variante de este método cuyo orden de complejidad temporal resultase de clase logarítmica , razona en un párrafo breve de 4 a 5 líneas la conveniencia o inconveniencia de sustituir la implementación actual por dicha propuesta.
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
Prueba de síntesis enero 2021 (2021) · Prueba de síntesis. Enero de 2021 (2021)