elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 ... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [21] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ... 40
201  Foros Generales / Dudas Generales / Exception en codeblocks en: 6 Octubre 2013, 05:46 am
saludos

Tengo un grave problema, no puedo abrir el codeblocks, cada vez que lo intento me aparece un mensaje que dice:

An exception has been raised, the application encountered an error at C:CB1211.... on line 237

The error message is

TinyXML error: Error document empty.
.......
......
 
a que se debe esto? que debo hacer??

gracias
202  Programación / Programación C/C++ / Re: compresor/descompresor de archivos en: 5 Octubre 2013, 04:57 am
Saludos rir3760 nunca se me hubiera ocurrido lo de la tabla de valores, lo unico que se me ocurrio fue hacer una lista doblemente ligada que es mas laboriosa, pero ps ya la empece, ahora tengo que terminarla. lo que hice fue leer el archivo al reves para que pudiera ingresar cada uno de los caracteres del archivo por la cabeza de una lista, porque si lo hubiera leido desde el principio tendria que buscar el fin de lista para ingresarle el caracter en su posicion correcta y era mas complicada por eso mejor alreves para que me ingresara en orden

el problema que tengo es que en el typedef struct el dato lo tengo declarado como caracter, para ir ingresando caracter por caracter a la lista enlazada, pero despues una vez que recorro la lista busco  ' *',' + ', '/ ' y lo encuentra le pido que me haga un nodo que contenga la palabra que le corresponde, por ejemplo si es * la palabra sera _de_ pero esta seria una cadena y en el typedef la tengo declarada como un solo caracter, un char, como puedo solucionar esto??? y el fgetc ya se que tiene que ser int en vez de char, pero si lo pusiera como int ya no me regresaria el caracter que le voy a enviar a la funcion de insertar_cabeza


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX 100
  5.  
  6. typedef struct elemento
  7. {
  8.    char dato;
  9.    struct elemento *sig;
  10.    struct elemento *ant;
  11. }Nodo;
  12.  
  13. typedef struct pal
  14. {
  15.    char *dato;
  16.    struct pal *sig;
  17.    struct pal *ant;
  18. }Palabra;
  19.  
  20. Nodo *crear_nodo(char car);
  21. Palabra *crear_palabra(char *p[],int i);
  22. void insertar_cabeza(Nodo **cabeza,char car);
  23. void recorrer_lista(Nodo *cabeza);
  24. void buscar_elemento(char signo[],char *p[],Nodo *cabeza);
  25.  
  26. int main()
  27. {
  28.    int pos;
  29.    Nodo *cabeza = NULL;
  30.    char nombre[MAX],archivo[MAX],car,opcion,*ptr,*p[]={" de "," para "," con "," desde "," al "};
  31.    char signo[]={'*','/','+','-','@'};
  32.    FILE *ap;
  33.    printf("Dame el nombre del archivo: ");
  34.    fgets(nombre,MAX,stdin);
  35.    if((ptr = strchr(nombre,'\n')) != NULL)
  36.       *ptr = '\0';
  37.    sprintf(archivo,"F:\\%s.txt",nombre);
  38.    if((fd = fopen(archivo,"r"))!= NULL)
  39.    {
  40.        printf("Elige una opcion\n");
  41.        printf("a) Comprimir archivo\n");
  42.        printf("b) Descomprimir archivo\n");
  43.        switch(opcion = getchar())
  44.        {
  45.            case 'A':case'a':
  46.              // Aqui va el compresor
  47.               break;
  48.            case 'B': case 'b':
  49.               if((ap = fopen("F:\\Archivo_producto.txt","r"))!=NULL)
  50.               {
  51.                   fseek(ap,0,SEEK_END);
  52.                   pos = ftell(ap);
  53.                   for(pos-=1;pos >= 0;pos--)
  54.                   {
  55.                       fseek(ap,pos,SEEK_SET);
  56.                       car = fgetc(ap);
  57.                       insertar_cabeza(&cabeza,car);
  58.                   }
  59.                   buscar_elemento(signo,p,cabeza);
  60.                   //recorrer_lista(cabeza);
  61.               }
  62.               else
  63.                  printf("No se pudo abrir archivo");
  64.               break;
  65.            default:
  66.               printf("La opcion no existe\n");
  67.        }
  68.    }
  69.    else
  70.       printf("No se pudo abrir el archivo");
  71.    return 0;
  72. }
  73.  
  74. Palabra *crear_palabra(char *p[],int i)
  75. {
  76.    Palabra *x;
  77.    x = (Palabra*)malloc(sizeof(Palabra));
  78.    x->dato = p[i];
  79.    x->sig = x->ant = NULL;
  80.    return x;
  81. }
  82.  
  83. Nodo *crear_nodo(char car)
  84. {
  85.    Nodo *x;
  86.    x = (Nodo*)malloc(sizeof(Nodo));
  87.    x->dato = car;
  88.    x->sig = x->ant = NULL;
  89.    return x;
  90. }
  91.  
  92. void insertar_cabeza(Nodo **cabeza,char car)
  93. {
  94.    Nodo *nuevo;
  95.    nuevo = crear_nodo(car);
  96.    nuevo->sig = *cabeza;
  97.    nuevo->ant = NULL;
  98.    *cabeza = nuevo;
  99. }
  100.  
  101. void recorrer_lista(Nodo *cabeza)
  102. {
  103.    Nodo *indice;
  104.    for(indice = cabeza;indice != NULL;indice = indice->sig)
  105.       printf("%c",indice->dato);
  106. }
  107.  
  108. void buscar_elemento(char signo[],char *p[],Nodo *cabeza)
  109. {
  110.    int i;
  111.    Nodo *indice;
  112.    Palabra *ptro;
  113.    for(i=0;i < 5;i++)
  114.    {
  115.        for(indice = cabeza;indice != NULL;indice = indice->sig)
  116.        {
  117.            if(indice->dato == signo[i])
  118.            {
  119.                ptro = crear_palabra(p,i);
  120.                printf("%s",ptro->dato);
  121.                /*
  122.                 indice->sig->ant = ptro; aqui tengo warnings
  123.                 ptro->ant = indice;
  124.                 ptro->sig = indice->sig;
  125.                 indice->sig = ptro;*/
  126.            }
  127.        }
  128.    }
  129. }
  130.  


