Pregunta 1.b - Diseño descendente en lenguaje alg… · Prácticas de programación UOC 2023
Tema: Diseño descendente sobre vectores de registros en lenguaje algorítmico · Del examen Examen Prueba de síntesis enero 2023 (2023)
Enunciado
En el marco de un software para administrar organizaciones no gubernamentales (ONGs), se dispone de las siguientes definiciones de tipos y constantes:
const
MAX_PEOPLE: integer = 100;
end const
type
tMail = record
name: string;
surname: string;
email: string;
end record
tMailList = record
elems: vector [MAX_PEOPLE] of tMail;
count: integer;
end record
tDate = record
day: integer;
month: integer;
year: integer;
end record
tPerson = record
document: string;
name: string;
surname: string;
email: string;
address: string;
city: string;
birthday: tDate;
end record
tStaff = record
elems: vector [MAX_PEOPLE] of tPerson;
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 siguiente función de cabecera:
function staff_birthdays (ong: tONG, date: tDate): tMailList
Devuelve la lista con los correos, nombres y apellidos de aquellos trabajadores o voluntarios de la organización que celebran su aniversario en la fecha especificada (en la variable date solo contienen datos significativos los campos day y month).
b)
[40%] Desarrolla la solución en lenguaje algorítmico empleando la técnica de diseño descendente. Escribe tanto la función principal como las acciones/funciones secundarias en los niveles necesarios, agregando una breve explicación de una o dos líneas para cada subprograma.

Solución
Según los criterios oficiales de corrección
b) Desarrolla la solución en lenguaje algorítmico empleando la técnica de diseño descendente (Nivel 1)
Solución: ```pseudocode { Retorna la lista con los datos de contacto de quienes cumplen años en la fecha dada } function staff_birthdays (ong: tONG, date: tDate): tMailList var ml: tMailList; i: integer; end var init_mail_list(ml); { Recorrer la totalidad de integrantes de la plantilla } for i := 1 to ong.staff.count do if is_their_birthday(ong.staff.elems[i], date) then add_person(ml, ong.staff.elems[i]); end if; end for; return ml; end function ```
Acciones/funciones secundarias en los niveles necesarios (Nivel 2)
Solución: ```pseudocode { Inicializa el registro contenedor de correos poniendo el contador a cero } action init_mail_list(out ml: tMailList) ml.count := 0; end action { Evalúa si coinciden el día y el mes de nacimiento de la persona con la fecha objetivo } function is_their_birthday(p: tPerson, d: tDate): boolean return (p.birthday.month = d.month) and (p.birthday.day = d.day); end function { Registra los datos de la persona agregándola al final de la lista de correos } action add_person(inout ml: tMailList, in p: tPerson) ml.count := ml.count + 1; ml.elems[ml.count].name := p.name; ml.elems[ml.count].surname := p.surname; ml.elems[ml.count].email := p.email; end action ```
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 · 2023 ›