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.

Ver los 5 temas

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)