bit a bitdoc
#include
#include
#include
#include
using namespace std;
/*** Macros ***/
#define TAMBUF 1024 /* Tamanyo para bufer de entrada */
/*** Definicion de tipos de datos personalizados ***/
/* Tipo de datos para la gestion del menu del programa */
typedef enum _OpcionMenu OpcionMenu;
enum _OpcionMenu
{MENU_LISTAR_DATOS = 1,
MENU_AGREGAR_DATO,
MENU_ELIMINAR_DATO,
MENU_MODIFICAR_DATO,
MENU_LEER_ARCHIVO,
MENU_GUARDAR_ARCHIVO,
MENU_SALIR,
MENU_FIN /* Elemento especial para marcar el final de la
* enumeracion */
};
/* Tipo de datos que almacena valores y descripciones para el menu */
typedef struct _Menu Menu;
struct _Menu
{OpcionMenu valor;
/* Le damos un tamanyo fijo, a sabiendas de que solo el
* programador puede operar sobre este tipo de
* estructuras. Asumimos que el programador sabe lo que hace,
* cierto? */
char descripcion[81];
};
typedef unsigned char uchar; /* Alias para unsigned char */
/*** Prototipos de funciones ***/
void arreglar (char *);
voidbit_definir (uchar *, int, int);
int bit_recuperar (uchar *, int);
int bits_agregar (uchar **, int);
int bits_eliminar (uchar **, int);
void bits_listar (uchar *, int);
void bits_modificar (uchar *, int);
void bits_guardar (uchar *, int);
int bits_leer (uchar **);
int leer_entero (void);
/*** Funcion principal ***/
int
main (void){
static Menu datos_menu[]= {
{MENU_LISTAR_DATOS, "Listar datos"},
{MENU_AGREGAR_DATO, "Agregar dato"},
{MENU_ELIMINAR_DATO, "Eliminar dato"},
{MENU_MODIFICAR_DATO, "Modificar dato"},
{MENU_LEER_ARCHIVO, "Leer datos desde archivo"},
{MENU_GUARDAR_ARCHIVO, "Guardar datos en archivo"},
{MENU_SALIR, "Salir"}};
OpcionMenu opcion;int i;
uchar *secuencia = NULL; /* Secuencia de bits */
int cantidad = 0; /* Cantidad de bits que se estan manipulando */
/* Mensaje de introduccion. Se siente un poco mejor cuando el
* programa le da la bienvenida al usuario, y le dice brevemente
* de que se trata el asunto. */
printf ("\n""Bienvenido.\n" "Este programa realiza algunas manipulacionessimples con bits.\n\n"
"Por favor seleccione una opcion:\n\n");
for (i = 0; i < MENU_FIN - 1; i++)
printf (" %d. %s\n", datos_menu[i].valor, datos_menu[i].descripcion);
do {
printf ("\nopcion> ");
// opcion = leer_entero();
switch (opcion) {
case MENU_LISTAR_DATOS:
bits_listar (secuencia, cantidad);
break;case MENU_AGREGAR_DATO:
cantidad = bits_agregar (&secuencia, cantidad);
break;
case MENU_ELIMINAR_DATO:
cantidad = bits_eliminar (&secuencia, cantidad);
break;
case MENU_MODIFICAR_DATO:
bits_modificar (secuencia, cantidad);
break;
case MENU_LEER_ARCHIVO:
cantidad =bits_leer (&secuencia);
break;
case MENU_GUARDAR_ARCHIVO:
bits_guardar (secuencia, cantidad);
break;
case MENU_SALIR:
break;
default:
printf ("\nOpcion invalida.\n");
}
} while (opcion != MENU_SALIR);
printf ("\nAdios pues..\n");
return 0;
}
/*** Declaracion defunciones ***/
/* arreglar()
*
* Sencilla funcion que se encarga de asegurarse de que una cadena
* solo contenga caracteres validos, de acuerdo a la funcion
* isgraph(). Todos los caracteres no-validos son eliminados */
void
arreglar (char *cadena)
{
int i, j;
int longitud;
longitud = strlen (cadena);
for (i = j = 0; i < longitud; i++) {
if...
Regístrate para leer el documento completo.