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.

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

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 ›

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