Está en la página 1de 12

Prácticas de Programación

PEC1 - 20212
Fecha límite de entrega: 6 / 3 / 2022

Formato y fecha de entrega

La PEC debe entregarse antes del día 6 de marzo de 2022 a las 23:59.
Es necesario entregar un fichero en formato ZIP, que contenga:
● Un documento en formato pdf con las respuestas de los ejercicios 1 y 3. El
documento debe indicar en su primera página el nombre y apellidos del
estudiante que hace la entrega.
● Los ficheros vaccine.h y vaccine.c solicitados en el ejercicio 2.
Es necesario hacer la entrega en el apartado de entregas de EC del aula de teoría
antes de la fecha de entrega.

Objetivos

● Repasar los conceptos básicos de programación.


● Saber interpretar y seguir el código de terceras personas.
● Saber realizar pequeños programas para solucionar problemas a partir de una
descripción general del problema.
● Saber especificar un algoritmo mediante las pre y post condiciones.
● Saber incluir controles en los programas para garantizar que las pre condiciones se
cumplan.

PEC 1 – Prácticas de programación 20212 pag 1


Criterios de corrección:

Cada ejercicio tiene asociada su puntuación sobre el total de la actividad. Se


valorará tanto que las respuestas sean correctas como que también sean
completas.
● No seguir el formato de entrega, tanto por lo que se refiere al tipo y nombre
de los ficheros como al contenido solicitado, comportará una penalización
importante o la cualificación con una D de la actividad.
● En los ejercicios en que se pide lenguaje algorítmico, se debe respetar el
formato.
● En el caso de ejercicios en lenguaje C, estos deben compilar para ser
evaluados. Si compilan, se valorará:
○ Que funcionen tal como se describe en el enunciado.
○ Que es respeten los criterios de estilo y que el código esté
debidamente comentado.
○ Que les estructuras utilizadas sean las correctas.

Aviso

Aprovechamos para recordar que está totalmente prohibido copiar en las PECs
de la asignatura. Se entiende que puede haber un trabajo o comunicación entre los
estudiantes durante la realización de la actividad, pero la entrega de esta debe que
ser individual y diferenciada del resto. Las entregas serán analizadas con
herramientas de detección de plagio.
Así pues, las entregas que contengan alguna parte idéntica respecto a entregas de
otros estudiantes serán consideradas copias y todos los implicados (sin que sea
relevante el vínculo existente entre ellos) suspenderán la actividad entregada.

Guía citación: https://biblioteca.uoc.edu/es/contenidos/Como-citar/index.html


Monográfico sobre plagio:
http://biblioteca.uoc.edu/es/biblioguias/biblioguia/Plagio-academico/

PEC 1 – Prácticas de programación 20212 pag 2


Observaciones

Esta PEC presenta el proyecto que se desarrollará durante las distintas actividades
del semestre, que se ha simplificado y adaptado a las necesidades académicas.

En este documento se utilizan los siguientes símbolos para hacer referencia a los
bloques de diseño y programación:

Indica que el código mostrado es en lenguaje algorítmico.

Indica que el código mostrado es en lenguaje C.

Muestra la ejecución de un programa en lenguaje C.

PEC 1 – Prácticas de programación 20212 pag 3


Enunciado

En el contexto de la pandemia del COVID-19, se nos ha pedido colaborar en la


aplicación que debe permitir gestionar toda la información sanitaria relacionada con
la pandemia. En concreto, a nosotros se nos ha pedido que nos encargamos de la
gestión del proceso de vacunación.

Nuestra aplicación se conectará con el sistema final, y por lo tanto los datos de
entrada y salida deberán seguir el formato pactado. Para facilitar esta conexión, se
ha acordado que todas las aplicaciones recibirán un fichero en formato CSV
(Comma Separated Values) para los datos de entrada y generarán la salida en el
mismo formato. En este tipo de archivos, cada línea corresponde a un registro, y los
diferentes campos de cada registro se separan con un carácter de separación
conocido. En concreto, en nuestro caso utilizaremos como carácter de separación el
punto-y-coma (;), y los formatos serán:

Datos de entrada

La entrada a nuestra aplicación serán los datos de las personas dadas de alta al
sistema de salud, que nos vendrán en el siguiente formato:

“document;name;surname;email;address;CP;birthday”

● document: Hace referencia al documento de identidad con el que se ha dado


de alta la persona al sistema. Este documento identifica la persona de forma
única. Podéis suponer que nunca tendrá una longitud mayor a 14 caracteres.
● name: Hace referencia al nombre.
● surname: Hace referencia a los apellidos.
● email: Hace referencia al correo electrónico.
● address: Hace referencia a la dirección postal.
● CP: Hace referencia al código postal.
● birthday: Hace referencia a la fecha de nacimiento en el formato dd/mm/yyyy
(dd: día con dos dígitos, mm: mes con dos dígitos, yyyy: año con cuatro
dígitos)