muchas gracias y disculpa las molestias por tanta preguntadera
203  Programación / Programación C/C++ / Re: compresor/descompresor de archivos en: 4 Octubre 2013, 19:34 pm
muchas gracias rir3760 tratare de corregir eso ultimo y la variable de retorno del fgetc, una ultima duda, si tambien tengo que hacer el descompresor seria conveniente usar una lista doblemente ligada para almacenar cada uno de los caracteres del archivo en un nodo, y que cuando me aparezca un *, /, -, + ,cree otro nodo con la palabra completa y ya hacer los enlaces en la lista??? no se si me di a entender lo que quiero hacer, por ejemplo si tengo

El libro*Mary es/la clase*mate-la maestra Ana

y que despues me queden las palabras en vez de los signos.

El libro de Mary es para la clase de mate con la maestra Ana

saludos :)
204  Programación / Programación C/C++ / Re: compresor/descompresor de archivos en: 4 Octubre 2013, 16:27 pm
gracias eferion por tu respuesta, tienes razon estuve checando con varios archivos y si me di cuenta que tiene mas fallas, tal vez tenga que cambiar todo el algoritmo porque por ejemplo cuando tengo el texto:

El libro de Mary es para la clase de mate con la maestra Ana

el codigo va a fallar cuando llegue al 'para', porque el algoritmo cuando se encuentra un ' ' en el archivo lo que va a hacer es tomar los ese caracter vacio y los siguientes 5 caracteres en este caso,( 5 porque " para "tiene 6 caracteres), entonces ese para lo va a pasar por alto y no la va a hacer correctamente, entonces voy a tener que cambiar casi todo el algoritmo :s
205  Programación / Programación C/C++ / compresor/descompresor de archivos en: 3 Octubre 2013, 20:22 pm
Saludos

