Examen de Prácticas de programación UOC 2023 · Prueba de síntesis enero 2023
Examen de Prácticas de programación de la UOC (Grado en Ingeniería Informática) 2023, Prueba de síntesis enero 2023: 6 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 p… · Especificación: precondiciones y postcondiciones
En el marco de un software para administrar organizaciones no gubernamentales (ONGs), se dispone de las siguientes definiciones de tipos y constantes:
const
MAX_PEOPLE: integer = 100;
end const
type
tMail = record
name: string;
surname: string;
email: string;
end record
tMailList = record
elems: vector [MAX_PEOPLE] of tMail;
count: integer;
end record
tDate = record
day: integer;
month: integer;
year: integer;
end record
tPerson = record
document: string;
name: string;
surname: string;
email: string;
address: string;
city: string;
birthday: tDate;
end record
tStaff = record
elems: vector [MAX_PEOPLE] of tPerson;
count: integer;
end record
tONG = record
code: string;
name: string;
projects: tProjectData;
staff: tStaff;
campaigns: tCampaignData;
staffAvailability: tAvailabilityData;
end record
end type
Se plantea la siguiente función de cabecera:
function staff_birthdays (ong: tONG, date: tDate): tMailList
Devuelve la lista con los correos, nombres y apellidos de aquellos trabajadores o voluntarios de la organización que celebran su aniversario en la fecha especificada (en la variable date solo contienen datos significativos los campos day y month).
a)
[10%] Detalla las precondiciones formales que debe satisfacer esta función, asumiendo que al menos un miembro del equipo cumple años en dicha fecha y sin necesidad de verificar la validez intrínseca del día y mes. Acompaña con una explicación de 1 o 2 líneas.
Pregunta 1.b - Diseño descendente en lenguaje alg… · Diseño descendente sobre vectores de registros en lenguaje algorítmico
En el marco de un software para administrar organizaciones no gubernamentales (ONGs), se dispone de las siguientes definiciones de tipos y constantes:
const
MAX_PEOPLE: integer = 100;
end const
type
tMail = record
name: string;
surname: string;
email: string;
end record
tMailList = record
elems: vector [MAX_PEOPLE] of tMail;
count: integer;
end record
tDate = record
day: integer;
month: integer;
year: integer;
end record
tPerson = record
document: string;
name: string;
surname: string;
email: string;
address: string;
city: string;
birthday: tDate;
end record
tStaff = record
elems: vector [MAX_PEOPLE] of tPerson;
count: integer;
end record
tONG = record
code: string;
name: string;
projects: tProjectData;
staff: tStaff;
campaigns: tCampaignData;
staffAvailability: tAvailabilityData;
end record
end type
Se plantea la siguiente función de cabecera:
function staff_birthdays (ong: tONG, date: tDate): tMailList
Devuelve la lista con los correos, nombres y apellidos de aquellos trabajadores o voluntarios de la organización que celebran su aniversario en la fecha especificada (en la variable date solo contienen datos significativos los campos day y month).
b)
[40%] Desarrolla la solución en lenguaje algorítmico empleando la técnica de diseño descendente. Escribe tanto la función principal como las acciones/funciones secundarias en los niveles necesarios, agregando una breve explicación de una o dos líneas para cada subprograma.
Pregunta 2.a - Comprensión y traza de algoritmos… · Comprensión y traza de algoritmos recursivos
A partir del siguiente algoritmo codificado en C:
#define MAX 128
int mystery(int v[MAX], int x)
{
int res;
assert(x >= 0 && x < MAX);
if (x == 0) {
if ((v[0] % 2) != 0)
res = v[0];
else
res = 0;
} else {
if ((v[x] % 2) != 0)
res = v[x] + mystery(v, x - 1);
else
res = mystery(v, x - 1);
}
return res;
}
a)
[10%] Indica el propósito del método mystery. Detalla además la traza secuencial de llamadas y retornos con un diagrama de cajas al ejecutar:
int v[] = {23, 4, 7, 13};
mystery(v, 3);
Pregunta 2.b - Punteros y gestión de memoria diná… · Comprensión y traza de algoritmos recursivos
A partir del siguiente algoritmo codificado en C:
#define MAX 128
int mystery(int v[MAX], int x)
{
int res;
assert(x >= 0 && x < MAX);
if (x == 0) {
if ((v[0] % 2) != 0)
res = v[0];
else
res = 0;
} else {
if ((v[x] % 2) != 0)
res = v[x] + mystery(v, x - 1);
else
res = mystery(v, x - 1);
}
return res;
}
b)
[5%] Determina el problema que ocurriría si se sustituyera en la aserción x < MAX por x <= MAX.
Pregunta 2.c - Transformación entre versión recur… · Transformación entre versión recursiva e iterativa en C
A partir del siguiente algoritmo codificado en C:
#define MAX 128
int mystery(int v[MAX], int x)
{
int res;
assert(x >= 0 && x < MAX);
if (x == 0) {
if ((v[0] % 2) != 0)
res = v[0];
else
res = 0;
} else {
if ((v[x] % 2) != 0)
res = v[x] + mystery(v, x - 1);
else
res = mystery(v, x - 1);
}
return res;
}
c)
[20%] Reescribe el algoritmo en forma iterativa (en lenguaje C), añadiendo una explicación breve del enfoque adoptado.
Pregunta 2.d - Análisis de complejidad y eficienc… · Análisis de complejidad y eficiencia
A partir del siguiente algoritmo codificado en C:
#define MAX 128
int mystery(int v[MAX], int x)
{
int res;
assert(x >= 0 && x < MAX);
if (x == 0) {
if ((v[0] % 2) != 0)
res = v[0];
else
res = 0;
} else {
if ((v[x] % 2) != 0)
res = v[x] + mystery(v, x - 1);
else
res = mystery(v, x - 1);
}
return res;
}
d)
[15%] Obtén la complejidad computacional en notación asintótica de la versión recursiva en el peor de los casos, resolviendo la relación de recurrencia paso a paso.
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) · Prueba de síntesis de Prácticas de programación (Enero de 2023) (2023)