Pregunta 1.b · Prácticas de programación UOC 2021

Tema: Diseño descendente sobre vectores de registros en lenguaje algorítmico · Del examen Prueba de síntesis enero 2021 (2021)

Enunciado

Partiendo del modelo de datos de la gestión de espacios de trabajo compartido (coworking), se definen las siguientes constantes y tipos:

const

MAX_ANNEXES: integer:= 3;

end const

type

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

partnersSet: pointer to tPartner;

numPartners: integer;

contractsSet: pointer to tContract;

numContracts: integer;

end record

end type

Se plantea la especificación de la siguiente función:

function top_clients (c: tCoworking; x: integer): integer

Dicha función computa y retorna la cantidad de socios ( partners) que cuentan con más de xx contratos que posean el número máximo permitido de anexos.

b. Implementa la función top_clients en pseudocódigo o lenguaje algorítmico empleando descomposición modular mediante diseño descendente. Implementa asimismo cada una de las funciones auxiliares de los diferentes niveles, acompañándolas de una breve explicación de una o dos líneas indicando su cometido.

Enunciado: Pregunta 1.b · Prácticas de programación UOC 2021

Solución

Según los criterios oficiales de corrección

Nivel 3: Verificación de contrato completo

Solución: ```pseudocode function isFullAnnexContract(contr: tContract): boolean begin return contr.numAnnex = MAX_ANNEXES; end function ```

Nivel 2: Conteo de contratos completos por socio

Solución: ```pseudocode function countFullAnnexContractsByPartner(c: tCoworking; partnerId: integer): integer var i, total: integer; currentContract: tContract; begin total := 0; for i := 1 to c.numContracts do currentContract := c.contractsSet^[i]; if currentContract.idPartner = partnerId then if isFullAnnexContract(currentContract) then total := total + 1; end if; end if; end for; return total; end function ```

Nivel 1: Función principal top_clients

Solución: ```pseudocode function top_clients(c: tCoworking; x: integer): integer var i, countTop: integer; currentPartner: tPartner; fullContracts: integer; begin countTop := 0; for i := 1 to c.numPartners do currentPartner := c.partnersSet^[i]; fullContracts := countFullAnnexContractsByPartner(c, currentPartner.id); if fullContracts > x then countTop := countTop + 1; end if; end for; return countTop; end function ```

La explicación paso a paso, hecha con IA, es Premium. Premium

Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.

‹ Pregunta 1.b · 2021 · Pregunta 1.b · 2021 ›

Más ejercicios de Diseño descendente sobre vectores de registros en lenguaje algorítmico