Universidad de Puerto Rico en Humacao Departamento de Matemáticas COMP 4097: Estructuras de Datos y Algoritmos Instructor: José O. Sotero Esteva Segundo semestre, 2014-2015 (23/01/15) Asignación 01: programa Frecuencia de caracteres en un texto Descripción En este proyecto escribiremos un programa que leerá un archivo de texto e imprimirá un histograma de caracteres representando la frecuencia con que aparece cada caracter en el texto. Un ejemplo pequeño sería el siguiente. Suponga que el archivo llamado prueba.txt contiene el texto La NASA capta el momento en el que un asteroide 'roza' la Tierra El programa debe leer todos los caracteres, contar cuantas veces aparece cada uno y luego computar la frecuencia (en por ciento). Si se ejecutara la orden FrecuenciaCaracteres prueba.txt imprimiría: Frecuencia de caracteres imprimibles en el archivo prueba.txt. c| %| 5 10 15 20 25 30 35 40 45 50 55 ­+­­+­­­­+­­­­+­­­­+­­­­+­­­­+­­­­+­­­­+­­­­+­­­­+­­­­+­­­­+­­­­ :18:================== e:12:============ a:10:========== o: 6:====== r: 6:====== t: 4:==== l: 4:==== n: 4:==== A: 3:=== m: 3:=== u: 3:=== i: 3:=== ': 3:=== Asignación 01: programa Frecuencia de caracteres en un texto L: 1:= N: 1:= S: 1:= c: 1:= p: 1:= q: 1:= s: 1:= d: 1:= z: 1:= T: 1:= Objetivos 1. Refrescar el conocimiento adquirido en los cursos COMP 3081-3082 sobre definición y manipulación de: variables de texto, archivos, arreglos, clases, campos de clase, métodos de clase públicos y privados, constantes, condicionales, ciclos, uso de bibliotecas del lenguaje, etc. 2. Escribir nuevos programas en C++ valiéndose de la documentación disponible en el texto y las referencias del curso y en fuentes de referencia del lenguaje como cplusplus.com. 3. Experimentar con una combinación de arreglos y contadores que forman una estructura de datos. 4. Ceñirse a las especificaciones de requisitos de un proyecto. Procedimiento Previo a comenzar el trabajo sobre el código para el proyecto se sugiere completar los siguientes ejercicios: 1. Estudie cuidadosamente la sección 2.7 (Character Input and Output) de la referencia Lecture Notes on C++ for Java Programmers. Estudie, escriba, ejecute y entienda los cuatro ejemplos contenidos en esa sección. Recuerde: si no puede escribir un programa que corra, entonces no lo entiende. ¡Hágalo! 2. Estudie cuidadosamente la sección Input/output with files de cplusplus.com (http://www.cplusplus.com/doc/tutorial/files/). Preste particular atención al ejemplo titulado // reading a text file. Recuerde: si no puede escribir un programa que corra, entonces no lo entiende. ¡Hágalo! 3. Combine lo aprendido en los dos pasos anteriores para hacer modificar el ejemplo 2.7.2 4. Character counting (ctch1.c) de Lecture Notes on C++ for Java Programmers para que lea de un archivo en vez de un teclado. 5. Estudie el segundo programa de ejemplo en el artículo How to parse command line parameters de cplusplus.com (http://www.cplusplus.com/articles/DEN36Up4/). Es el que tiene el comentario // Check the number of parameters. Recuerde: si no puede escribir un programa que corra, entonces no lo entiende. ¡Hágalo! Una vez esté segura o seguro de que entiende lo anterior puede comenzar el procedimiento para hacer Página 2 de 4 Asignación 01: programa Frecuencia de caracteres en un texto el proyecto: 1. Siga el procedimiento Descargar asignaciones nuevas en el documento Procedimiento para entrega de proyectos usando git. (versión 3) disponible en la página del curso. 2. Abra el archivo “FrecuenciaCaracteres.cbp” usando CodeBlocks. Verifique que su contenido incluye los archivos main.cpp y FrecuenciaCaracter.cpp bajo Sources y FrecuenciaCaracter.h bajo Headers. Estos contienen el código básico que Usted deberá completar. 3. Se sugiere que vaya expandiendo la funcionalidad del programa en este orden: 4. Capture el nombre del archivo a utilizarse de la línea de comandos incorporando lo aprendido en el paso 5 de arriba. Asegúrese que cumple con las especificación adicional número 3 de abajo. 5. Abra, lea y cuente los caracteres del archivo que tiene el nombre provisto por el usuario en la línea de comandos como en el ejemplo estudiado en el paso sugerido 4 de arriba. Asegúrese que cumple con las especificación adicional número 4 de abajo. 6. Añada el código necesario a main() para que cree un objeto de la clase FrecuenciaCaracter. 7. Añada el código que sea necesario en el constructor FrecuenciaCaracter() para que inicialice el arreglo conteo de manera apropiada. Pruebe que realmente lo hace. 8. Añada el código que sea necesario en el método anade() de la clase FrecuenciaCaracter para que actualice de manera apropiada los arreglos conteo y letras. Sólo procese caracteres imprimibles. Pruebe que lo hace bien. 9. Añada el código que sea necesario en el método histograma() de la clase FrecuenciaCaracter para que imprima los resultados como se especifica arriba. Note el formato de tabla en el que las primeras dos columnas siempre tienen el mismo ancho. Los resultados no tienen que aparecer en orden todavía. 10. Añada el código que sea necesario en el método ordena() de la clase FrecuenciaCaracter para que ordene los datos en los arreglos usando como criterio que aparezcan los caracteres de mayor frecuencia a menor frecuencia. Especificaciones adicionales 1. El nombre del cartapacio en el que estará el proyecto será proyectos/asig01. 2. El nombre del proyecto será FrecuenciaCaracteres. 3. Si el usuario no proveyó la cantidad correcta de parámetros en línea de comandos su programa deberá responder con el mensaje Cantidad incorrecta de argumentos. Use FrecuenciaCaracteres <nombre de archivo> 4. Si ocurre un error al abrir el archivo su programa deberá responder con el mensaje No puede abrir el archivo <nombre de archivo>. 5. Como siempre, deberá añadir a cada archivo de su código el Bloque de comentarios inicial. 6. El programa deberá funcionar correctamente para archivos de tamaño enorme (terabytes) Página 3 de 4 Asignación 01: programa Frecuencia de caracteres en un texto 7. Su código deberá compilar sin errores ni advertencias. 8. Podrá suponer que los archivos de texto no tendrán mas de 1000 caracteres imprimibles distintos. Fecha y hora de entrega Se recogerá la asignación de su depósito en mate.uprh.edu el Viernes 30 de enero de 2015 a las 23:55. Criterios de evaluación Se utilizará los siguientes criterios para evaluar su entrega: entrega correcta y a tiempo, uso de los nombres especificados en estas instrucciones y en las instrucciones citadas aquí, documentación (comentarios), adhesión a las especificaciones, el producto del programa es como el especificado. Esta obra está bajo una Licencia Creative Commons Atribución-Compartir Igual 4.0 Internacional. Página 4 de 4