00001
00408 @section EDsesion6 Sesión 6: Tipos de datos abstractos en C++ (II).
00409
00410 Matrices en base a una especificación dada. Se modifica un programa de
00411 imágenes.
00412
00413 día 21 de mayo
00414
00415 @section EDsesion7 Sesión 7: Abstracción, plantillas e iteradores.
00416
00417 -# Transformar el tipo @e Polinomio que se ha obtenido, en una plantilla
00418 que parametrice el tipo de dato del coeficiente de cada monomio. De
00419 esta forma, se pueden declarar Polinomios con precisión @e float o
00420 con precisión @e double. Note que esto implica también una modificación
00421 en los programas de ejemplo.
00422
00423 día 6 de junio
00424
00425 */
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439 @section EDsesion4 Sesión 4: Abstracción, plantillas e iteradores.
00440
00441 Después de esta práctica el alumno debe estar familiarizado con:
00442
00443 - El uso de tipos de datos abstractos clásicos, como son el tipo @e Vector,
00444 @e Conjunto y @e Diccionario, así como el uso de plantillas e
00445 iteradores.
00446 - La estructuras de datos de secuencia de celdas doblemente enlazadas y la
00447 representación de árboles binarios de búsqueda mediante celdas enlazadas.
00448
00449 Los ficheros fuente se deberán descargar desde
00450
00451 http:
00452
00453 tras lo cual, el comando
00454
00455 tar zxvf generalizacion.tgz
00456
00457 extrae todos los contenidos del fichero en el directorio actual.
00458
00459
00460 Los objetivos de la práctica son
00461
00462 - Desarrollar un programa completo que use TDAs que se han desarrollado
00463 en clase de teoría, más concretamente, el tipo @e Vector, @e Conjunto y
00464 @e Diccionario
00465 - Que el alumno maneje los tipos iteradores sobre contenedores.
00466 - Que el alumno se familiarice con el uso de plantillas, así como con
00467 errores relacionados con funciones y tipos de datos genéricos.
00468 - Insistir en la asimilación del concepto de tipo de dato abstracto, y la
00469 ventaja de la abstracción.
00470 - Practicar en el uso de las estructuras de datos relacionadas con secuencias y
00471 árboles binarios.
00472
00473 Se desea desarrollar un programa para el análisis y clasificación automática de
00474 textos. Para ello, se considera el problema de analizar la relación entre un
00475 subconjunto de palabras relevantes y un texto. El proceso es el
00476 siguiente,
00477
00478 -# Se crean dos ficheros de texto
00479 -# Palabras relevantes. Contiene todas las palabras que se
00480 consideran relevantes.
00481 -# Texto. El texto a analizar.
00482 -# El programa a desarrollar se llamará @e analizar, y leerá los dos ficheros
00483 anteriores para obtener la salida. La forma de lanzarlo será "analizar
00484 <relevantes> <texto>" donde
00485 -# <relevantes> es el nombre del fichero donde están las palabras relevantes.
00486 -# <texto> es el nombre del fichero con el texto a analizar.
00487 -# El programa obtiene en la salida estandar (@e cout):
00488 -# Número de palabras relevantes
00489 -# Número de palabras en el texto
00490 -# Porcentaje de palabras relevantes que aparecen en el texto
00491 -# Porcentaje de palabras en el texto que son relevantes.
00492 -# Las palabras relevantes que aparecen en el texto y su frecuencia,
00493 ordenadas desde mayor frecuencia a menor
00494 -# Las palabras del texto y su frecuencia, ordenadas desde mayor
00495 frecuencia a menor.
00496
00497 Para simplificar el problema, y que el alumno no dedique un tiempo excesivo a
00498 detalles de menor importancia para la práctica, se dispone de una clase
00499 @c Lector_Palabras que resuelve el problema de leer un conjunto de palabras
00500 desde un flujo de entrada.
00501
00502 Nótese que el fichero de palabras relevantes podría ser un texto cualquiera, con
00503 palabras repetidas, caracteres especiales, etc, que podría leerse con el tipo @c
00504 Lector_Palabras de la misma forma que el texto a analizar. El número de palabras
00505 relevantes no tiene en cuenta repetidos (palabras repetidas contabilizan una
00506 vez), mientras que el número de palabras en el texto si debe contabilizarlas.
00507
00508 El alumno debe:
00509
00510 -# Crear un programa @e analizar que resuelva el problema descrito. Para ello,
00511 puede usar los tipos de dato abstractos desarrollados para gestionar
00512 -# Un lector de palabras (tipo @c Lector_Palabras)
00513 -# Un vector dinámico (tipo @c Vector)
00514 -# Un conjunto (tipo @c Conjunto)
00515 -# Un diccionario (tipo @c Diccionario y @c Par)
00516 -# Modificar la estructura de datos interna del tipo de dato abstracto
00517 @c Diccionario, de forma que sea un árbol binario de búsqueda el que almacene
00518 las parejas de valores.
00519 -# De forma @e voluntaria, podrá entregar igualmente también una implementación
00520 del tipo de dato @c Conjunto con una estructura de datos de celdas doblemente
00521 enlazadas circulares con cabecera para almacenar los datos.
00522 -# Probar el programa original con las modificaciones internas realizadas y
00523 comprobar que los resultados son idénticos.
00524
00525 Finalmente, y para facilitar la modificación del tipo de dato @c Diccionario
00526 se incluye el tipo de dato @e Conjunto de ejemplo (ficheros de extensión ejemplo
00527 en el directorio @e ejemplos). Se ofrece el TDA @c Conjunto, al que se ha
00528 modificado la estructura de datos interna para usar un árbol binario de
00529 búsqueda en lugar de un vector. Nótese que esta es la transformación que se
00530 pide en la práctica, aunque para el tipo de dato @c Diccionario.
00531
00532 La práctica se deberá entregar como:
00533
00534 -# Un documento en papel que contiene tanto el listado como
00535 la documentación del programa realizado.
00536 -# Un disquette con la práctica. Éste debe estar contenido en un
00537 sobre o similar que permita pegarlo al documento entregado. En este
00538 disquette deben aparecer
00539 -# Los fuentes necesarios para compilar el programa. Nótese que estos
00540 incluyen tanto los del alumno como los del profesor.
00541 -# Un fichero @e makefile (que se llamará @e makefile) para generar
00542 el ejecutable escribiendo simplemente @e make, y para borrar los ficheros
00543 objeto escribiendo @e make @e clean
00544 -# Un fichero @e LEEME donde se describe el contenido del disco y
00545 cualquier comentario adicional sobre el programa que el alumno considere
00546 oportuno.
00547
00548 La fecha de @b ENTREGA será el Lunes, 10 de Junio de 13 a 13:30 en el
00549 despacho del profesor.
00550
00551
00552
00553