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 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.

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 ›