Tarea 1 de Software de Base (2006 Otoño)
Fecha de entrega: 10 de octubre 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 0b y que
continúa con uno o más dígitos 0 ó 1. Un número cuaternario es una cadena que
comienza con 0c y que
continúa con uno o más dígitos 0 a 3. Un número octal es una cadena que comienza con
0o y que
continúa con uno o más dígitos 0 a 7. Un número decimal es una cadena que comienza
con 0d y que
continúa con uno o más dígitos 0 a 9. Un número hexadecimal es una cadena que
comienza con 0x 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 el
fin
del 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
0b101 0c123 0d31415 0x8a7b 0o777
b1 0c4123 0o8 0dd 0hAB 00
entonces su programa debe de escribir en la salida estándar
3 1 1 1 1 1 7
puesto que hay tres etiquetas (TAREA1, SB, TRIMESTRE), un número de
cada tipo (0b101, 0c123, 0d31415,
0x8a7b, 0o777) y siete errores (2006P, b1, 0c4123, 0o8, 0dd, 0hAB, 00).
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.