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 de 2021 (2021)
Enunciado
Pregunta 1. Gestión de espacios de coworking mediante diseño descendente
Tomando como base el sistema de administración de un centro de trabajo compartido ( coworking), se definen los siguientes tipos de datos y constantes:
// Valores límite y tarifas base
constante
MAX_SPACES: entero = 50;
MAX_ANNEXES: entero = 3;
PRICE_TABLEFLEX: real = 50.00;
PRICE_TABLEFIX: real = 80.00;
PRICE_OFFICEFIX: real = 140.00;
fin constante
tipo
tRate = {tableFlex, tableFix, officeFix};
tWorkSpace = registro
id: entero;
area: real;
rate: tRate;
fin registro
tContractAnnex = registro
idWorkSpace: entero;
price: real;
fin registro
tContract = registro
idPartner: entero;
month: entero;
year: entero;
annexesSet: vector [1..MAX_ANNEXES] de tContractAnnex;
numAnnex: entero;
fin registro
tCoworking = registro
workSpaceSet: vector [1..MAX_SPACES] de tWorkSpace;
numWorkSpaces: entero;
contractsSet: puntero a tContract;
numContracts: entero;
fin registro
fin tipo
Se dispone del encabezado del siguiente subprograma:
function useless_workspaces (c: tCoworking): integer
El propósito de esta función consiste en computar la cantidad total de puestos de trabajo ( workspaces) que jamás han sido objeto de contratación.
b.
[30%] Diseña e implementa la función useless_workspaces en pseudocódigo algorítmico empleando la técnica de diseño descendente. Se deben codificar todos los módulos auxiliares requeridos en los niveles inferiores, incorporando una breve descripción de 1 a 2 líneas para cada uno de ellos (los métodos que no cuenten con explicación no obtendrán puntuación).

Solución
Según los criterios oficiales de corrección
b. [30%] Diseña e implementa la función useless_workspaces en pseudocódigo algorítmico empleando la técnica de diseño descendente.
Solución: ```pseudocode // Nivel 1: Módulo principal // Descripción: Itera a lo largo de los puestos registrados en la empresa y contabiliza cuántos de ellos no constan vinculados a ningún contrato. { Pre: c != NIL y c.numWorkSpaces > 0 } function useless_workspaces (c: tCoworking) : integer var totalLibres: integer; idxEspacio: integer; end var totalLibres := 0; for idxEspacio := 1 to c.numWorkSpaces do if not have_contracts(c, c.workSpaceSet[idxEspacio].id) then totalLibres := totalLibres + 1; end if; end for; return totalLibres; end function // Nivel 2: Comprobación de contrataciones para un puesto // Descripción: Explora la colección de contratos de la entidad para averiguar si un identificador concreto de espacio aparece suscrito en alguno de ellos. function have_contracts (c: tCoworking; wid: integer) : boolean var idxContrato: integer; encontrado: boolean; end var encontrado := FALSE; idxContrato := 1; while (idxContrato <= c.numContracts) and not encontrado do encontrado := find_annex(c.contractsSet[idxContrato], wid); idxContrato := idxContrato + 1; end while; return encontrado; end function // Nivel 3: Búsqueda en los anexos de un contrato // Descripción: Examina secuencialmente los anexos asociados a un contrato específico para verificar si figura la asignación del espacio de trabajo indicado. function find_annex (contrato: tContract; idBuscado: integer) : boolean var idxAnexo: integer; presente: boolean; end var presente := FALSE; idxAnexo := 1; while (idxAnexo <= contrato.numAnnex) and not presente do presente := (contrato.annexesSet[idxAnexo].idWorkSpace = idBuscado); idxAnexo := idxAnexo + 1; end while; return presente; 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 · Juny 2020 ›