Pregunta 1.b · Prácticas de programación UOC 2021
Tema: Diseño descendente sobre vectores de registros en lenguaje algorítmico · Del examen Examen de síntesis de Prácticas de programación (Convocatoria de enero 2021) (2021)
Enunciado
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.

Solución
Según los criterios oficiales de corrección
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.
Solución: ```pseudocode // Nivel 1: Coordinador principal // Descripción: Coordina la obtención del cliente más antiguo delegando la localización del // identificador más veterano y su posterior conversión a nombre textual. function first_partner(c: tCoworking): string var socioId: integer; end var socioId := obtener_id_contrato_mas_antiguo(c); return recuperar_nombre_socio(c, socioId); end function // Nivel 2: Módulos subordinados especializados // 1. Identificación del contrato con mayor antigüedad: // Descripción: Recorre las contrataciones archivadas comparando año, mes y código de socio para discernir la vinculación contractual más remota de la entidad. function obtener_id_contrato_mas_antiguo(c: tCoworking): integer var posActual, posMasAntiguo: integer; end var posMasAntiguo := 1; for posActual := 2 to c.numContracts do if (c.contractsSet[posActual].year < c.contractsSet[posMasAntiguo].year) or ((c.contractsSet[posActual].year = c.contractsSet[posMasAntiguo].year) and (c.contractsSet[posActual].month < c.contractsSet[posMasAntiguo].month)) or ((c.contractsSet[posActual].year = c.contractsSet[posMasAntiguo].year) and (c.contractsSet[posActual].month = c.contractsSet[posMasAntiguo].month) and (c.contractsSet[posActual].idPartner < c.contractsSet[posMasAntiguo].idPartner)) then posMasAntiguo := posActual; end if; end for; return c.contractsSet[posMasAntiguo].idPartner; end function // 2. Consulta nominal de un asociado: // Descripción: Búsqueda secuencial estándar que localiza la ficha del miembro mediante su clave numérica e inspecta el registro correspondiente para extraer su denominación. function recuperar_nombre_socio(c: tCoworking, claveSocio: integer): string var idx: integer; encontrado: boolean; end var idx := 1; encontrado := false; while (idx <= c.numPartners) and (not encontrado) do if c.partnersSet[idx].id = claveSocio then encontrado := true; else idx := idx + 1; end if; end while; return c.partnersSet[idx].name; 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 · 2023 · Pregunta 1.b · 2021 ›