Tengo el siguiente codigo que me tiene que comprimir un archivo cuando aparecen las siguientes palabras: de , para , con , desde , al ,y se tienen que sustituir con los siguientes signos: *, /, + ,- ,@ y escribir el texto comprimido(con las sustituciones) en otro archivo. El programa compila correctamente y me hace lo que le pido pero tiene algunos fallos, por ejemplo cuando utilizo sizeof() en unos for para sacar el numero de elementos me aparecen warnings, y tambien por ejemplo, yo se que el tamanio del texto que voy a comprimir es de 96 caracteres, por eso lo puse asi en los arreglos, pero si mi maestra quiere que me abra un archivo mas grande o mas chico no se si funcionara, como puedo corregir esto??como puedo hacer que funcione para cualquien tamanio de texto??ahh!! y otra duda, mi profesora nos dijo algo de que no queria que el archivo se sobreescribiera y que checaramos eso, no se bien a que se referia si alguien me pudiera ayudar tambien con eso se lo agradeceria

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX 100
  5.  
  6. char ver_signos(char signo[],int i);
  7. char *comprimir_archivo(char signo[],char arreglo[]);
  8.  
  9. int main()
  10. {
  11.    int i,tam,ini;
  12.    char nombre[MAX],archivo[MAX],arreglo[96],*palabra,*producto,car,opcion,*ptr,sig;
  13.    char *p[]={" de "," para "," con "," desde "," al "};
  14.    char signo[]={'*','/','+','-','@'};
  15.    FILE *fd,*ap;
  16.    printf("Dame el nombre del archivo: ");
  17.    fgets(nombre,MAX,stdin);
  18.    if((ptr = strchr(nombre,'\n')) != NULL)
  19.       *ptr = '\0';
  20.    sprintf(archivo,"F:\\%s.txt",nombre);
  21.    ap = fopen("F:\\Archivo_producto.txt","w");
  22.    if((fd = fopen(archivo,"r"))!= NULL)
  23.    {
  24.        printf("Elige una opcion\n");
  25.        printf("a) Comprimir archivo\n");
  26.        printf("b) Descomprimir archivo\n");
  27.        switch(opcion = getchar())
  28.        {
  29.            case 'A':case'a':
  30.               fgets(arreglo,96,fd);
  31.               for(i=0;i < 5;i++)
  32.               {
  33.                   fseek(fd,0,SEEK_SET);
  34.                   while((car = fgetc(fd))!= EOF)
  35.                   {
  36.                       if(car == ' ')
  37.                       {
  38.                           ini = ftell(fd);
  39.                           tam = strlen(p[i]);
  40.                           palabra = (char*)malloc((tam+1)*sizeof(char));
  41.                           fseek(fd,-1,SEEK_CUR);
  42.                           fgets(palabra,tam+1,fd);
  43.                           if((strcmp(palabra,p[i]))== 0)
  44.                           {
  45.                               sig = ver_signos(signo,i);
  46.                               fseek(fd,ini,SEEK_SET);
  47.                               arreglo[ini-1] = sig;
  48.                           }
  49.                           free(palabra);
  50.                       }
  51.                   }
  52.               }
  53.               producto = comprimir_archivo(signo,arreglo);
  54.               fwrite(producto,sizeof(char),strlen(producto),ap);
  55.               break;
  56.               // me gustaria ponerle aqui el fwrite(arreglo,sizeof(char),strlen(arreglo),ap);
  57.            case 'B': case 'b':/*
  58.                for(i = 0;i < sizeof(signo);i++)
  59.                {
  60.                    while((car = fgetc(ap)))
  61.                }
  62.                break;*/
  63.            default:
  64.               printf("La opcion no existe\n");
  65.        }
  66.    }
  67.    else
  68.       printf("No se pudo abrir el archivo");
  69.    return 0;
  70. }
  71.  
  72. char ver_signos(char signo[],int i)
  73. {
  74.    int j;
  75.    for(j = 0;j < sizeof(signo);j++)// warning por usar sizeof
  76.    {
  77.        if(j == i)
  78.           return(signo[j]);
  79.    }
  80. }
  81.  
  82. char *comprimir_archivo(char signo[],char arreglo[])
  83. {
  84.    int tam[]={4,6,5,7,4},i,j,k;
  85.    char a[96];
  86.    for(i=0; i < sizeof(signo);i++)//warning por usar sizeof
  87.    {
  88.        for(j = 0,k = 0;j < 96;k++)
  89.        {
  90.            if(arreglo[j] == signo[i])
  91.            {
  92.                a[k] = arreglo[j];
  93.                j = j+tam[i];
  94.            }
  95.            else
  96.            {
  97.                a[k] = arreglo[j];
  98.                j++;
  99.            }
  100.        }
  101.        memset(arreglo,0,96);
  102.        strcpy(arreglo,a);
  103.    }
  104.    return arreglo;
  105. }
  106.  

