|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - LUCAS_S
Páginas: [1]
1
« en: Viernes 13 de Mayo de 2005, 03:23 »
GRACIASSSS!!!! SE ME OCURRIO ALGO CON LO KE ME DIJISTE DEL MALLOC Y LO SOLUCIONE! ANDA BIEN!!!!! TE AGRADESCO MUCHISIMO! SALUDOS
2
« en: Viernes 13 de Mayo de 2005, 03:10 »
bueno muchas gracias!! anda bien este programa pero en realidad tengo ke hacer algo parecido, pero no anda bien es una parte de un sistema de tubos y filtros (tubos son colas y filtros funciones), y todo se almacena en una lista simple fnProceso es un puntero a funcion, y ahi se genera el problema,: cuando entro a otro filtro distinto (otra funcion) el valor de datos_filtro (ke es un puntero a void) no alamcena lo ke debiera void PR_Ejecutar( TEjecutor_T_F * ejecutor ){ /* Ejecuta la cadena de tubos y filtros y genera la salida. PRE: ejecutor creado POS: Se generó la salida y no puede volver a ejecutarse. */ telem Elem; TTubo entrada,salida; palabra e; int eof=FALSE,saco=TRUE,nerror=TRUE; C_Crear(&salida,sizeof(palabra)); C_Crear(&entrada,sizeof(palabra)); while (eof==FALSE) { nerror=TRUE; C_Vaciar(&entrada); ls_MoverCorriente(&(ejecutor->lista_ejecutor),LS_PRIMERO); ls_ElemCorriente(ejecutor->lista_ejecutor,&Elem); saco=C_Sacar(&(ejecutor->entrada),&e); if (saco==TRUE) C_Agregar(&entrada,&e); else eof=TRUE; // No hay mas palabras while (nerror==TRUE) // Mientras no se acaben los filtros(la lista_ejecutor) { eof=Elem.filtro.fnProceso(Elem.filtro.datos_filtro,&entrada,&(Elem.salida),eof); if (eof==TRUE) nerror=FALSE; if (eof==FALSE){ C_Vaciar(&entrada); copia(&entrada,&(Elem.salida)); C_Vaciar(&Elem.salida); ls_ModifCorriente(&(ejecutor->lista_ejecutor),&Elem); nerror=ls_MoverCorriente(&(ejecutor->lista_ejecutor),LS_SIGUIENTE); if (nerror==TRUE) ls_ElemCorriente(ejecutor->lista_ejecutor,&Elem); else if (eof==FALSE) copia(&salida,&entrada); }; }; }; saco=TRUE; while (saco==TRUE){ saco=C_Sacar(&salida,&e); if (saco==TRUE) fprintf(ejecutor->archivo_salida,"%s\n",e); }; C_Vaciar(&salida); C_Vaciar(&entrada); };
aca pongo 2 filtros: int FE_Procesar( void * datos_filtro, TTubo * entrada, TTubo * salida, int eof ){ palabra nueva; palabra palabras[max_palabras]; int N; TFiltroExtraer * Filtro = (TFiltroExtraer*) datos_filtro; if (!C_Vacia(*entrada)){ C_Sacar(entrada,&nueva); separar(nueva,palabras,&N); if ((Filtro->n > N )||(Filtro->n == 0)) return FALSE; else { C_Agregar(salida,&(palabras[(Filtro->n)-1])); return FALSE; }; } else if ( eof ){ return TRUE; } else return FALSE; };
y otro int FCC_Procesar( void * datos_filtro, TTubo * entrada, TTubo * salida, int eof ) { palabra nueva,palabra_agregar,palabra_aux; char cant[5]; // Casteo los datos filtro a un puntero a TFiltroContarCon TFiltroContarCon * FiltroContarCon = (TFiltroContarCon*) datos_filtro; if (!C_Vacia( *entrada )) { C_Sacar( entrada, &nueva ); if ( strcmp( nueva, FiltroContarCon->ultimaPalabra ) == 0 ){ // Son iguales --> sumo contador y la emito FiltroContarCon->cantidad=(FiltroContarCon->cantidad)+1; strcpy(cant,""); itoa(FiltroContarCon->cantidad,cant,10); strcpy(palabra_agregar,"00"); strcat(palabra_agregar,cant); strcat (palabra_agregar,";"); strcat(palabra_agregar,nueva); C_Agregar( salida,&palabra_agregar ); strcpy( FiltroContarCon->ultimaPalabra,""); strcpy( FiltroContarCon->ultimaPalabra, nueva ); return FALSE; } else // Son distintas { (FiltroContarCon->cantidad)=1; strcpy(cant,""); itoa(FiltroContarCon->cantidad,cant,10); strcpy(palabra_agregar,"00"); strcat(palabra_agregar,cant); strcat (palabra_agregar,";"); strcat(palabra_agregar,nueva); C_Agregar( salida,&palabra_agregar ); strcpy( FiltroContarCon->ultimaPalabra,""); strcpy( FiltroContarCon->ultimaPalabra, nueva ); return FALSE; } } else { if ( eof ){ return TRUE; } else return FALSE; } };
No creo ke lo puedas probar , pero aunke sea si ves algo raro me podes decir muchas gracias saludos
3
« en: Jueves 12 de Mayo de 2005, 02:09 »
si es verdad me anda, pero el ke tengo es algo asi: en realidad es un programa mucho mas complejo, y grande, asike puede ser ke el problema este en otro lado #include <stdio.h> #include <conio.h> struct TFiltroExtraer { int n; }; struct TFiltroContar { int cantidad; }; int FE_Procesar (void *datos_filtro) { TFiltroExtraer *Filtro = (TFiltroExtraer*)datos_filtro; Filtro->n=2; return 0; }; int FC_Procesar (void *datos_filtro) { TFiltroContar *Filtro = (TFiltroContar*)datos_filtro; Filtro->cantidad=1; return 0; }; main () { void *e; FE_Procesar (e); TFiltroExtraer *Filtro1 = (TFiltroExtraer*) e; printf ("n: %i\n", Filtro1->n); FC_Procesar (e); TFiltroContar *Filtro = (TFiltroContar*) e; printf ("cantidad: %i",Filtro->cantidad); getch(); }
este ke hice ni siquiera corre tambien uso devc++
4
« en: Miércoles 11 de Mayo de 2005, 18:56 »
hola ke tal???? bueno mi problema es ke tengo esta funcion: int FE_Procesar( void * datos_filtro){ TFiltroExtraer * Filtro = (TFiltroExtraer*) datos_filtro; Filtro->n=2; return FALSE; };
en donde TFiltroExtraer es un struct con un campo que se llama n (int) y mas abajo accedo a esta otra funcion: int FC_Procesar( void * datos_filtro){ TFiltroContar * Filtro = (TFiltroContar*) datos_filtro; Filtro->cantidad=1; return FALSE; };
en donde TFiltroContar es un struct con un campo que se llama cantidad (int) el problema esta cuando salgo de la segunda funcion, el puntero datos filtro no sale con cantidad=1 sino con cantidad=9182732 (no exactamente eso pero parecido) pienso ke el problema es en el casteo.... pero no se... saben cual es el problema????? saludos
Páginas: [1]
|
|
|