Pregunta 1.b · Prácticas de programación UOC 2023
Tema: Diseño descendente sobre vectores de registros en lenguaje algorítmico · Del examen Examen de síntesis. Prácticas de programación (Enero 2023) (2023)
Enunciado
En el marco del software desarrollado para la administración de entidades sin ánimo de lucro (ONG), considérense exclusivamente las siguientes estructuras de datos:
type
tPerson = record
document: string;
name: string;
surname: string;
email: string;
address: string;
city: string;
birthday: tDate;
end record
tStaff = record
elems: pointer to tPerson;
count: integer;
end record
tAvailability = record
person: tPerson;
start: tDate;
end: tDate;
end record
tAvailabilityData = record
elems: pointer to tAvailability;
count: integer;
end record
tONG = record
code: string;
name: string;
projects: tProjectData;
staff: tStaff;
campaigns: tCampaignData;
staffAvailability: tAvailabilityData;
end record
end type
Se plantea la especificación de la siguiente operación:
function available_people_city (ong: tONG, city: string): integer
Su cometido es contabilizar cuántos integrantes adscritos a ong residen en la localidad indicada por city y cuentan, además, con algún registro de disponibilidad.
b. [40%] Desarrolla la solución en lenguaje algorítmico empleando una estrategia de diseño modular descendente. Descompón el problema en los subalgoritmos que consideres precisos y documenta cada módulo con un conciso comentario sobre su propósito funcional (1 o 2 líneas por procedimiento o función).

Solución
Según los criterios oficiales de corrección
b. [40%] Desarrolla la solución en lenguaje algorítmico empleando una estrategia de diseño modular descendente. Descompón el problema en los subalgoritmos que consideres precisos y documenta cada módulo con un conciso comentario sobre su propósito funcional (1 o 2 líneas por procedimiento o función).
Solución: ```pseudocode /* Rutina principal: computa los miembros del equipo que habitan en la urbe dada y disponen de franjas horarias */ function available_people_city (ong: tONG, city: string): integer var idx: integer; totalCount: integer; member: tPerson; end var totalCount := 0; for idx := 1 to ong.staff.count do member := ong.staff.elems[idx]; if lives_in(member, city) then if has_any_availability(ong.staffAvailability, member) then totalCount := totalCount + 1; end if; end if; end for; return totalCount; end function /* Comprueba si la persona indicada tiene fijada su residencia en la localidad objetivo */ function lives_in (p: tPerson, city: string): boolean return (p.city = city); end function /* Determina si un integrante concreto posee al menos un registro de disponibilidad asignado */ function has_any_availability (ad: tAvailabilityData, p: tPerson): boolean var k: integer; existsRecord: boolean; end var k := 1; existsRecord := false; while (k <= ad.count) and not existsRecord do if ad.elems[k].person.document = p.document then existsRecord := true; else k := k + 1; end if; end while; return existsRecord; 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 - Diseño descendente en lenguaje alg… · 2023 ›