Estas son las unicas fallas que le encontre al codigo, alomejor hay mas que no he notado, las sugerencias para hacerlo mas eficientes son bienvenidas

de antemano gracias
206  Programación / Programación C/C++ / Re: problema con archivos en: 2 Octubre 2013, 23:55 pm
Ahora el programa ya me hace lo que le pido, solo que tengo que corregir esa ultima falla de si el nombre buscado se encuentra al final que tambien lo contabilice, ecfisa una ultima duda, por que en tu programa pusiste la funcion feof() en dos whiles?? no es suficiente con uno??

Código
  1.  while(!feof(fd)) {
  2.      i = 0;
  3.      while(!feof(fd) && (car = fgetc(fd)) != ','  ) {
  4.        cadena = (char*)realloc(cadena,(i+1)*sizeof(char));
  5.        cadena[i++] = car;
  6.      }
  7.      cadena[i] = '\0';
  8.      if(strcmp(cadena, nombre) == 0) veces++;
  9.    }


por que cambie el codigo un poco y con este detalle me funciona pero si le quito un feof ya no funciona, le tengo que poner 2:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define TAM 20
  5.  
  6. int main()
  7. {
  8.    FILE *fd;
  9.    int i = 0,j;
  10.    char nombre[TAM],cadena[TAM],car,*ptr;
  11.    if((fd = fopen("F:\\nombre_archivo.txt","r"))!= NULL)
  12.    {
  13.        printf("Capture nombre a buscar: ");
  14.        fgets(nombre,TAM,stdin);
  15.        if((ptr = strchr(nombre,'\n')) != NULL)
  16.           *ptr = '\0';
  17.        while(!feof(fd))
  18.        {
  19.            j = 0;
  20.            while((car = fgetc(fd))!= ','&& !feof(fd))
  21.                cadena[j++] = car;
  22.            cadena[j] = '\0';
  23.            if((strcmp(cadena,nombre)) == 0)
  24.               i++;
  25.        }
  26.        printf("El nombre %s aparece %d veces en el archivo\n",nombre,i);
  27.    }
  28.    else
  29.       printf("No se pudo abrir archivo");
  30.    return 0;
  31. }
  32.  

muchas gracias a ambos por sus respuestas

saludos
207  Programación / Programación C/C++ / Re: problema con archivos en: 2 Octubre 2013, 20:57 pm
si ya entendi que cada vez que me encuentre una coma tengo que agregarle el final de linea, y tambien le cambie otras cosas al codigo como que tambien le quite el salto de linea en el fgets y cada vez que compare el nombre con el otro nombre que tengo almacenado en cadena limpio el arreglo con memset(), para que cada vez despues de la coma ingrese un nuevo nombre a un buffer limpio pero aun asi no funciona

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define TAM 10
  5.  
  6. int main()
  7. {
  8.    FILE *fd;
  9.    int i,j,tam;
  10.    char nombre[TAM],*cadena,car,*ptr;
  11.    if((fd = fopen("F:\\nombre_archivo.txt","r"))!= NULL)
  12.    {
  13.        printf("Capture nombre a buscar: ");
  14.        fgets(nombre,TAM,stdin);
  15.        if((ptr = strchr(nombre,'\n')) != NULL)
  16.           *ptr = '\0';
  17.        tam = strlen(nombre);
  18.        cadena  = (char*)malloc((tam+1)*sizeof(char));
  19.        i = 0;
  20.        while(!feof(fd))
  21.        {
  22.            j = 0;
  23.            while((car = fgetc(fd))!= ',')
  24.            {
  25.                cadena[j] = car;
  26.                j++;
  27.            }
  28.            cadena[j] = '\0';
  29.            if((strcmp(cadena,nombre)) == 0)
  30.               i++;
  31.            memset(cadena,0,tam+1);
  32.        }
  33.        printf("El nombre %s se encuentra %d veces en el archivo\n",nombre,i);
  34.    }
  35.    else
  36.       printf("No se pudo abrir archivo");
  37.    return 0;
  38. }

