Sunteți pe pagina 1din 7

75.

554 FP PR3 20151 GEI/GTT Estudios de Informtica Multimedia y Telecomunicaciones

Prctica3
Formato y fecha de entrega
La Prctica se debe entregar antes del da 22 de Diciembre de 2015 a las
23:59. Para la entrega se deber entregar un fichero en formato ZIP, que
contenga:

Proyecto CodeLite entero, con todos los ficheros que se piden en el


enunciado.
o Para reducir el tamao del fichero, se debe eliminar todo lo que
genera el compilador. Lo podis hacer utilizando la opcin
clean del proyecto o eliminndolos directamente.

La entrega se har en el apartado de entregas de EC del aula de teora.

Presentacin
Esta prctica culmina el proyecto comenzado en la prctica 1. Adems, esta
prctica sirve como recuperacin de las prcticas anteriores, tal como est
indicado en el plan docente de la asignatura.
A diferencia de las anteriores, esta prctica tiene dos versiones, una que
contempla la totalidad de los contenidos de la asignatura, y una que slo
contempla los ms importantes de cara a las futuras asignaturas. En el caso
de la versin simplificada, la calificacin mxima que se podr obtener es
del 80%. En el enunciado se refiere a estas dos versiones como versin
simplificada y versin completa. Si sumis las puntuaciones de la versin
completa veris que suman 110/100, lo que hace ms fcil llegar al 50. La
nota final ser como mucho de 100.

Competencias
Transversales

Capacidad de comunicacin en lengua extranjera.

Especficas

Capacidad de disear y construir aplicaciones informticas mediante


tcnicas de desarrollo, integracin y re-utilizacin.

Conocimientos bsicos sobre el uso y la programacin de los


ordenadores, sistemas operativos, bases de datos y programas
informticos con aplicacin a la ingeniera.

75.554 FP PR3 20151 GEI/GTT Estudios de Informtica Multimedia y Telecomunicaciones

Objetivos

Saber buscar documentacin y ejemplos de mtodos en internet y


aplicarlos a un problema dado.

Analizar un enunciado y extraer los requerimientos, tanto de tipos de


datos como funcionales (algoritmos)

Tipos de datos abstractos

Punteros

Recursos
Para realizar esta actividad tenis a vuestra disposicin los siguientes
recursos:
Bsicos

Materiales en formato web de la asignatura

Laboratorio de C

Complementarios

Internet: La forma ms efectiva de encontrar informacin sobre


cualquier duda sobre C es la bsqueda a travs de un buscador.

Criterios de valoracin
Cada ejercicio lleva asociada la puntuacin sobre el total de la actividad. Se
valorar tanto la validez de las respuestas como su completitud.

En ejercicios en que se pide lenguaje algortmico, se debe respetar


el formato.

En el caso de ejercicios en lenguaje C, estos tienen que compilar


para ser evaluados. En tal caso, se valorar:
o

Que funcionen

Que se respeten los criterios de estilo

Que el cdigo est comentado

Que las estructures utilizadas sean las correctas

75.554 FP PR3 20151 GEI/GTT Estudios de Informtica Multimedia y Telecomunicaciones

Descripcin del proyecto


Junto con el enunciado se os facilita un proyecto Codelite que contiene la
solucin a la prctica 2 con algunas lneas de cdigo adicionales, que ser la
base para esta ltima prctica.
En esta prctica trabajaremos especialmente el TAD cola, los punteros y la
memoria dinmica.
Una de las estructuras ms habituales cuando se debe llevar a cabo un
proceso es la cola. Un ejemplo de cola que utilizamos habitualmente es la
cola de impresin, donde los programas ponen los documentos que quieren
imprimir, y desde donde la impresora los coge para imprimirlos.
En esta prctica utilizaremos una cola para ir procesando peticiones de
resumen de gastos por concepto.

[20%] Ejercicio 1: Definicin tipo de datos


En este ejercicio definiremos un tipo de datos que guarda el resumen de
movimientos por concepto. Para cada concepto nos interesar saber los
ingresos y gastos dentro de este concepto, el total de los ingresos, el total de
los gastos y el total del concepto.
Completa la implementacin del tipo de datos tConceptMovements que
encontrars en el fichero data.h para que permita guardar esta informacin:

Versin simplificada

conceptID: Identificador del concepto.

incomes: Vector con las posiciones que ocupan los ingresos dentro
de la tabla de movimientos. Identificaremos el final del vector con un
valor -1.

expenses: Vector con las posiciones que ocupan los gastos dentro de
la tabla de movimientos. Identificaremos el final del vector con un valor
-1.

totalIncomes: Suma de todos los ingresos de este concepto

totalExpenses: Suma de todos los gastos de este concepto

total: Total por este concepto, teniendo en cuenta ingresos y gastos.

A continuacin, podis ver un ejemplo donde se muestra un registro de tipo


tConceptMovements y versiones simplificadas de las tablas de conceptos y
movimientos. En el caso de los conceptos se muestra slo el conceptID. En el
caso de los movimientos se muestra la posicin en la tabla, tipo de

75.554 FP PR3 20151 GEI/GTT Estudios de Informtica Multimedia y Telecomunicaciones

movimiento (Income/Expense), el conceptID asociado y el importe del


movimiento:

Versin completa

conceptID: Identificador del concepto.

incomes: Vector con punteros a los elementos tMovement de la tabla


de movimientos que contienen los ingresos para este concepto.
Identificaremos el final del vector con un NULL.

expenses: Vector con punteros a los elementos tMovement de la


tabla de movimientos que contienen los gastos para este concepto.
Identificaremos el final del vector con un NULL.

totalIncomes: Suma de todos los ingresos para este concepto

totalExpenses: Suma de todos los gastos para este concepto

