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

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Mensajes
Páginas: 1 ... 5 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 ... 40
191  Programación / Programación C/C++ / Libreria de grafos en: 24 Octubre 2013, 01:19 am
Saludos

Tengo que hacer un programa que me dice que cree un grafos simple( no permite mas de una arista entre dos vertices), que sean dirigido o no dirigido y que puede agregar o eliminar aristas y vertices, pero la verdad no tengo muy claro si debo de hacerlo con un arreglo de listas que es una opcion que me dijo el profesor que podia hacer, pero yo la veo muy dificil porque nunca he hecho un arreglo de listas, y tampoco se si tengo que pedirle el numero de vertices y de aristas al inicio del programa, si tengo que verificar que no este vacio el grafo antes de eliminar un vertice,si los vertices los represento como nodos las aristas tambien las tengo que crear como nodos??,puedo crear una arista aun si no tengo vertices?? esto lo tengo que validar tambien?? les agredeceria que me dieran algunas sugerencias de como empezarlo porque no tengo ni la mas minima idea

gracias
192  Programación / Programación C/C++ / Re: recorrer archivo binario en: 21 Octubre 2013, 21:39 pm
muchas gracias eferion por tu respuesta, el programa lo que hace es que me pide que le ingrese 10 registros que contengan(nombre,edad y ciudad residencia) y despues me pide un numero del 1 al 10 y me tiene que imprimir ese registro, el problema es que si le pido por ejemplo el registro numero 2 y este registro es:

marco22guadalajara, (nombre,edad, ciudad) el programa me imprime marco22guadalajar, o sea que se come la ultima letra y ya lo revise pero no entiendo por que hace esto

El programa basicamente me hace un arreglo del tamanio de cada registro para ver donde esta cada uno
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX 35
  5. #define TAM 10
  6. /*
  7.    Ampliar el programa anterior para que use un “array de structs”, de forma que se puedan tener datos de 10 personas.
  8.    Se deberán pedir  los datos de las 10 personas y guardarlos en el fichero, Después se pedirá un número del 1 al 10
  9.    y se mostrarán los datos de la persona indicada por ese número,que se deberán leer de fichero
  10.    (1 será la primera ficha, y 10 será la última). Por ejemplo,
  11.    si el usuario indica que quiere ver los datos de la persona 3 (tercera), se deberá leer las dos primeras,
  12.    ignorando su contenido, y después leer la tercera, que sí se deberá mostrar.
  13. */
  14. typedef struct datos
  15. {
  16.    char nombre[MAX];
  17.    int edad;
  18.    int tamanio;
  19.    char ciudad_residencia[MAX];
  20. }Persona;
  21.  
  22. void agregarRegistro(Persona p[],int i);
  23. void buscarRegistro(FILE *ap,int numeroRegistro,int arregloTam[]);
  24.  
  25. int main()
  26. {
  27.    Persona p[TAM];
  28.    int i,numeroRegistro,tamanioRegistro,suma = 0,arregloTam[TAM];
  29.    FILE *fd,*ap;
  30.    if((fd = fopen("F:\\gente.txt","w+"))!= NULL)
  31.    {
  32.        for(i = 0;i < TAM;i++)
  33.        {
  34.            agregarRegistro(p,i);
  35.            fprintf(fd,"%s%d%s",p[i].nombre,p[i].edad,p[i].ciudad_residencia);
  36.            fseek(fd,0,SEEK_END);
  37.            tamanioRegistro = (ftell(fd) - suma);
  38.            arregloTam[i] = tamanioRegistro;
  39.            suma+=tamanioRegistro;
  40.            system("cls");
  41.        }
  42.        fclose(fd);
  43.        if((ap = fopen("F:\\gente.txt","r"))!= NULL)
  44.        {
  45.            printf("Dame un numero(del 1 al 10): ");
  46.            scanf("%d",&numeroRegistro);
  47.            buscarRegistro(ap,numeroRegistro,arregloTam);
  48.        }
  49.        else
  50.           printf("No se pudo abrir archivo");
  51.    }
  52.    else
  53.       printf("No se pudo crear archivo");
  54.    return 0;
  55. }
  56.  
  57. void agregarRegistro(Persona p[],int i)
  58. {
  59.    char cad[10],*ptr;
  60.    printf("Dame nombre:\n");
  61.    fgets(p[i].nombre,MAX,stdin);
  62.    if((ptr = strchr(p[i].nombre,'\n'))!= NULL)
  63.       *ptr = '\0';
  64.    printf("Dame edad:\n");
  65.    fgets(cad,sizeof(cad),stdin);
  66.    sscanf(cad,"%d",&p[i].edad);
  67.    printf("Dame ciudad de residencia:\n");
  68.    fgets(p[i].ciudad_residencia,MAX,stdin);
  69.    if((ptr = strchr(p[i].ciudad_residencia,'\n'))!= NULL)
  70.       *ptr = '\0';
  71. }
  72.  
  73. void buscarRegistro(FILE *ap,int numeroRegistro,int arregloTam[])
  74. {
  75.    int i = 0,posicion,tam;
  76.    char Registro[100];
  77.    fseek(ap,0,SEEK_SET);
  78.    while(i < numeroRegistro-1)
  79.    {
  80.        posicion = arregloTam[i];
  81.        fseek(ap,posicion,SEEK_CUR);
  82.        i++;
  83.    }
  84.    tam = arregloTam[i];
  85.    fgets(Registro,tam,ap);
  86.    printf("%s",Registro);
  87. }
