Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
CI-1201 Programación II - I-2013
Profesor Jeisson Hidalgo-Céspedes
Grupo 03. Entrega límite: 10-abr-2013 11:55 p.m.
Tarea 02: Estadísticas
Implemente un comando estad (o en inglés stats) que provee estadísticas descriptivas de datos numéricos almacenados en archivos de texto o provistos en la entrada estándar. Su programa deberá comportarse como un comando normal de Unix. Si se invoca con el parámetro --help, brindará ayuda al usuario:
O si implementa en inglés, esta podría ser la ayuda incorporada:
Su programa deberá hacer un análisis inicial de los parámetros provistos por el usuario, los cuales se pueden agrupar en tres tipos:
Parámetros que controlan las estadísticas: -f -h -i.
El parámetro --help para proveer ayuda.
Nombres de archivos, los cuales no inician con un guión.
El análisis de parámetros incluye las siguientes consideraciones. Si se especifica --help, el programa debe imprimir ayuda en la salida estándar indiferentemente de cuáles otros parámetros se hayan provisto. Si se provee un parámetro no válido, se debe imprimir un mensaje en el error estándar. En cualquiera de estos dos casos el programa termina su ejecución inmediatamente. Ejemplo:
$ estad -f -c -i
estad: opcion desconocida: -c
$
Si no se especifican nombres de archivos se asume que los datos numéricos serán provistos en la entrada estándar. Si se proveen nombres de archivo, el programa leerá uno a uno estos archivos en el orden en que se proveyeron y no la entrada estándar. El resultado siempre será impreso en la salida estándar.
Si el parámetro -i está presente y el usuario provee dos o más nombres de archivos, las estadísticas se calcularán independientemente para cada archivo. Si estas dos condiciones no se cumplen, el comando imprimirá estadísticas de todos los datos leídos, como si el parámetro -i no hubiese sido provisto. Ejemplos de ejecución.
Si \({x_1, x_2, \dots, x_n}\) representan el conjunto de datos leídos, las estadísticas que debe calcular e imprimir el programa son las siguientes
Si la opción -h está provista, su programa debe construir un histograma que represente gráficamente la frecuencia de los datos e imprimirlo en la salida estándar junto con los estadísticos. Dado que la construcción de un histograma requiere conocer ciertas características de los datos de antemano, su implementación puede imponer algunas delimitaciones razonables, por ejemplo, su histograma puede tener un número siempre fijo de paticiones (también llamado clases o en inglés breaks), o su programa sólo imprime histogramas cuando los datos son provistos en archivos y no en la entrada estándar con el fin de poder recorrer dos veces el conjunto de datos. Ejemplos de ejecución:
Su solución deberá implementarse bajo el paradigma de programación procedimental. Puede tomar como punto de partida el siguiente código fuente realizado en clase. Para compilarlo con GCC puede emitir el comando cc -Wall -std=c99 -o estad estad.c.
Evaluación
[10%] El programa advierte al usuario en el error estándar si se invoca con un parámetro no válido y termina su ejecución.
[40%] Procesa adecuadamente el parámetro -i. Imprime estadísticas de cada archivo individual cuando este parámetro está presente. Las estadísticas son correctas. La funcionalidad del comando sin el parámetro -i se mantiene correcta.
[20%] Calcula y despliega siempre la desviación estándar de los datos de manera eficiente y correcta.
[30%] Si la opción -h está provista, imprime un histograma de los datos. Las restricciones planteadas son razonables.
[10% Opcional] El histograma es impreso a escala. Es decir, no sobrepasa el ancho de una pantalla de 80 caracteres.
Para presentar su solución, comprima únicamente los archivos fuente (.c, .cpp, .h) que haya creado y suba el comprimido a la Plataforma Educativa en la asignación con nombre Tarea02.