Tarea 1 de Software de Base (2006P)

Fecha de entrega: 9 de mayo de 2006 a las 10pm

Una etiqueta consta de una cadena de letras mayúsculas y dígitos que comienza con una letra mayúscula. Un número binario es una cadena que comienza con una b y que continúa con uno o más dígitos 0 ó 1. Un número cuaternario es una cadena que comienza con una c y que continúa con uno o más dígitos 0 a 3. Un número octal es una cadena que comienza con una o y que continúa con uno o más dígitos 0 a 7. Un número decimal es una cadena que comienza con una d y que continúa con uno o más dígitos 0 a 9. Un número hexadecimal es una cadena que comienza con una h y que continúa con uno o más dígitos 0 a 9 o letras a a f. Cada una de estas cadenas está antecedida por un blanco (ya sea un espacio, un tabulador, un salto de línea o el principio del archivo) y termina con un blanco (ya sea un espacio, un tabulador, un salto de línea o fin de archivo). Cualquier otra cadena se llamará un error. Escriba un programa de nombre lectura.c, lectura.cpp, lectura.java ó lectura.f77 (al compilarlo recibirá el nombre lectura) tal que lea la entrada estándar y que escriba a la salida cuántas etiquetas hay, cuántos números binarios, cuántos números cuaternarios, cuántos números octales, cuántos números decimales y cuántos números decimales hay, además diga cuántos errores hay. Por ejemplo, si la entrada estándar contuviera lo siguiente:

TAREA1 SB TRIMESTRE 2006P
b101 c123 d31415 h8a7b o777
b c4123 o8 dd hAB

entonces su programa debe de escribir en la salida estándar

3 1 1 1 1 1 6

puesto que hay tres etiquetas (TAREA1, SB, TRIMESTRE), un número de cada tipo (b101, c123, d31415, h8a7b, o777) y seis errores (2006P, b, c4123, o8, dd, hAB).

Recuerde que su programa deberá compilar en gcc, g++, gcj o f77 para Linux sin problemas. Un programa simple en C que lee su entrada estándar y la copia a su salida estándar es:

#include <stdio.h>

int main(void)
{
  int c;

  while ((c = getchar()) != EOF)
    putchar(c);
  return 0;
}

Si este programa lo llamara copia.c y lo compilara (gcc copia.c -o copia) lo podría ejecutar usando la redirección de la entrada y la salida estándar (./copia < entrada.txt > salida.txt) donde entrada.txt es algún archivo de texto ya existente y salida.txt es donde va a dar la salida de copia. También le recuerdo que la biblioteca estándar <ctype.h> contiene funciones que deciden si un caracter es un espacio, una letra, un dígito, etc. Finalmente, si tiene más dudas sobre archivos, le recomiendo visite mis prácticas de programación y estudie los ejemplos de la sección 8.