193  Programación / Programación C/C++ / recorrer archivo binario en: 18 Octubre 2013, 23:22 pm
Saludos

Si tengo un arreglo de estructuras(o de registros), los cuales guardo en un archivo binario, para yo poder recorrer registro por registro(tomando en cuenta que tienen diferente longitud) en un archivo binario tengo que hacerlo secuencialmente o sea caracter por caracter, o puedo ir saltando de registro en registro hasta encontrar el que busco?? tengo que poner delimitadores entre cada registro para saber donde empieza uno y donde termina otro??

gracias
194  Programación / Programación C/C++ / Re: sustituir scanf en: 17 Octubre 2013, 17:10 pm
Saludos

ya le puse que me escribiera con los fwrite, uno para cada campo porque no queria escribir bytes de mas, pero en el segundo fwrite() no me imprime el numero correcto, no se si es porque fwrite el primer argumento tiene que ser una cadena o arreglo

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX 20
  5. /*
  6.    Crear un “struct” que almacene los siguientes datos de una persona: nombre, edad, ciudad de residencia.
  7.    Pedir al usuario esos datos de una persona y guardarlos en un fichero llamado “gente.dat”, cerrar el fichero,
  8.    volverlo a abrir para lectura y mostrar los datos que se habían guardado.
  9. */
  10. typedef struct datos
  11. {
  12.    char nombre[MAX];
  13.    int edad;
  14.    char ciudad_residencia[MAX];
  15. }Persona;
  16.  
  17. void entrada(Persona *p);
  18. void mostrar(FILE *ap);
  19.  
  20. int main()
  21. {
  22.    FILE *fd,*ap;
  23.    Persona p;
  24.    if((fd = fopen("F:\\gente.txt","w"))!= NULL)
  25.    {
  26.        entrada(&p);
  27.        fwrite(p.nombre,sizeof(char),strlen(p.nombre),fd);
  28.        fwrite(&p.edad,sizeof(int),1,fd);
  29.        fwrite(p.ciudad_residencia,sizeof(char),strlen(p.ciudad_residencia),fd);
  30.        fclose(fd);
  31.        if((ap = fopen("F:\\gente.txt","r"))!= NULL);
  32.           mostrar(ap);
  33.    }
  34.    else
  35.       printf("No se pudo crear archivo");
  36.    return 0;
  37. }
  38.  
  39. void entrada(Persona *p)
  40. {
  41.    char cad[10];
  42.    printf("Dame nombre:\n");
  43.    fgets(p->nombre,MAX,stdin);
  44.    printf("Dame edad:\n");
  45.    fgets(cad,10,stdin);
  46.    sscanf(cad,"%d",&p->edad);
  47.    printf("Dame ciudad de residencia:\n");
  48.    fgets(p->ciudad_residencia,MAX,stdin);
  49.    system("cls");
  50. }
  51.  
  52. void mostrar(FILE *ap)
  53. {
  54.    int car;
  55.    while((car = fgetc(ap))!= EOF)
  56.       printf("%c",car);
  57. }
  58.  

disculpa que haga tantas preguntas, pero es que apenas estoy empezando a familiarizarme con archivos, gracias
195  Programación / Programación C/C++ / Re: sustituir scanf en: 17 Octubre 2013, 00:36 am
ya entendi en donde estaba el error, sizeof(Persona) es igual a 44 porque toma las elementos de la struct completos, otra duda, estaba leyendo en una pagina de internet y me decia que cuando estoy guardando estructuras en un archivo de texto tengo que hacerlo campo por campo, o sea que tendria que usar 3 fwrites() y cuando estoy abriendo el archivo en binario puedo hacerlo todo en un solo paso, si es asi o no?