gracias
208  Programación / Programación C/C++ / Re: problema con archivos en: 2 Octubre 2013, 17:45 pm
Saludos eferion gracias por tu respuesta, a que te refieres con que la cadena no esta inicializada?? yo tenia entendido que en el momento de recorrer el archivo y asignarle a cadena[j] = car; caracter por caracter eso ya era inicializarla
209  Programación / Programación C/C++ / problema con archivos en: 1 Octubre 2013, 20:22 pm
Saludos tengo el siguiente programa que me lee un archivo que tiene nombres de personas separados por una coma y me pide que le ingrese un nombre y al final me tiene que imprimir el numero de veces que aparece ese nombre en el archivo solo que no me imprime la cantidad correcta

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define TAM 10
  5.  
  6. int main()
  7. {
  8.    FILE *fd;
  9.    int i = 0,j = 0,tam;
  10.    char captura[TAM],*cadena,*nombre,car;
  11.    if((fd = fopen("F:\\nombre_archivo.txt","r"))!= NULL)
  12.    {
  13.        printf("Capture nombre a buscar: ");
  14.        fgets(captura,TAM,stdin);
  15.        tam = strlen(captura);
  16.        nombre = (char*)malloc((tam+1)*sizeof(char));
  17.        cadena = (char*)malloc((tam+1)*sizeof(char));
  18.        strcpy(nombre,captura);
  19.        while((car  = fgetc(fd))!=EOF)
  20.        {
  21.            while((car = fgetc(fd))!= ',')
  22.            {
  23.                cadena[j] = car;
  24.                j++;
  25.            }
  26.            j = 0;
  27.            if((strcmp(cadena,nombre)) == 0)
  28.               i++;
  29.        }
  30.        printf("El nombre %s se encuentra %d veces en el archivo\n",nombre,i);
  31.    }
  32.    else
  33.       printf("No se pudo abrir archivo");
  34.    return 0;
  35. }
  36.  

gracias de antemano
210  Programación / Programación C/C++ / Re: problema con getc() en: 28 Septiembre 2013, 00:00 am
rir3760, estas seguro que el getc() retorna un int??, es que leia en una pagina que me regresaba el caracter leido del fichero, bueno el punto es que eso ya funciona ya lo cale y si me imprime el numero de veces que aparece un caracter. Pero ahora cambie un poco el codigo, ahora cada vez que el getc me encuentre el caracter vacio  ' ', me tiene que agarrar los siguientes 3 caracteres que le siguen  al '  ', guardarlos en un arreglo e imprimirlos, el unico problema es que no me imprime el caracter vacio pero si me imprime los 3 caracteres que le siguen, como puedo corregir esto?

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX 100
  5.  
  6. int main()
  7. {
  8.    int i,j,cont;
  9.    char nombre[MAX],archivo[MAX],*palabra,car,opcion,*ptr;
  10.    char *p[]={" de "," para "," con "," desde "," al "};
  11.    FILE *fd,*ap;
  12.    printf("Dame el nombre del archivo: ");
  13.    fgets(nombre,MAX,stdin);
  14.    if((ptr = strchr(nombre,'\n')) != NULL)
  15.       *ptr = '\0';
  16.    sprintf(archivo,"F:\\%s.txt",nombre);
  17.    ap = fopen("Archivo_producto","w");
  18.    if((fd = fopen(archivo,"r"))!= NULL)
  19.    {
  20.        printf("Elige una opcion\n");
  21.        printf("a) Comprimir archivo\n");
  22.        printf("b) Descomprimir archivo\n");
  23.        switch(opcion = getchar())
  24.        {
  25.            case 'A':case'a':
  26.               for(i=0;i < 1;i++)
  27.               {
  28.                   while((car = fgetc(fd))!= EOF)
  29.                   {
  30.                       if(car == ' ')
  31.                       {
  32.                           palabra = (char*)malloc(strlen(p[i])*sizeof(char));
  33.                           fgets(palabra,strlen(p[i]),fd);
  34.                           printf("%s\n",palabra);
  35.                       }
  36.                   }
  37.               }
  38.  
  39.               break;
  40.            default:
  41.               printf("La opcion no existe\n");
  42.        }
  43.    }
  44.    else
  45.       printf("No se pudo abrir el archivo");
  46.    return 0;
  47. }
  48.  

de antemano gracias
Páginas: 1 ... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [21] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ... 40
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines