• Martes 5 de Noviembre de 2024, 15:43

Mostrar Mensajes

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
C/C++ / Re: Punteros Y Casteo
« 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 :D

2
C/C++ / Re: Punteros Y Casteo
« en: Viernes 13 de Mayo de 2005, 03:10 »
bueno muchas gracias!!   :D  
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

Código: Text
  1.  
  2.  
  3. void PR_Ejecutar( TEjecutor_T_F * ejecutor ){
  4. /*
  5. Ejecuta la cadena de tubos y filtros y genera la salida.
  6. PRE: ejecutor creado
  7. POS: Se generó la salida y no puede volver a ejecutarse.
  8. */
  9. telem Elem;
  10. TTubo entrada,salida;
  11. palabra e;
  12. int eof=FALSE,saco=TRUE,nerror=TRUE;
  13. C_Crear(&salida,sizeof(palabra));
  14. C_Crear(&entrada,sizeof(palabra));
  15.  
  16. while (eof==FALSE)
  17. {
  18. nerror=TRUE;
  19. C_Vaciar(&entrada);
  20. ls_MoverCorriente(&(ejecutor->lista_ejecutor),LS_PRIMERO);
  21. ls_ElemCorriente(ejecutor->lista_ejecutor,&Elem);
  22. saco=C_Sacar(&(ejecutor->entrada),&e);
  23. if (saco==TRUE) C_Agregar(&entrada,&e);
  24. else eof=TRUE; // No hay mas palabras
  25. while (nerror==TRUE) // Mientras no se acaben los filtros(la lista_ejecutor)
  26. {
  27. eof=Elem.filtro.fnProceso(Elem.filtro.datos_filtro,&entrada,&(Elem.salida),eof);
  28. if (eof==TRUE) nerror=FALSE;
  29. if (eof==FALSE){
  30. C_Vaciar(&entrada);
  31. copia(&entrada,&(Elem.salida));
  32. C_Vaciar(&Elem.salida);
  33. ls_ModifCorriente(&(ejecutor->lista_ejecutor),&Elem);
  34. nerror=ls_MoverCorriente(&(ejecutor->lista_ejecutor),LS_SIGUIENTE);
  35. if (nerror==TRUE)
  36. ls_ElemCorriente(ejecutor->lista_ejecutor,&Elem);
  37. else if (eof==FALSE) copia(&salida,&entrada);
  38. };
  39. };
  40. };
  41. saco=TRUE;
  42. while (saco==TRUE){
  43. saco=C_Sacar(&salida,&e);
  44. if (saco==TRUE)
  45. fprintf(ejecutor->archivo_salida,"%s\n",e);
  46. };
  47. C_Vaciar(&salida);
  48. C_Vaciar(&entrada);
  49. };
  50.  
  51.  

aca pongo 2 filtros:
Código: Text
  1.  
  2. int FE_Procesar( void * datos_filtro, TTubo * entrada, TTubo * salida, int eof ){
  3. palabra nueva;
  4. palabra palabras[max_palabras];
  5. int N;
  6.  
  7. TFiltroExtraer * Filtro = (TFiltroExtraer*) datos_filtro;
  8. if (!C_Vacia(*entrada)){
  9. C_Sacar(entrada,&nueva);
  10. separar(nueva,palabras,&N);
  11. if ((Filtro->n > N )||(Filtro->n == 0)) return FALSE;
  12. else {
  13. C_Agregar(salida,&(palabras[(Filtro->n)-1]));
  14. return FALSE;
  15. };
  16. }
  17. else
  18. if ( eof ){
  19. return TRUE;
  20. }
  21. else
  22. return FALSE;
  23. };
  24.  
  25.  
y otro