gracias de nuevo
196  Programación / Programación C/C++ / Re: sustituir scanf en: 16 Octubre 2013, 05:10 am
una ultima pregunta, si le quiero hacer una modificacion al codigo y en vez de que me guarde los datos de la estructura en el archivo con fprintf quiero que lo haga con fwrite, ya no funciona como lo hacia con fprintf ahora me imprime basura, por que sucede esto??

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX 20
  5. /*
  6.    Crear un “struct” que almacene los siguientes datos de una persona: nombre, edad, ciudad de residencia.
  7.    Pedir al usuario esos datos de una persona y guardarlos en un fichero llamado “gente.dat”, cerrar el fichero,
  8.    volverlo a abrir para lectura y mostrar los datos que se habían guardado.
  9. */
  10. typedef struct datos
  11. {
  12.    char nombre[MAX];
  13.    int edad;
  14.    char ciudad_residencia[MAX];
  15. }Persona;
  16.  
  17. void entrada(Persona *p);
  18. void mostrar(FILE *ap);
  19.  
  20. int main()
  21. {
  22.    FILE *fd,*ap;
  23.    Persona p;
  24.    if((fd = fopen("F:\\gente.txt","w"))!= NULL)
  25.    {
  26.        entrada(&p);
  27.        fwrite(&p,sizeof(Persona),1,fd);
  28.        fclose(fd);
  29.        if((ap = fopen("F:\\gente.txt","r"))!= NULL);
  30.           mostrar(ap);
  31.    }
  32.    else
  33.       printf("No se pudo crear archivo");
  34.    return 0;
  35. }
  36.  
  37. void entrada(Persona *p)
  38. {
  39.    char cad[10];
  40.    printf("Dame nombre:\n");
  41.    fgets(p->nombre,MAX,stdin);
  42.    printf("Dame edad:\n");
  43.    fgets(cad,10,stdin);
  44.    sscanf(cad,"%d",&p->edad);
  45.    printf("Dame ciudad de residencia:\n");
  46.    fgets(p->ciudad_residencia,MAX,stdin);
  47.    system("cls");
  48. }
  49.  
  50. void mostrar(FILE *ap)
  51. {
  52.    int car;
  53.    while((car = fgetc(ap))!= EOF)
  54.       printf("%c",car);
  55. }
  56.  
197  Programación / Programación C/C++ / Re: sustituir scanf en: 15 Octubre 2013, 22:28 pm
muchas gracias Eternal Idol ya cheque el enlace que dejaste, y ya pude hacer el codigo que me tiene que ingresar datos de una estructura en un archivo, cerrarlo y despues que me imprima en pantalla los datos que se habian guardado, pero tengo otra duda, cada vez que utilizas fgets() es necesario quitarle el salto de linea '\n', se recomienda hacer eso?? y tambien en el sscanf si quiero que lo que me ingrese sea un entero no se desperdicia espacio en el array que le puse asi:

Código
  1. void entrada(Persona *p)
  2. {
  3.    char cad[10];
  4.    printf("Dame nombre:\n");
  5.    fgets(p->nombre,MAX,stdin);
  6.    printf("Dame edad:\n");
  7.    fgets(cad,10,stdin);// aqui tiene una array de 10 elementos pero solo ocupo un int
  8.    sscanf(cad,"%d",&p->edad);
  9. }

aqui esta el codigo completo

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX 20
  5. /*
  6.    Crear un “struct” que almacene los siguientes datos de una persona: nombre, edad, ciudad de residencia.
  7.    Pedir al usuario esos datos de una persona y guardarlos en un fichero llamado “gente.dat”, cerrar el fichero,
  8.    volverlo a abrir para lectura y mostrar los datos que se habían guardado.
  9. */
  10. typedef struct datos
  11. {
  12.    char nombre[MAX];
  13.    int edad;
  14.    char ciudad_residencia[MAX];
  15. }Persona;
  16.  
  17. void entrada(Persona *p);
  18. void mostrar(FILE *ap);
  19.  
  20. int main()
  21. {
  22.    FILE *fd,*ap;
  23.    Persona p;
  24.    if((fd = fopen("F:\\gente.txt","w"))!= NULL)
  25.    {
  26.        entrada(&p);
  27.        fprintf(fd,"%s\n",p.nombre);
  28.        fprintf(fd,"%d\n",p.edad);
  29.        fprintf(fd,"%s\n",p.ciudad_residencia);
  30.        fclose(fd);
  31.        if((ap = fopen("F:\\gente.txt","r"))!= NULL);
  32.           mostrar(ap);
  33.    }
  34.    else
  35.       printf("No se pudo crear archivo");
  36.    return 0;
  37. }
  38.  
  39. void entrada(Persona *p)
  40. {
  41.    char cad[10];
  42.    printf("Dame nombre:\n");
  43.    fgets(p->nombre,MAX,stdin);
  44.    printf("Dame edad:\n");
  45.    fgets(cad,10,stdin);
  46.    sscanf(cad,"%d",&p->edad);
  47.    printf("Dame ciudad de residencia:\n");
  48.    fgets(p->ciudad_residencia,MAX,stdin);
  49.    system("cls");
  50. }
  51.  
  52. void mostrar(FILE *ap)
  53. {
  54.    int car;
  55.    while((car = fgetc(ap))!= EOF)
  56.       printf("%c",car);
  57. }
  58.  
