Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Arreglos y apuntadores

Estas en el tema de Arreglos y apuntadores en el foro de C/C++ en Foros del Web. Que tal, espero que alguien me pueda ayudar. Tengo que hacer un programa, el cual desde un archivo de texto cargue los datos de unos ...
  #1 (permalink)  
Antiguo 05/08/2008, 10:55
 
Fecha de Ingreso: agosto-2008
Mensajes: 1
Antigüedad: 16 años, 3 meses
Puntos: 0
Arreglos y apuntadores

Que tal, espero que alguien me pueda ayudar.
Tengo que hacer un programa, el cual desde un archivo de texto cargue los datos de unos codigos de operacion, estos los tengo que guardar en una tabla de dispercion utilzando listas ligadas.
Este el archivo txt

ADD,18,3
ADF,58,3
ADDR,90,2
AND,40,3
CLEAR,B4,2
COMP,28,3
COMPF,88,3
COMPR,A0,2

Este es mi codigo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>



struct TNodo{
char *neumonico, *codOper;
int longitud;
TNodo *next;
};

struct TLista{
int tam;
TNodo *cabeza;
};

TLista *tabla=(TLista*)malloc(sizeof(TLista)*61);


//---------------------------Funciones TNodo---------------------
TNodo *CrearNodo(char *neumonico, char *codigo, int longitud){
TNodo *p=(TNodo*)malloc(sizeof(TNodo));
p->neumonico=neumonico;
p->codOper=codigo;
p->longitud=longitud;
p->next=NULL;
return p;
}

TNodo *Sig(TNodo *actual){
return actual->next;
}

void Imprime (TNodo *actual) {

printf ( "%s,%s,%d", actual->neumonico,actual->codOper,actual->longitud);

}

//----------------------------------------------------------------------

//------------------------------Funciones TLista----------------------
void CrearLista(){
int i;
for(i=0;i<61;i++){
tabla[i].tam=0;
tabla[i].cabeza=NULL;
}

}

void Inserta(TNodo *nuevo,int idx){

Imprime(nuevo);
printf("+%d+",idx);
if (tabla[idx].cabeza==NULL){
tabla[idx].cabeza=nuevo;
tabla[idx].tam=1;
printf("Inicia cabeza:");
Imprime(tabla[idx].cabeza);
}
else{
printf("_%d_",tabla[idx].tam-1);
TNodo *tmp=tabla[idx].cabeza;
for (int i=0;i<tabla[idx].tam-1;i++){
Imprime(tmp);
printf("*%d*",i);
tmp=Sig(tmp);
Imprime(tmp);
}
tmp->next=nuevo;
tabla[idx].tam++;
Imprime(tmp);
Imprime(tmp->next);
}
}

void Recupera(char *neu, int idx){
int i=1;
TNodo *temporal=tabla[idx].cabeza;
Imprime(temporal);
printf("\n%s,%s\n",temporal->neumonico,neu);
while(i<tabla[idx].tam && strcmp(temporal->neumonico,neu)!=0){
temporal=Sig(temporal);
i++;
printf("\n%s,%s\n",temporal->neumonico,neu);
}
if(temporal!=NULL && strcmp(temporal->neumonico,neu)==0)
Imprime(temporal);
}
//---------------------------------------------------------------------------------

//--------------------------Calucular HASH-----------------------------------
int CalculaHash(char *neu){
int suma=0,longNeu=strlen(neu);
for(int i=0;i<longNeu;i++){
if((i%2)==0){
//printf("%c=%d,",neu[i],neu[i]);
suma+=neu[i];
}
}
return suma%61;
}
//-----------------------------------------------------------------------------------