Código: Text
  1.  
  2. int FCC_Procesar( void * datos_filtro, TTubo * entrada, TTubo * salida, int eof )
  3. {
  4. palabra nueva,palabra_agregar,palabra_aux;
  5.  
  6. char cant[5];
  7.  
  8. // Casteo los datos filtro a un puntero a TFiltroContarCon
  9. TFiltroContarCon * FiltroContarCon = (TFiltroContarCon*) datos_filtro;
  10. if (!C_Vacia( *entrada )) {
  11. C_Sacar( entrada, &nueva );
  12. if ( strcmp( nueva, FiltroContarCon->ultimaPalabra ) == 0 ){ // Son iguales --> sumo contador y la emito
  13. FiltroContarCon->cantidad=(FiltroContarCon->cantidad)+1;
  14. strcpy(cant,"");
  15. itoa(FiltroContarCon->cantidad,cant,10);
  16. strcpy(palabra_agregar,"00");
  17. strcat(palabra_agregar,cant);
  18. strcat (palabra_agregar,";");
  19. strcat(palabra_agregar,nueva);
  20. C_Agregar( salida,&palabra_agregar );
  21. strcpy( FiltroContarCon->ultimaPalabra,"");
  22. strcpy( FiltroContarCon->ultimaPalabra, nueva );
  23. return FALSE;
  24. }
  25. else // Son distintas
  26. {
  27.  
  28. (FiltroContarCon->cantidad)=1;
  29. strcpy(cant,"");
  30. itoa(FiltroContarCon->cantidad,cant,10);
  31. strcpy(palabra_agregar,"00");
  32. strcat(palabra_agregar,cant);
  33. strcat (palabra_agregar,";");
  34. strcat(palabra_agregar,nueva);
  35. C_Agregar( salida,&palabra_agregar );
  36. strcpy( FiltroContarCon->ultimaPalabra,"");
  37. strcpy( FiltroContarCon->ultimaPalabra, nueva );
  38. return FALSE;
  39. }
  40. }
  41. else {
  42. if ( eof ){
  43. return TRUE;
  44. }
  45. else return FALSE;
  46. }
  47.  
  48. };
  49.  
  50.  
No creo ke lo puedas probar , pero aunke sea si ves algo raro me podes decir

muchas gracias

saludos

3
C/C++ / Re: Punteros Y Casteo
« 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

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <conio.h>
  4.  
  5. struct TFiltroExtraer {
  6.       int n;
  7. };
  8.  
  9. struct TFiltroContar {
  10.       int cantidad;
  11. };
  12.  
  13. int FE_Procesar (void *datos_filtro)
  14. {  
  15.   TFiltroExtraer *Filtro = (TFiltroExtraer*)datos_filtro;
  16.  
  17.   Filtro->n=2;
  18.   return 0;
  19. };
  20.  
  21. int FC_Procesar (void *datos_filtro)
  22. {  
  23.   TFiltroContar *Filtro = (TFiltroContar*)datos_filtro;
  24.  
  25.   Filtro->cantidad=1;
  26.   return 0;
  27. };        
  28.  
  29. main ()
  30. {
  31.     void *e;
  32.     FE_Procesar (e);
  33.     TFiltroExtraer *Filtro1 = (TFiltroExtraer*) e;
  34.     printf ("n: %i\n", Filtro1->n);
  35.     FC_Procesar (e);
  36.     TFiltroContar *Filtro = (TFiltroContar*) e;    
  37.     printf ("cantidad: %i",Filtro->cantidad);
  38.     getch();
  39. }
  40.  
  41.  

este ke hice ni siquiera corre
tambien uso devc++

4
C/C++ / Punteros Y Casteo
« en: Miércoles 11 de Mayo de 2005, 18:56 »
hola ke tal????



bueno mi problema  es ke tengo esta funcion:


Código: Text
  1.  
  2. int FE_Procesar( void * datos_filtro){  
  3.     TFiltroExtraer * Filtro = (TFiltroExtraer*) datos_filtro;
  4.  
  5. Filtro->n=2;
  6.      return FALSE;
  7.         };  
  8.  
  9.  
  10.  

en donde TFiltroExtraer es un struct con un campo que se llama n (int)

y mas abajo accedo a esta otra funcion:

Código: Text
  1.  
  2.  
  3. int FC_Procesar( void * datos_filtro){  
  4.     TFiltroContar * Filtro = (TFiltroContar*) datos_filtro;
  5.  
  6. Filtro->cantidad=1;
  7.      return FALSE;
  8.         };  
  9.  
  10.  
  11.  

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]