198  Programación / Programación C/C++ / Re: sustituir scanf en: 14 Octubre 2013, 19:19 pm
Saludos Eternal Idol, por lo que he entendido la funcion sscanf obtiene la entrada de un arreglo y no de un stream, entonces si yo quisiera ponerle un stdin para indicarle que va a tomar la entrada de lo que le ingrese por el teclado me va a dar error, que puedo hacer en este caso?

de antemano gracias
199  Programación / Programación C/C++ / sustituir scanf en: 12 Octubre 2013, 04:29 am
Saludos

Tengo el siguiente codigo en el que le ingresas datos a una estructura x, el programa compila correctamente pero tengo una duda, tengo entendido que cuando alternas una funcion como fgets() y scanf() te da problemas, y para esto le puse un ciclo while con un getchar(). Pero queria saber si podia sustituir el scanf por otra funcion que no me provoque basura en el buffer, para asi no tener que ponerle el while(getchar()!= '\n')

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define TAM 20
  4. #define MAX 10
  5. typedef struct datos
  6. {
  7.    char nombre[TAM];
  8.    int edad;
  9.    char ciudad_residencia[TAM];
  10. }Persona;
  11.  
  12. void entrada(Persona *p);
  13.  
  14. int main()
  15. {
  16.    Persona p;
  17.    int i;
  18.    for(i = 0;i < 10;i++)
  19.       entrada(&p);
  20.    return 0;
  21. }
  22.  
  23. void entrada(Persona *p)
  24. {
  25.    printf("Dame nombre:\n");
  26.    fgets(p->nombre,TAM,stdin);
  27.    printf("Dame edad:\n");
  28.    while(getchar()!='\n')
  29.    scanf("%d",&p->edad);
  30.    printf("Dame ciudad de residencia:\n");
  31.    fgets(p->ciudad_residencia,TAM,stdin);
  32. }
  33.  

gracias
200  Programación / Programación C/C++ / problema con strcmp en: 9 Octubre 2013, 21:54 pm
Saludos, tengo el siguiente codigo que me dice que tengo que ingresar nombres a un archivo de texto y en cuanto el usuario teclee la palabra fin termine, el problema es que el codigo no se detiene cuando le ingreso la palabra fin y no entiendo por que

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define TAM 10
  5. /*
  6.    Crea un programa que vaya leyendo las frases que el usuario teclea, y las guarde en un fichero de texto,
  7.    llamado “registroDeUsuario.txt”. Terminará cuando la frase introducida sea "fin"(esa frase no deberá guardarse en el fichero).
  8. */
  9.  
  10. int main()
  11. {
  12.    FILE *fd;
  13.    int i = 0,continuar = 1;
  14.    char nombre[TAM],cad[]= "fin",*p;
  15.    if((fd = fopen("F:\\registroDeUsuario.txt","w"))!= NULL)
  16.    {
  17.        do
  18.        {
  19.            printf("Dame el nombre %d:\n",i++);
  20.            fgets(nombre,TAM,stdin);
  21.            if((p = strchr(nombre,'\n'))!=NULL)
  22.               *p = '\0';
  23.            fwrite(nombre,sizeof(char),strlen(nombre),fd);
  24.            if(strcmp(nombre,cad) == 0)
  25.               continuar = 1;
  26.        }while(continuar);
  27.    }
  28.    else
  29.       printf("No se pudo abrir archivo");
  30.    return 0;
  31. }
  32.  

de antemano gracias



ya vi donde me equivoque, en la bandera continuar era 0 en vez de uno  :P
Páginas: 1 ... 5 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 ... 40
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines