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.

Enunciado: Pregunta 1.b - Diseño descendente en lenguaje alg… · Prácticas de programación UOC 2023

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 ›

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