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 O(log⁡n)O(\log n), 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.

Ver los 5 temas

Otras convocatorias de 2021

Prueba de síntesis enero 2021 (2021) · Prueba de síntesis. Enero de 2021 (2021)