Página principal Lista alfabética Lista de componentes Lista de archivos Miembros de las clases Páginas relacionadas
Programación en C++ (Practicas de Est. Datos)
Práctica: Abstracción, plantillas e iteradores.
Después de esta práctica el alumno debe estar familiarizado con el uso de tipos de datos abstractos clásicos, como son el tipo Vector, Conjunto y Diccionario, así como el uso de plantillas e iteradores.
Los objetivos de la práctica son
- Desarrollar un programa completo que use TDAs que se han desarrollado en clase de teoría, más concretamente, el tipo Vector, Conjunto y Diccionario
- Que el alumno maneje los tipos iteradores sobre contenedores.
- Que el alumno se familiarice con el uso de plantillas, así como con errores relacionados con funciones y tipos de datos genéricos.
- Insistir en la asimilación del concepto de tipo de dato abstracto, y la ventaja de la abstracción.
Se desea desarrollar un programa para el análisis y clasificación automática de textos. Para ello, se considera el problema de analizar la relación entre un subconjunto de palabras relevantes y un texto. El proceso es el siguiente,
- Se crean dos ficheros de texto
- Palabras relevantes. Contiene todas las palabras que se consideran relevantes.
- Texto. El texto a analizar.
- El programa a desarrollar se llamará analizar, y leerá los dos ficheros anteriores para obtener la salida. La forma de lanzarlo será "analizar <relevantes> <texto>" donde
- <relevantes> es el nombre del fichero donde están las palabras relevantes.
- <texto> es el nombre del fichero con el texto a analizar.
- El programa obtiene en la salida estandar (cout):
- Número de palabras relevantes
- Número de palabras en el texto
- Porcentaje de palabras relevantes que aparecen en el texto
- Porcentaje de palabras en el texto que son relevantes.
- Las palabras relevantes que aparecen en el texto y su frecuencia, ordenadas desde mayor frecuencia a menor
- Las palabras del texto y su frecuencia, ordenadas desde mayor frecuencia a menor.
Para simplificar el problema, y que el alumno no dedique un tiempo excesivo a detalles de menor importancia para la práctica, se dispone de una clase Lector_Palabras
que resuelve el problema de leer un conjunto de palabras desde un flujo de entrada.
Nótese que el fichero de palabras relevantes podría ser un texto cualquiera, con palabras repetidas, caracteres especiales, etc, que podría leerse con el tipo Lector_Palabras
de la misma forma que el texto a analizar.
El alumno debe:
- Crear un programa analizar que resuelva el problema descrito. Para ello, puede usar los tipos de dato abstractos desarrollados para gestionar
- Un lector de palabras (tipo
Lector_Palabras)
- Un vector dinámico (tipo
Vector)
- Un conjunto (tipo
Conjunto)
- Un diccionario (tipo
Diccionario
y Par)
- Entregar la práctica como
- Un documento en papel que contiene tanto el listado como la documentación del programa realizado.
- Un disquette con la práctica. Éste debe estar contenido en un sobre o similar que permita pegarlo al documento entregado. En este disquette deben aparecer
- Los fuentes necesarios para compilar el programa. Nótese que estos incluyen tanto los del alumno como los del profesor.
- Un fichero makefile (que se llamará makefile) para generar el ejecutable escribiendo simplemente make, y para borrar los ficheros objeto escribiendo make clean
- Un fichero LEEME donde se describe el contenido del disco y cualquier comentario adicional sobre el programa que el alumno considere oportuno.
La fecha de ENTREGA será el Lunes, 20 de Mayo antes del las 14h. Las prácticas se entregarán al delegado de curso que se las hará llegar al profesor.
Software disponible
Para facilitar la realización de la práctica, se ha preparado un archivo con todos los contenidos necesarios (entre ellos, esta documentación).
Después de ejecutar setup se habrán generado todos los archivos binarios necesarios:
- Biblioteca palabras. Contiene el código que implementa el TDA
Lector_Palabras
. Se genera en el directorio lib, y para usarla se debe incluir en el programa el fichero cabecera (directorio include) y enlazar con dicha biblioteca para obtener el ejecutable. - Ejecutables ejemplo. Corresponden a la compilación de los programas ejemplo que se entregan con los TDAs (directorio TDAs/ejemplos)
- vector. Programa ejemplo_vector.cpp que realiza varias ordenaciones de un vector dinámico.
- conjunto. Programa ejemplo_conjunto.cpp que lleva a cabo la unión de dos conjuntos de enteros, mostrándolos en la salida estándar.
- diccionario. Programa ejemplo_diccionario.cpp que lee un texto desde la entrada estándar (si se introduce con el teclado termine pulsando ctrl-d). Como resultado escribe todas las cadenas de caracteres introducidas, ordenadas y con su frecuencia. Nótese que la práctica tiene una operación similar pero leyendo con el tipo de dato
Lector_Palabras
- palabras. Programa palabras.cpp que lee desde la entrada estándar (si no se da ningún nombre de archivo) o desde un archivo e imprime todas las palabras que encuentra en el archivo. Ejecutelo con varios ejemplos para ver como elimina los caracteres extraños y extrae las palabras correctas.
- Documentación. Todos los documentos necesarios, incluidos esta página principal y toda las especificaciones de los TDAs, donde también aparecen los fuentes de los programas.
Nótese que la estructura que se ofrece es únicamente como muestra de la forma en que se pueden desarrollar programas, así como para generar automáticamente la documentación. El alumno debe crear su propio makefile y estructura para que la compilación de su aplicación se haga según se indicó anteriormente.
Programación en C++. Desarrollado por Antonio Garrido,
© 2001