Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
CI-1201 Programación II - 2014b
Profesor Jeisson Hidalgo-Céspedes

Tarea 02

Un cliente le ha contratado porque desea un programa que le ayude a desplegar números al estilo de un LED display. El cliente quiere que el programa pueda usarse en diversos contextos con diferentes fuentes de datos, por lo que han acordado implementar un comando led con la siguiente interfaz:

$ led --help
Usage: led [-s SIZE] [NUMBERS] [FILES]
Print NUMBERS in LED display format. Options:

  -h, --horizontal=ch  Sets the horizontal character, default='-'
  -s, --size=SIZE      Sets the font size, default=2
  -v, --vertical=ch    Sets the vertical character, default='|'
      --version        Print version of this program

If not parameters are given, read numbers from standard input until EOF
$

El programa recorre todos los números provistos y los despliega utilizando el formato LED. Cada dígito ocupa SIZE + 2 columnas y 2*SIZE + 3 filas. Debe haber una columna de blancos entre un dígito y el siguiente. Si hay varios números, debe haber una fila de blancos entre ellos. Por ejemplo:

$ led -s 1 0123456789
 -       -   -       -   -  --   -   -
| |   |   |   | | | |   |     | | | | |
         -   -   -   -   -       -   -
| |   | |     |   |   | | |   | | |   |
 -       -   -       -   -       -   -

$ led 0123456789
 --        --   --        --   --  ---   --   --
|  |    |    |    | |  | |    |       | |  | |  |
|  |    |    |    | |  | |    |       | |  | |  |
           --   --   --   --   --        --   --
|  |    | |       |    |    | |  |    | |  |    |
|  |    | |       |    |    | |  |    | |  |    |
 --        --   --        --   --        --   --

$ led -s 3 0123456789
 ---         ---   ---         ---   ---  ----   ---   ---
|   |     |     |     | |   | |     |         | |   | |   |
|   |     |     |     | |   | |     |         | |   | |   |
|   |     |     |     | |   | |     |         | |   | |   |
             ---   ---   ---   ---   ---         ---   ---
|   |     | |         |     |     | |   |     | |   |     |
|   |     | |         |     |     | |   |     | |   |     |
|   |     | |         |     |     | |   |     | |   |     |
 ---         ---   ---         ---   ---         ---   ---

$

Los parámetros -h y -v permiten cambiar los caracteres horizontales y verticales. Por ejemplo:

$ led -h '#' -v '#' 135 69
      ##   ##  
   #    # #    
   #    # #    
      ##   ##  
   #    #    # 
   #    #    # 
      ##   ##  

 ##   ##
#    #  # 
#    #  #
 ##   ##
#  #    #
#  #    #
 ##   ##

$

El parámetro --help imprime ayuda del programa y hace que termine de inmediato. El parámetro --version provoca que el programa imprima al menos la versión, la fecha de generación, el autor, información de contacto y licencia. Ambos parámetros son excluyentes. Es decir, si el usuario provee otros parámetros, se ignorarán. El argumento --help tiene la mayor prioridad.

$ led -h # --version -v # 135 69
led v1.0 [2014-Aug-26] Jeisson Hidalgo-Céspedes <jeissonh@gmail.com>

This is free software distributed under Creative Commons Attribution 4.0
International (CC BY 4.0) license.
$

A modo de ejemplo puede estudiar el programa arrmat (contracción de arreglo-matriz). Este programa de C crea tres arreglos/matrices y las imprime en la pantalla.

Evaluación

  1. [10%] Imprime ayuda únicamente cuando se provee el parámetro --help. Imprime la versión del programa y demás información con el parámetro --version. Ignora el resto de parámetros en ambos casos. El orden de los demás parámetros no importa.
  2. [20%] Lee números de los parámetros o archivos de texto en el orden en que los provee el usuario. Si no se provee ninguno, los lee de la entrada estándar hasta encontrar el carácter fin de archivo.
  3. [40%] Ajusta el tamaño de los dígitos acordes al parámetro -s ó --size. Separa dígitos por una columna de blancos y números por una fila de blancos.
  4. [10%] Permite cambiar los caracteres horizontales y verticales por los que guste el usuario con los parámetros -h y -v, o sus sinónimos --horizontal=ch y --vertical=ch.
  5. [10%] Las funciones y variables están documentadas con Doxygen. Utiliza comentarios en el cuerpo de las funciones para explicar código no obvio.
  6. [10%] El programa está implementado en C. Utiliza identificadores significativos. Las funciones inician en verbo, las variables en sustantivo. La indentación y convención de estilo es consistente.

Entrega de la solución

Esta tarea es de carácter individual. Comprima únicamente el código fuente (archivos .h y .c) y súbalos a Mediación Virtual en la asignación con nombre Tarea02.