total: Total para este concepto, teniendo en cuenta ingresos y gastos.

Nota: Un vector de punteros se declara como cualquier otro tipo de


vector, y cada uno de sus elementos es un puntero. Por ejemplo, aqu se
define un vector de punteros a int.
int* vector[3];
int a=5;
vector[0]=&a;
vector[1]=NULL;

75.554 FP PR3 20151 GEI/GTT Estudios de Informtica Multimedia y Telecomunicaciones

Nota: En ambas versiones, la cantidad mxima de movimientos de cada tipo


dentro de un concepto ser la cantidad mxima de movimientos que podemos
tener, definida por la constante MAX_MOVEMENTS.

[30%] Ejercicio 2: Filtrado de movimientos


Utilizando el tipo tConceptMovements del ejercicio anterior, en este ejercicio
definiremos los mtodos para la manipulacin de este tipo. Los mtodos
siguientes los encontraras en el fichero uocmoney.c.
a) Completa el cdigo de la funcin
tError cm_getConceptMovements(tMovementTable table, unsigned char
id, tConceptMovements *cm )

que dada una tabla de movimientos, y un identificador de concepto,


nos retorne en un parmetro de salida de tipo tConceptMovements
todos los movimientos asociados a este concepto. Esta funcin
retornar:

OK: Si todo ha ido bien y se retorna la informacin solicitada.

ERR_ENTRY_NOT_FOUND: Si no hay movimientos para este


concepto.

b) Completa el cdigo de la funcin


tBoolean cm_equals(tConceptMovements cm1, tConceptMovements
cm2)

que dadas dos variables del tipo tConceptMovements nos diga si las
dos contienen la misma informacin (TRUE) o no (FALSE).
Entenderemos que contienen la misma informacin si todos sus datos
son iguales (concepto, ingresos, gastos u totales).

75.554 FP PR3 20151 GEI/GTT Estudios de Informtica Multimedia y Telecomunicaciones

[30%] Ejercicio 3: Tipos Abstractos de datos


En este ejercicio definiremos una cola para guardar elementos del tipo
definido en el ejercicio anterior y los mtodos bsicos para acceder a esta
cola. Completa en los archivos queue.h y queue.c el cdigo de los apartados
de este ejercicio.
Se pide:
a) Define el tipo de datos tConMovQueue que represente una cola de
elementos del tipo tConceptMovements.
b) Implementa la accin cm_init, que dado un parmetro de
entrada/salida de tipo tConMovQueue, lo inicialice a una cola vaca.
c) Implementa la funcin
tBoolean cmQueue_empty(tConMovQueue *queue)

que dada una cola nos indique si est vaca (TRUE) o si contiene
elementos (FALSE).
d) Implementa la funcin
tError cmQueue_enqueue(tConMovQueue *queue, tConceptMovements
newElement)

que dado un parmetro de entrada/salida de tipo tConMovQueue, y


un parmetro de entrada de tipo tConceptMovements, aada este
movimiento a la cola.
Esta funcin devolver un valor OK en caso de que se haya podido
aadir el nuevo elemento a la cola, o un valor ERR_MEMORY en caso
de que no haya suficiente espacio en la cola para aadir el nuevo
elemento.
e) Implementa la funcin
tError cmQueue_dequeue (tConMovQueue *queue, tConceptMovements
*element)

que dado un parmetro de entrada/salida de tipo tConMovQueue, y


un parmetro de salida de tipo tConceptMovements, nos devuelva en
este parmetro de salida el elemento correspondiente de la cola.
Esta funcin devolver un valor OK en caso de que se haya podido
desencolar el elemento, o un valor ERROR en caso de que la cola
est vaca y no se haya podido desencolar el elemento.
Nota: El tamao mximo de elementos en la cola ser el nmero mximo de
conceptos que puede guardar nuestra aplicacin, identificado por la constante
MAX_CONCEPTS.

75.554 FP PR3 20151 GEI/GTT Estudios de Informtica Multimedia y Telecomunicaciones

Slo versin completa


[30%] Ejercicio 4: Memoria dinmica
Durante las prcticas anteriores hemos estado utilizando estructuras con
memoria esttica para guardar todos nuestros datos. Esto nos ha obligado a
poner un lmite en el nmero de registros que se podan guardar en las tablas.
En este ejercicio nos proponemos eliminar esta restriccin.
Se pide:
a) Modificar la definicin de tMovementTable y tConceptTable del
archivo data.h para que use memoria dinmica.
b) Modificar los mtodos movTable_init y conTable_init para que se
adapten a esta nueva definicin.
c) Modificar los mtodos movTable_add y conTable_add, para que
usen memoria dinmica. En caso de que no haya suficiente espacio
de memoria, estos mtodos devolvern el error ERR_MEMORY.
d) Modificar los mtodos movTable_del y conTable_del para que usen
memoria dinmica.
e) Completa el cdigo de las acciones movTable_release y
conTable_release, que encontrars en los ficheros movements.c y
concepts.c respectivamente, a fin de que reciban una tabla y eliminen
la memoria que est utilizando.
f) Completa el cdigo de la accin appData_release del archivo
uocmoney.c para que acepte un parmetro de entrada/salida del tipo
tAppData, y haga las llamadas a los mtodos anteriores para eliminar
la memoria que se est utilizando.
Nota: En este caso, como los tests estn pensados para poder pasar en
ambas versiones, no se liberar la memoria de las tablas que se utilizan en
ellos. Este hecho est previsto y no es necesario que modifiquis los tests
para solucionarlo. Al finalizar la ejecucin la memoria quedar liberada.
Adems, los tests para comprobar la capacidad mxima de la tabla fallarn,
ya que en este caso las tablas no tienen esta limitacin.

S-ar putea să vă placă și