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.