int main(){
TNodo *node;
int H,longitud,i;
FILE *fe;
char cadena[20], *tmp,*neumonico,*codOp,c,op[]="ADF";
CrearLista();
fe=fopen("TABOP/codigos.txt","rt");

if( !fe )
printf( "El archivo no existe\n" );

//-------------------------------Guardar en memoria--------------------------
while(!feof(fe)){
c=fgetc(fe);
i=0;
while(c !='\n' && c!=EOF){
cadena[i]=c;
//printf("%d",c);
//printf("%c",cadena[i]);
c=fgetc(fe);
i++;
}
cadena[i]='\0';
// printf("%s\n",cadena);
tmp = strtok( cadena, ", \n" );
neumonico=tmp;
tmp = strtok( NULL, ", \n" );
codOp=tmp;
tmp = strtok( NULL, ", \n");
sscanf( tmp,"%d",&longitud );
node=CrearNodo(neumonico,codOp,longitud);
H=CalculaHash(neumonico);
Inserta(node,H);
printf("--%d\n",H);
Imprime(tabla[11].cabeza);
printf("------\n");
}
//--------------------------------------------------------------------------------------

//Parte que si funciona
/*-----------------------------------------------------------------------
char a[20]="ADD,18,3",b[20]="ADF,58,3\0",c[20]="ADDR,90,2",d[20]="AND,40,3",e[20]="CLEAR,B4,2",f[20]="COMP,28,3",g[20]="COMPF,88,3",h[20]="COMPR,A0,2";

tmp = strtok( a, ", \n" );
neumonico=tmp;
tmp = strtok( NULL, ", \n" );
codOp=tmp;
tmp = strtok( NULL, ", \n");
sscanf( tmp,"%d",&longitud );

node=CrearNodo(neumonico,codOp,longitud);
H=CalculaHash(neumonico);
Inserta(node,H);

printf("--%d\n",H);
tmp = strtok( b, ", \n" );
neumonico=tmp;
tmp = strtok( NULL, ", \n" );
codOp=tmp;
tmp = strtok( NULL, ", \n");
sscanf( tmp,"%d",&longitud );
node=CrearNodo(neumonico,codOp,longitud);
H=CalculaHash(neumonico);
Inserta(node,H);

printf("--%d\n",H);
tmp = strtok( c, ", \n" );
neumonico=tmp;
tmp = strtok( NULL, ", \n" );
codOp=tmp;
tmp = strtok( NULL, ", \n");
sscanf( tmp,"%d",&longitud );
node=CrearNodo(neumonico,codOp,longitud);
H=CalculaHash(neumonico);
Inserta(node,H);
printf("--%d\n",H);
tmp = strtok( d, ", \n" );
neumonico=tmp;
tmp = strtok( NULL, ", \n" );
codOp=tmp;
tmp = strtok( NULL, ", \n");
sscanf( tmp,"%d",&longitud );
node=CrearNodo(neumonico,codOp,longitud);
H=CalculaHash(neumonico);
Inserta(node,H);
printf("--%d\n",H);
tmp = strtok( e, ", \n" );
neumonico=tmp;
tmp = strtok( NULL, ", \n" );
codOp=tmp;
tmp = strtok( NULL, ", \n");
sscanf( tmp,"%d",&longitud );
node=CrearNodo(neumonico,codOp,longitud);
H=CalculaHash(neumonico);
Inserta(node,H);
printf("--%d\n",H);
tmp = strtok( f, ", \n" );
neumonico=tmp;
tmp = strtok( NULL, ", \n" );
codOp=tmp;
tmp = strtok( NULL, ", \n");
sscanf( tmp,"%d",&longitud );
node=CrearNodo(neumonico,codOp,longitud);
H=CalculaHash(neumonico);
Inserta(node,H);
printf("--%d\n",H);
tmp = strtok( g, ", \n" );
neumonico=tmp;
tmp = strtok( NULL, ", \n" );
codOp=tmp;
tmp = strtok( NULL, ", \n");
sscanf( tmp,"%d",&longitud );
node=CrearNodo(neumonico,codOp,longitud);
H=CalculaHash(neumonico);
Inserta(node,H);
printf("--%d\n",H);
tmp = strtok( h, ", \n" );
neumonico=tmp;
tmp = strtok( NULL, ", \n" );
codOp=tmp;
tmp = strtok( NULL, ", \n");
sscanf( tmp,"%d",&longitud );
node=CrearNodo(neumonico,codOp,longitud);
H=CalculaHash(neumonico);
Inserta(node,H);
printf("--%d\n",H);
---------------------------------------------------------------------------*/


fclose(fe);

id=CalculaHash(op);
// printf("-%d-\n",id);
Recupera(op,id);
// printf("\n");

free(tabla);

return 0;
}

El problema es que cuando trato de leer del archivo en teoria si me hace bien las cadenas y los tokens, pero al momento de guardarlo utilizando la funcion Insertar, no me lo hace como debe, pero si en vez de jalarlos del archivo inicializo variables con cada linea de mi archivo de texto y hago el procedimiento con los tokens y utilizo la funcion Insertar, si lo hace bien.

ya compare si es que me jala bien los caracteres del archivo, y si, todo bien, lo probe con fgets y getc, y si me forma bien mi cadena con los datos del codigo y me hace los tokens, el problema es que al insertalos en mi tabla no los inserta como debe, y cuando las inicializo si las inserta bien

AYUDA!!!!!!!!!!

Espero alguien me pueda hechar la mano

PD Utilizo el MinGW 3.4.5, no se si tenga algo que ver cn la libreria string o que pase.

Última edición por InterAVA; 05/08/2008 a las 11:01
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:48.