Tarea 3: Histograma de Frecuencia de Palabras






Problema
    Se le pide escribir un programa que lea un documento (archivo) de la entrada estándar y produzcas en la salida estándar un listado de todas las palabras aparecidas en el documento junto con un contador del número de ocurrencias de cada palabra. El listado debería estar en ordenado por número creciente de ocurrencias y orden alfabético dentro de una misma frecuencia de ocurrencia.
    Cada línea del listado de salida debe contener una única palabra (todas en minúsculas) seguidas por uno o más espacios en blanco y seguidas por un entero indicando el númerio de ocurrencias.
    Para efectos de esta tarea, una "palabra" es un string de caracteres alfabéticos limitados en ambos extremos por caracteres no alfabéticos, el comienzo o fin de línea y el comienzo o fin de archivo. Las diferencias en mayúscula o minusculas  no son consideradas relevantes. "hola", "HOLA", y "Hola" son todas tratadas como la misma palabra.


Archivos
    Se incluyen los siguientes archivos:

histograma.cpp             Código fuente del programa.
makefile                          Archivo de compilación.
documentacion.html    Documentación del programa.
readme.txt                      Docuementación en formato de texto.
Diagrama.jpg                 Diagrama explicativo.
archivo.txt                       Archivo de prueba.
 

Solución
    El programa toma las palabras desde la entrada estandar, caracter a caracter, transformando la letras mayúsculas a minúsculas. Palabras son considerados los conjuntos de letras enmarcados entre caracteres no alfabéticos, la letra ñ o las letras acentuadas.

    Las palabras son guardadas en un mapa a medida que se escanea el texto, a cada palabra le es asociada en forma reiterada el numero de ocurrencias que lleva hasta el momento. Las palabras luego son copiadas a una lista para ser ordenadas y listadas en pantalla por el número de ocurrencias.

    La solución se muestra en el siguiente diagrama explicativo:
 
 







Compilación
    Para compilar simplemente ejecute el comando make en el directorio donde se encuentra el programa:

$>make

    En algunos sistemas en los cuales el directorio actual no este seteado dentro de la variable de ambiente PATH se debe ejecutar así:

$>./make

    Para eliminar el archivo creado en la compilación ejecute según corresponda:

$>make clean
$>./make clean
 

Ejecución
    Para ejecutar el programa realice:

$>his

y siga las instrucciones, en algunos sistemas como se dijo anteriormente se debe ejecutar así:

$>./his

También se puede entregar un archivo como argumento, para lo cual se incluye un archivo de ejemplo llamado archivo.txt, Ud. puede proporcinar cualquier archivo de texto el cual para su correcta ejecución debe contener una nueva línea al final de este, es decir, un retorno de carro después de la úlima palabra.

$>his < archivo.txt
$>./his < archivo.txt