Examen de Prácticas de programación UOC 2023 · Prueba de síntesis de (Enero de 2023)
Examen de Prácticas de programación de la UOC (Grado en Ingeniería Informática) 2023, Prueba de síntesis de (Enero de 2023): 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 personal en campañas de una ONG
En el marco del sistema informático destinado a la administración de ONGs, se definen las siguientes constantes y estructuras de datos:
// Capacidad máxima permitida para los equipos de personal
const MAX_PEOPLE: integer = 100; end const;
// Ficha de una persona vinculada a la organización
type tPerson = record
document: string;
name: string;
surname: string;
email: string;
address: string;
city: string;
birthday: tDate;
end record;
// Conjunto de miembros que forman un equipo de trabajo
type tStaff = record
elems: vector [MAX_PEOPLE] of tPerson;
count: integer;
end record;
// Identificación y pertenencia de un proyecto
type tProject = record
code: string;
ongCode: string;
end record;
// Información relativa a una campaña concreta
type tCampaign = record
project: tProject;
detail: tProjectDetail;
staff: tStaff;
end record;
// Almacén dinámico con el registro de campañas
type tCampaignData = record
elems: pointer to tCampaign;
count: integer;
end record;
// Registro general representativo de la ONG
type tONG = record
code: string;
name: string;
projects: tProjectData;
staff: tStaff;
campaigns: tCampaignData;
staffAvailability: tAvailabilityData;
end record;
Se desea implementar la siguiente acción:
action delete_person_project(inout ong: tONG, in doc: string, in projCode: string)
Dicho subprograma debe dar de baja al voluntario o trabajador cuyo documento coincida con doc en todas aquellas campañas asociadas al código de proyecto projCode dentro de la ong indicada. Asimismo, cada vez que se suprima una persona del equipo de una campaña, el vector de personal correspondiente debe mantenerse debidamente compactado (sin huecos libres intermedios).
a.
[10%] Formula en lógica de predicados la precondición para esta acción. Debe asumirse que la ONG cuenta con al menos una campaña registrada y que no existen duplicidades de personal dentro de una misma campaña (ninguna persona está repetida en el equipo de la misma campaña). Añade una breve justificación en una o dos frases.
Pregunta 1.b · Diseño descendente sobre vectores de registros en lenguaje algorítmico
Pregunta 1. Gestión de personal en campañas de una ONG
En el marco del sistema informático destinado a la administración de ONGs, se definen las siguientes constantes y estructuras de datos:
// Capacidad máxima permitida para los equipos de personal
const MAX_PEOPLE: integer = 100; end const;
// Ficha de una persona vinculada a la organización
type tPerson = record
document: string;
name: string;
surname: string;
email: string;
address: string;
city: string;
birthday: tDate;
end record;
// Conjunto de miembros que forman un equipo de trabajo
type tStaff = record
elems: vector [MAX_PEOPLE] of tPerson;
count: integer;
end record;
// Identificación y pertenencia de un proyecto
type tProject = record
code: string;
ongCode: string;
end record;
// Información relativa a una campaña concreta
type tCampaign = record
project: tProject;
detail: tProjectDetail;
staff: tStaff;
end record;
// Almacén dinámico con el registro de campañas
type tCampaignData = record
elems: pointer to tCampaign;
count: integer;
end record;
// Registro general representativo de la ONG
type tONG = record
code: string;
name: string;
projects: tProjectData;
staff: tStaff;
campaigns: tCampaignData;
staffAvailability: tAvailabilityData;
end record;
Se desea implementar la siguiente acción:
action delete_person_project(inout ong: tONG, in doc: string, in projCode: string)
Dicho subprograma debe dar de baja al voluntario o trabajador cuyo documento coincida con doc en todas aquellas campañas asociadas al código de proyecto projCode dentro de la ong indicada. Asimismo, cada vez que se suprima una persona del equipo de una campaña, el vector de personal correspondiente debe mantenerse debidamente compactado (sin huecos libres intermedios).
b.
[40%] Diseña e implementa la solución completa en lenguaje algorítmico aplicando la metodología de diseño descendente (descomposición modular en niveles). Deberás codificar todas las acciones o funciones auxiliares requeridas. Para cada módulo desarrollado, redacta una breve explicación de una o dos líneas sobre su cometido.
Pregunta 2 - Apartados a y b · Comprensión y traza de algoritmos recursivos
Pregunta 2 (50% de la nota). Análisis y desarrollo recursivo e iterativo de la función mystery
Considera el siguiente código implementado en C correspondiente a la función mystery:
int mystery(int x, int y) {
int res;
assert(x >= 0 && y >= 0);
if (y != 0) // (1)
res = x + mystery(x, y - 1); // (2)
else // (3)
res = 0; // (4)
return res; // (5)
}
a)
[10%] Detalla qué operación matemática lleva a cabo la función y describe el significado global de su cómputo. Desarrolla la traza paso a paso (con un esquema o diagrama de cajas donde se muestren las llamadas sucesivas, parámetros y retornos) para la invocación: mystery(5, 4);
Valor final retornado:
b)
[5%] Razona qué efecto tendría sustituir la instrucción de la línea 4 por la asignación: res = x;
Pregunta 2.c · Transformación entre versión recursiva e iterativa en C
Pregunta 2. Análisis y desarrollo recursivo e iterativo de la función mystery
Pregunta 2 (50% de la nota). Análisis y desarrollo recursivo e iterativo de la función mystery
Considera el siguiente código implementado en C correspondiente a la función mystery:
int mystery(int x, int y) {
int res;
assert(x >= 0 && y >= 0);
if (y != 0) // (1)
res = x + mystery(x, y - 1); // (2)
else // (3)
res = 0; // (4)
return res; // (5)
}
c)
[20%] Escribe una implementación iterativa equivalente en lenguaje C, explicando brevemente el diseño y funcionamiento de tu propuesta.
Pregunta 2.d · Análisis de complejidad y eficiencia
Pregunta 2. Análisis y desarrollo recursivo e iterativo de la función mystery
Pregunta 2 (50% de la nota). Análisis y desarrollo recursivo e iterativo de la función mystery
Considera el siguiente código implementado en C correspondiente a la función mystery:
int mystery(int x, int y) {
int res;
assert(x >= 0 && y >= 0);
if (y != 0) // (1)
res = x + mystery(x, y - 1); // (2)
else // (3)
res = 0; // (4)
return res; // (5)
}
d)
[15%] Formula la ecuación de recurrencia que modela el coste temporal de la versión recursiva original y resuélvela por el método de sustitución iterativa para deducir su orden de complejidad asintótica en función del tamaño de entrada.
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 2023
Examen de síntesis. Prácticas de programación (Enero 2023) (2023) · Examen Prueba de síntesis enero 2023 (2023)