Un ejemplo de registro sería:

“12345678N;John;Smith;john.smith@example.com;My street, 25;08001;30/12/1980”

PEC 1 – Prácticas de programación 20212 pag 4


Diariamente, recibiremos también la información sobre nuevas dosis de vacunas
disponibles, en el formato:

“date;time;CP;vaccine;required;days;doses”

● date: Hace referencia a la fecha en que llegaran las dosis de vacuna en el


formato dd/mm/yyyy (dd: día con dos dígitos, mm: mes con dos dígitos, yyyy:
año con cuatro dígitos)
● time: Hace referencia a la hora en que llegaran las dosis de vacuna en el
formato hh:mm (hh: hora con dos dígitos (00-23), mm: minutos con dos
dígitos (00-59)).
● CP: Hace referencia al código postal en que se recibirán las dosis.
● vaccine: Hace referencia al nombre de la vacuna.
● required:Número de dosis necesarias para que una persona tenga la pauta
completa.
● days: Hace referencia al número de días que deben pasar entre cada dosis
de la vacuna.
● doses: Hace referencia al número de dosis de la vacuna que llegarán.

Un ejemplo de registro sería:

“15/10/2021;13:45;08000;PFIZER;2;21;300”

Datos de salida

La salida de la aplicación serán los mensajes que será necesario enviar. El envío de
estos mensajes la hará otra aplicación, y por lo tanto habrá que generar un archivo
CSV con la información necesaria. Como esta aplicación de envío será utilizada con
diferentes propósitos, los mensajes tienen un formato genérico y los datos se pasan
en 3 campos predefinidos. Cada línea será un mensaje en el siguiente formato:

“email;when;where;detail”

● email: Hace referencia al correo electrónico del destinatario del mensaje.


● when: Fecha y hora de la cita de vacunación. El formato será “dd/MM/yyyy
hh:mm” (dd: día con dos dígitos, MM: mes con dos dígitos, yyyy: año con
cuatro dígitos, hh: hora con dos dígitos (00-23), mm: minutos con dos dígitos
(00-59)).
● where: Código postal del centro de vacunación.

PEC 1 – Prácticas de programación 20212 pag 5


● detail: Vacuna que se administrará.

Un ejemplo de registro sería:

“john.smith@example.com;15/10/2021 13:45;08000;PFIZER”

Dado que los datos de personas y los mensajes de salida se utilizan en varias
aplicaciones, como parte del proyecto se ha facilitado la definición de los tipos
básicos (habrá que hacer la traducción a lenguaje C de aquellos que se necesiten
para resolver los ejercicios):

const
MAX_PERSONS: integer := 100;
end const
type
tDate = record
day : integer;
month : integer;
year : integer;
end record

tTime = record
hour : integer;
minutes : integer;
end record

tDateTime = record
date : tDate;
time: tTime;
end record

tPerson = record
document : string;
name : string;
surname : string;
email : string;
address : string;
cp : string;
birthday : tDate;
end record

tPopulation = record
elems : vector [MAX_PERSONS] of tPerson;
count : integer;
end record

PEC 1 – Prácticas de programación 20212 pag 6


tMessage = record
email : string;
when : tDateTime;
where : string;
detail : string;
end record
end type

PEC 1 – Prácticas de programación 20212 pag 7


Ejercicio 1: Definición de tipos de datos [25%]

A partir de la descripción de los datos de entrada del enunciado, define en lenguaje


algorítmico:

● Un tipo tVaccineLot que pueda guardar la información de un lote de vacunas


(tipo, dosis requeridas, número de dosis, etc.) que llegaran en un
determinado momento de tiempo (fecha y hora) a un centro médico concreto
(identificado por su código postal)
● Un tipo tVaccineLotData que pueda guardar todos los datos de lotes de
vacunas que vamos recibiendo. Podéis asumir que guardaremos un máximo
de 100 lotes.

Nota: Podéis definir los tipos adicionales que consideréis oportunos. También
podéis utilizar los tipos dados en el enunciado.

PEC 1 – Prácticas de programación 20212 pag 8


Ejercicio 2: Manipulación de tablas [50%]

A partir de las estructuras de datos definidas en el ejercicio 1 y las estructuras y


