Download 1. objetivos 2. tad árbol de búsqueda binaria 3. tareas a
Document related concepts
no text concepts found
Transcript
Universidad Técnica Federico Santa María Departamento de Informática ESTRUCTURA DE DATOS EXPERIENCIA DE LABORATORIO N°3 (del 4 al 18 de Mayo de 2011) Profesor: Mauricio Solar Profesora: Lorna Figueroa msolar@inf.utfsm.cl lorna.figueroa@usach.cl TAD Árbol de Búsqueda Binaria 1. OBJETIVOS Implementar funciones para árboles de búsqueda binaria y luego aplicarlos para realizar una sencilla aplicación de base de datos bancaria en memoria principal. 2. TAD ÁRBOL DE BÚSQUEDA BINARIA crearArbol(tABB arbol): crea un árbol de búsqueda binaria vacío. insertarNodo(tNodo n, tABB arbol): inserta el nodo en el árbol de acuerdo con las reglas de inserción del ABB esVacio(tABB arbol): retorna 1 si el árbol es vació, de otro modo, retorna 0. buscarNodo(tABB arbol, int aBuscar): busca y retorna el nodo del árbol que tenga su dato igual a “aBuscar”. Si no lo encuentra, retorna “NULL”. 3. TAREAS A REALIZAR Se deben programar en C estándar (en Linux) al menos las funciones descritas en el punto 2 para implementar un sistema de gestión de cuentas para un banco, en el cuál se almacene la información de los clientes, sus cuentas y los saldos asociados a cada una. Se trata de un árbol ABB (organizado en base a los RUT de cliente) en el cuál cada nodo representará un cliente, que debe almacenar en una lista enlazada (ligada al nodo del cliente) las cuentas que este tiene y el saldo de cada una. El programa deberá ejecutar las siguientes funciones: AgregarCuenta(tABB arbol, int rut, int id_cuenta, int saldo): se verifica si existe el cliente, de no existir, debe ser creado. Si existe, se verifica que no exista la cuenta, de existir, se retorna -1. Si no existe, la cuenta debe ser agregada a las cuentas del cliente y su saldo debe ser el especificado. ModificarSaldo(tABB arbol, int rut, int id_cuenta, int aCambiar): se modifica el saldo de la cuenta id_cuenta del cliente con rut igual al entregado. Se debe validar que el cliente y la cuenta existan, de no ser asi, se debe retornar -1. Universidad Técnica Federico Santa María Departamento de Informática EliminarCuenta(tABB arbol, int rut_cliente, int id_cuenta): se elimina la cuenta de id “id_cuenta” en el cliente “rut_cliente”. Se debe verificar que exista tanto el cliente como la cuenta, de no existir alguno de los 2, se retorna -1. SaldoCliente(tABB arbol, int rut_cliente): se retorna la suma del saldo de todas las cuentas del cliente con rut “rut_cliente”. Si el cliente no existe se debe retornar -1. MostrarClientes(tABB árbol): debe mostrar todos los clientes del banco ordenados por RUT y el saldo total (suma de los saldos de todas sus cuentas) asociado a cada uno. SaldoBanco(tABB arbol): debe retornar la suma de los saldos de todas las cuentas de todos los clientes del banco. En caso de no existir clientes, debe retornar 0. El programa deberá recibir un archivo de entrada llamado Clientes.txt con el siguiente formato: Clientes.txt 10 12998337 2 1 200000 2 5500000 3874638 3 1 40000 2 56700 3 10000000 … 9872134 1 4032000 En donde el primer número es el número de clientes que contiene el archivo de entrada (en el ejemplo 10) seguido de los clientes. En las siguientes líneas del archivo, están escritos los clientes, cada cliente ocupa 2 líneas, la primera línea de cada cliente contiene dos enteros, el primero es el RUT del cliente, seguido por el número de cuentas que este posee. La segunda línea contiene pares de 2 enteros (1 par por cada cuenta), en donde el primer número representa el identificador de la cuenta y el segundo número el saldo de la cuenta. Por ejemplo, el primer cliente del archivo es: 12998337 2 1 200000 2 5500000 RUT: 12998337 Número de cuentas: 2 Cuentas: id: 1 - saldo: 200000 id: 2 - saldo: 5500000 Una vez cargados los datos en el árbol se debe generar un archivo de salida llamado Estado1.txt y a continuación, se deben realizar las siguientes operaciones: Universidad Técnica Federico Santa María Departamento de Informática - Cada cliente ha decidido retirar el 50% del saldo de todas sus cuentas. - El cliente de más edad (RUT menor) decide cerrar su primera cuenta - El cliente mas joven (RUT mayor) decide abrir una nueva cuenta con identificador 9 y saldo $6.400.000. Una vez realizadas estas operaciones, el programa deberá generar otro archivo de salida llamado Estado2.txt. Los archivos Estado1.txt y Estado2.txt tienen el siguiente formato (que debe ser respetado): Situación del Banco ------------------------------------------------------------------------------------------------------Clientes ------------------------------------------------------------------------------------------------------RUT N Cuentas Saldo ------------------------------------------------------------------------------------------------------3874638 2 10096700 … 9872134 1 4032000 12998337 3 5700000 ------------------------------------------------------------------------------------------------------Saldo total del Banco 90393829 Los clientes se muestran ordenados por RUT de menor a mayor. “N cuentas” es el número de cuentas de cada cliente. El programa debe ser realizado en Linux, compilado con la función –gcc y –Wall. Se recomiendan las funciones malloc, realloc o calloc, para el uso de memoria dinámica. 4. RESTRICCIONES Y CONSIDERACIONES Se debe programar un TAD para el manejo de Listas. La implementación de Listas debe hacerse de manera dinámica, cualquier implementación estática (usando arreglos) será evaluada con nota cero. Se permite la creación de otras funciones además de las definidas en el TAD ABB. El acceso a la información de los nodos debe hacerse usando las funciones del TAD, se considerará grave la violación del TAD ABB. No es necesario utilizar todas las funciones sugeridas para el TAD ABB, pero si deben estar todas programadas. Si se desea, se permite la separación del código en archivos para mejorar el orden y la comprensión (Ejemplo: listas.h, ABB.h, tarea3.c, etc), no es obligatorio, pero si se hace deben incluirse instrucciones de compilación en el archivo README. Universidad Técnica Federico Santa María Departamento de Informática 5. ENTREGA La entrega de esta experiencia puede hacerse vía Moodle http://moodle.inf.utfsm.cl (Estructura de Datos – Campus Santiago) o también vía e-mail a alex.arenasf@alumnos.usm.cl La tarea deberá estar comprimida en un archivo Grupo.XX.tar.gz (Ejemplo Grupo.01.tar.gz). Este contendrá el archivo tarea3.c, un archivo nombres.txt con nombres y rol de los alumnos indicando que hizo cada integrante, el archivo Clientes.txt con al menos 10 clientes y un archivo README.txt con instrucciones generales y de compilación de ser necesario. Debe ser enviada a más tardar a las 23:59:59 del día 18 de Mayo de 2011. La entrega vía e-mail debe enviarse desde un correo electrónico institucional (alumnos.usm.cl o alumnos.inf.utfsm.cl) con el Asunto: [EDD] Tarea 3 GrupoXX. (EJEMPLO: “[EDD] Tarea 3 Grupo01”, sin las comillas, respetando espacios, corchetes y cambiando XX por su número de Grupo) Entregas con otro asunto o desde otras casillas de correo serán ignoradas. Los retrasos serán penalizados con descuentos de 30 puntos por día o parte de él. Las tareas deben cumplir con las siguientes condiciones para ser evaluadas: 1.- No deben tener errores de compilación. 2.- Por cada Warning en la compilación se descontarán 5 puntos. 3.- Debe ejecutar al menos un archivo de clientes escrito por los alumnos con al menos 10 clientes. Grupos No se permiten divorcios injustificados en los Grupos. Si un grupo se separa y entrega más de una tarea, todos los integrantes serán evaluados con nota cero. En caso de que alguno de los integrantes del grupo realice Rebaja Académica Voluntaria, contactarse a la brevedad con el ayudante de Laboratorio (alex.arenasf@alumnos.usm.cl) para una posible solución.