Tarea 1 de Software de Base

Trimestre 2008 Invierno
Entrega: 4 de febrero de 2008 a las 22:00.

Una etiqueta es una cadena que comienza con una letra mayúscula y que puede continuar con letras mayúsculas o dígitos. Un nemónico es una cadena que consta de una o más letras minúsculas. Un número decimal es una cadena que comienza con d y que continúa con uno o más dígitos del 0 al 9. Un número binario es una cadena que comienza con b y que continúa con uno o más dígitos 0 o 1. Un número hexadecimal es una cadena que comienza con h y que continúa con uno o más dígitos del 0 al 9 o letras de la A a la F. Un número octal es una cadena que comienza con o y que continúa con uno o más dígitos del 0 al 7. 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 el fin del archivo). Cualquier otra cadena se llamará un error. Escriba un programa de nombre fuenteZZ.c, fuenteZZ.cpp, fuenteZZ.java ó fuenteZZ.f77 (donde ZZ es una clave asignada por el profesor y al compilarlo recibirá el nombre fuenteZZ) tal que lea la entrada estándar y que escriba a la salida cuántas etiquetas, cuántos nemónicos, cuántos números binarios, cuántos números octales, cuántos números decimales y cuántos números hexadecimales hay, además diga cuántos errores hay. Por ejemplo, si la entrada estándar contuviera lo siguiente:

TRIM08I Error o777 b101
b102 d31415 h8A7B sb hb1
d777 ### DD d11
hola o2 hB1 eMail


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

2 2 1 2 3 2 5

puesto que hay 2 etiquetas (TRIM08I y DD), 2 nemónicos (sb y hola), 1 número binario (b101), 2 números octales (o777 y o2), 3 números decimales (d31415, d777 y d11), 2 números hexadecimales (h8A7B y hB1) y 5 errores (Error, b102, hb1, ### y eMail).

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.