métodos detallados al final de este enunciado, define los siguientes métodos
(acciones o funciones) en lenguaje C (utiliza los ficheros vaccine.h y vaccine.c
para declarar e implementar los métodos):
a) vaccineData_init: Dada una estructura de tipo tVaccineLoteData la inicializa
correctamente obteniendo una estructura vacía.
b) vaccineData_len: Dada una estructura de tipo tVaccineLoteData devuelve
el número de lotes en esta estructura.
c) vaccine_parse: Dada una estructura de tipo tVaccineLote, y una entrada de
fichero CSV (tCSVEntry) con los datos de un lote de vacunas, inicializa la
estructura con estos datos.
d) vaccineData_add: Dada una estructura de tipo tVaccineLoteData, y un lote
de vacunas (tVaccineLot), añade este lote a la lista de lotes de vacunas
(tVaccineLoteData). Si ya existe un lote para el mismo código postal, fecha,
hora y tipo de vacuna (nombre), se sumará el número de dosis al lote ya
existente.
e) vaccineData_get: Dada una estructura de tipo tVaccineLoteData, una
posición, y una cadena de caracteres de salida, escribe en la cadena de
caracteres la información del lote de vacunas en la posición dada. Usa el
mismo formato que los datos de entrada. Un ejemplo sería (revisa el método
de C sprintf):

15/10/2021;05:45;08000;PFIZER;2;21;300

f) vaccineData_del: Dada una estructura de tipo tVaccineLoteData, un código


postal, una estructura de tipo tDateTime, el nombre de la vacuna, y un
número de dosis, reduce el número de dosis en el lote correspondiente. Si el
número de dosis queda en cero o negativo, se eliminará la información del
lote. En el caso de que no existiera ningún lote para el código postal,
momento de tiempo y tipo de vacuna (nombre), no se hace nada.

Debéis utilizar la rutina principal que se os facilita en el fichero main.c sin ninguna
modificación. Esta rutina ejecuta las siguientes tareas (y muestra los datos después
de cada paso):

1. Añade 3 lotes de vacunas.


2. Añade otros 3 lotes de vacunas.
3. Elimina parcialmente un lote de vacunas.

PEC 1 – Prácticas de programación 20212 pag 9


4. Elimina las dosis restantes del lote anterior.
5. Elimina un lote de vacunas que no existe.
Para considerar que el programa funciona correctamente, el resultado final por
pantalla deberá ser el siguiente:

0;01/01/2022;13:45;08000;PFIZER;2;21;300
1;01/02/2022;11:00;08018;MODERNA;1;0;150
2;01/03/2022;17:15;25001;PFIZER;2;21;100

0;01/01/2022;13:45;08000;PFIZER;2;21;350
1;01/02/2022;11:00;08018;MODERNA;1;0;350
2;01/03/2022;17:15;25001;PFIZER;2;21;350

0;01/01/2022;13:45;08000;PFIZER;2;21;350
1;01/02/2022;11:00;08018;MODERNA;1;0;300
2;01/03/2022;17:15;25001;PFIZER;2;21;350

0;01/01/2022;13:45;08000;PFIZER;2;21;350
1;01/03/2022;17:15;25001;PFIZER;2;21;350

0;01/01/2022;13:45;08000;PFIZER;2;21;350
1;01/03/2022;17:15;25001;PFIZER;2;21;350

Nota: Para la realización de este ejercicio, en los ficheros csv.h, csv.c, vaccine.h y
vaccine.c encontraréis la declaración e implementación de los siguientes métodos:

tCSVEntry Tipo de datos que guarda una línea de un fichero CSV.

csv_numFields Dada una estructura tCSVEntry, retorna el número de


campos que contiene.

csv_getAsInteger Dada una estructura tCSVEntry y la posición de un campo


(0 indica la primera), retorna su valor como entero.

csv_getAsString Dada una estructura tCSVEntry y la posición de un campo


(0 indica la primera), retorna su valor como string.

csv_getAsReal Dada una estructura tCSVEntry y la posición de un campo


(0 indica la primera), retorna su valor como real.

tDateTime Estructura que permite guardar la información de fecha y


hora

dateTime_parse Dada una estructura tDateTime, un string con una fecha y

PEC 1 – Prácticas de programación 20212 pag 10


un string con una hora (en los formatos de los datos de
entrada), la inicializa con fecha y la hora.

dateTime_equals Compara dos estructuras de tipo tDateTime e indica si


contienen el mismo valor o no.

PEC 1 – Prácticas de programación 20212 pag 11


Ejercicio 3: Especificación formal [25%]

Define la declaración (no la implementación) de los métodos vaccine_parse y


vaccineData_add del ejercicio anterior en lenguaje algorítmico.

a) Añade las pre y post condiciones en lenguaje algorítmico.


b) Añade en el código en lenguaje C del ejercicio anterior, los “asserts”
necesarios para asegurar que se cumplen las pre-condiciones especificadas
en estos métodos.

PEC 1 – Prácticas de programación 20212 pag 12

También podría gustarte