05/04/2006, 07:31
|
| | Fecha de Ingreso: mayo-2005
Mensajes: 115
Antigüedad: 19 años, 8 meses Puntos: 1 | |
bueno pongo el codigo para que puedan ayudarme mejor, estaba separado pues es para hacer un tda, y lo uni todo aca, por si hay algun error de ese tema....
Código:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define INICIO "0"
#define DEST "1"
typedef struct Tcomandos {
int id;
char nombre[CARACTERES];
char params[CARACTERES];
}Tcomandos;
typedef struct TDA_ValCmd {
Tcomandos comando[max];
}TDA_ValCmd;
void mostrar_menu(void);
int seleccion(void);
//Declaracion Primitivas Privadas
void inicializar_cmd(Tcomandos* comando);
void destruir_cmd(Tcomandos* comando);
void setId(TDA_ValCmd* tda, int pos, int id);
void setNom(TDA_ValCmd* tda, int pos, const char* nombre);
void setParam(TDA_ValCmd* tda, int pos, const char* parametro);
int getId(TDA_ValCmd* tda, int pos);
char* getNom(TDA_ValCmd* tda, int pos);
char* getParam(TDA_ValCmd* tda, int pos);
int vacio(TDA_ValCmd* tda);
void buscarPosId(TDA_ValCmd* tda, int id, int *pos, int *error);
//Implementacion Primitivas Publicas
int ValCmd_crear(TDA_ValCmd* tda)
{
Tcomandos comando[max];
inicializar_cmd(comando);
printf("en crear Comando[3].id = %d\n",comando[3].id);
printf("en crear Comando[3].nombre = %s\n",comando[3].nombre);
printf("en crear Comando[3].params = %s\n",comando[3].params);
tda =(TDA_ValCmd * )malloc(sizeof(TDA_ValCmd));
if (tda == NULL)
return 0; // no hubo espacio en memoria
else return 1; // hubo espacio en memoria
}
int ValCmd_agregar_def_cmd(TDA_ValCmd* tda, int id, char* nombre, char* params)
{
int i=0, idAgr=0;
printf("voy a obtuvener el id\n"); system("pause");
printf("tda->comando[0].id = %d\n", tda->comando[i].id);system("pause");
idAgr = tda->comando[i].id;
printf("obtuvo el id\n"); system("pause");
// busco el 1er lugar que este vacio e inserto al final
// i < mas es l rango para que i no se pase si el vector esta lleno
/* el idAgr debe ser distinto a id, ya que el id debe ser unico, entonces si
son iguales devuelve 0 */
while (( idAgr!=0) && (i < max) && (idAgr!=id))
{
i++;
if (i == max) // si esta lleno
return 0; // no se pudo crear
idAgr = tda->comando[i].id;
}
if (idAgr == id) // si ese id ya existe
return 0; // no se pudo crear
else
{
setId(tda, i, id);
setNom(tda, i, nombre);
setParam(tda,i, params);
}
return 1; // se pudo crear
}
int ValCmd_obtener_def_cmd(TDA_ValCmd* tda, int id, char* nombre, char* params)
{
int error;
int pos;
if (!vacio(tda)) // si el tda no esta vacio
{
buscarPosId(tda, id, &pos, &error); // busca la posicion del id
if (error == 0) // si no hubo error
{
nombre = getNom(tda, pos);
params = getParam(tda, pos);
}
else return 0; // no se pudo obtener el id
}
else return 0; // no se pudo obtener el id
return 1; // se pudo obtener el id
}
int ValCmd_obtener_id_cmd (TDA_ValCmd* tda,int id, char* nombre)
{
int pos;
char* nomEnc;
if(!vacio(tda))
{
pos = 0;
do {
nomEnc = getNom(tda,pos);
if (nomEnc==nombre)
{ id=getId(tda,pos);
return 1;}
else if (pos < max) pos++;
}
while ((pos<=max)&&(nomEnc!=nombre));
if (nomEnc!=nombre) return 0;
} else return 0;
}
int Val_Cmd_borrar_def_cmd(TDA_ValCmd* tda,int id)
{
int pos;
int IdEnc;
if(!vacio(tda))
{pos=0;
do
{IdEnc = getId(tda,pos);
if (IdEnc == id )
{setId(tda,pos,-1);
setNom(tda,pos,INICIO);
setParam(tda,pos,INICIO);
return 1;}
else if (pos < max) pos++;
}
while ((pos <= max)&&(IdEnc!=id));
if (IdEnc!=id) return 0;
} else return 0;
}
void ValCmd_destruir(TDA_ValCmd* tda)
{
Tcomandos comando[max];
destruir_cmd(comando);
printf("en destruir Comando[3].id = %d\n",comando[3].id);
printf("en crear Comando[3].nombre = %s\n",comando[3].nombre);
printf("en crear Comando[3].params = %s\n",comando[3].params);
free(tda);
}
// Implementacion Primitivas Privadas by Cristian
void inicializar_cmd(Tcomandos* comando)
{
int i;
for (i=0; i<=max; i++)
{
comando[i].id=0;
strcpy(comando[i].nombre,INICIO);
strcpy(comando[i].params,INICIO);
}
}
void destruir_cmd(Tcomandos* comando)
{
int i;
for(i=0; i<=max; i++)
{
comando[i].id=-1;
strcpy(comando[i].nombre,DEST);
strcpy(comando[i].params,DEST);
}
}
void setId(TDA_ValCmd *tda, int pos, int id)
{
tda->comando[pos].id = id;
}
void setNom(TDA_ValCmd* tda, int pos, const char* nombre)
{
strcpy (tda->comando[pos].nombre, nombre);
}
void setParam(TDA_ValCmd* tda, int pos, const char* parametro)
{
strcpy(tda->comando[pos].params, parametro);
}
int getId(TDA_ValCmd* tda, int pos)
{
return (tda->comando[pos].id);
}
char* getNom(TDA_ValCmd* tda, int pos)
{
return (tda->comando[pos].nombre);
}
char* getParam(TDA_ValCmd* tda, int pos)
{
return (tda->comando[pos].params);
}
int vacio(TDA_ValCmd* tda)
{
char *nombre;
char *parametro;
int id;
id = getId(tda, 0);
nombre = getNom(tda, 0);
parametro = getParam(tda, 0);
if ( (id == -1) && (nombre == INICIO) && (parametro == INICIO) )
return 1;
else return 0;
}
void buscarPosId(TDA_ValCmd* tda, int id, int *pos, int *error)
{
int i=0, idbuscar;
int encontrado=0;
*error = 0; // falso
idbuscar = getId(tda, i);
if ( idbuscar == id) // si el primero es el id que buscaba
encontrado = 1; // true
// busco el id en caso que no sea el primero
while ((i<max) && (encontrado == 0))
{
i++;
// me fijo si se paso del rango
if (i != max)
{
idbuscar = getId(tda, i);
if (idbuscar == id) // si lo encuentra
encontrado = 1; // true
}
else
*error = 1; // no existe el id a buscar (se paso de rango)
}
if ((encontrado == 1) && (*error == 0))
*pos = i;
}
int main(int argc, char* argv[])
{
TDA_ValCmd *tda;
char nombre[CARACTERES], params[CARACTERES];
int id, fin = 0, creado = 0, idAgr, i=0;
int agregado = 0;
creado = ValCmd_crear(tda);
if (creado == 1) // si se pudo crear
{
while ( fin == 0)
{
mostrar_menu();
switch (seleccion())
{
case 1:
printf(" Ingrese el Id del Comando: \n");
scanf("%d", &id);
printf(" Ingrese el Nombre del Comando: \n");
scanf("%s", nombre);
printf(" Ingrese los Parametros del Comando: \n");
scanf("%s", params);
/*agregado = ValCmd_agregar_def_cmd(tda, id, nombre, params);
if(agregado == 1)
printf(" El comando ha sido correctamente agregado\n");
else printf(" Error al agregar el comando\n");*/
/*********** ACA VIENE EL PROBLEMA *****************/
idAgr = tda->comando[i].id;
while (( idAgr!=0) && (i <= max) && (idAgr!=id))
{
i++;
if (i == max) // si esta lleno
printf("no se pudo crear\n"); // no se pudo crear
idAgr = tda->comando[i].id;
}
if (idAgr == id) // si ese id ya existe
printf("no se pudo crear\n"); // no se pudo crear
else
{
tda->comando[i].id = id;
strcpy (tda->comando[i].nombre, nombre);
strcpy(tda->comando[i].params, params);;
}
break;
case 2: printf("No disponible aun\n");
break;
case 3: printf("No disponible aun\n"); break;
case 4: fin = 1; break;
default: printf(" Opcion no valida\n");break;
}
}
ValCmd_destruir(tda);
}// fin if
// en caso de que no ha sido creado
else printf("El validador no se pudo crear \n");
system ("pause");
return 0;
}
void mostrar_menu(void)
{
printf("-------------------------------------------\n");
printf("| Menu |\n");
printf("-------------------------------------------\n");
printf("| 1 - Agragar una definicion de comando |\n");
printf("| 2 - Eliminar una definicion de comando |\n");
printf("| 3 - Validar una sentencia |\n");
printf("| 4 - Salir del programa |\n");
printf("-------------------------------------------\n");
}
int seleccion(void)
{
int op =0;
printf("| Ingrese una opcion y luego <ENTER> |\n");
printf("-------------------------------------------\n");
scanf("%d",&op);
return (op);
}
|