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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18 19 20
151  Programación / Programación C/C++ / Re: Ayuda principiante! :( en: 14 Junio 2010, 10:33 am
Una cosa , el fichero rutas.dat solo contiene un registro? por que solo lees el primero de todos , por consiguiente aunque exitan más solamente compararás el dato introducido con el primer registro , estaría bien saber la estructura del fichero antes ...


Solución posible : cargar todos lo codigos de ruta en un array , y cuando metan el código mirar si existe o no , si no , llamar a la rutina de
grabación de registros , si existe mandar el mensaje indicandolo ... espero que te sirva

Prueba los siguiente , ya verás lo bien que va

Código
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #define NOMBRE_ARCHI "c:\\rutas.dat"
  5. #define LIMPIA_BUFFER while(getchar()!='\n')
  6.  
  7.  
  8. struct rutas {
  9.   int codruta;
  10.   char cadorigen[20];
  11.   char caddestino[20];
  12.   float distancia;
  13. };
  14.  typedef struct rutas trut;
  15.  
  16.  
  17. void writeRuta();
  18. void datos_ruta () ;
  19. void imprimeRuta();
  20. void imprimeRutas();
  21. void leer_registro();
  22. void selectOpcio();
  23.  
  24. int main(){
  25. selectOpcio();
  26. }
  27.  
  28. void selectOpcio(){
  29. int opcio = 0;
  30. while(opcio !=3){
  31. printf("\nTeclee 1 para mostrar todos los registros ");
  32. printf("\nTeclee 2 para agregar uno nuevo ");
  33. printf("\nTeclee 3 para salir ");
  34. printf("\nOpcio :");
  35. scanf("%d",&opcio);
  36. LIMPIA_BUFFER;
  37. if(opcio == 1){
  38. leer_registro();
  39. }else if(opcio == 2){
  40. datos_ruta();
  41. }else if(opcio != 3){
  42. printf("\nOpcion invalida !!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n");
  43. }
  44. }
  45. }
  46. int compara_cod(int cod_buscado){
  47. FILE *pfich;
  48. trut ruta;
  49.  
  50. pfich = fopen(NOMBRE_ARCHI, "ab+");
  51.  
  52. fread(&ruta,sizeof(trut),1,pfich);
  53. while(!feof(pfich)){
  54. if(cod_buscado == ruta.codruta){
  55. return 1; //encontrado
  56. }
  57. fread(&ruta,sizeof(trut),1,pfich);
  58. }
  59. fclose(pfich);
  60. return 0;
  61. }
  62.  
  63.  
  64. void leer_registro(){
  65. FILE *pfich;
  66. trut ruta;
  67. int reg_leidos = 0;
  68.  
  69. pfich = fopen(NOMBRE_ARCHI, "ab+");
  70.  
  71. fread(&ruta,sizeof(trut),1,pfich);
  72. while(!feof(pfich)){
  73. imprimeRuta(ruta);
  74. fread(&ruta,sizeof(trut),1,pfich);
  75. reg_leidos++;
  76. }
  77. printf("\n\n Numero de registros leidos =%d \n\n",reg_leidos);
  78. fclose(pfich);
  79. }
  80.  
  81.  
  82. void imprimeRutas(trut ruta[], int size){
  83. int cont = 0;
  84. for(cont ; cont < size ; cont++){
  85. imprimeRuta(ruta[cont]);
  86. }
  87. }
  88. void imprimeRuta(trut ruta){
  89. printf("\n Cod:%d Origen:%s  Destino:%s  Distancia:%f",ruta.codruta, ruta.cadorigen , ruta.caddestino, ruta.distancia);
  90. }
  91. void writeRuta(){
  92. trut rutas[2] ;
  93. FILE *fichero ;
  94. int cont = 0 ;
  95.  
  96. rutas[0].codruta = 10;
  97. strcpy(rutas[0].cadorigen , "Barcelona");
  98. strcpy(rutas[0].caddestino , "Madrid");
  99. rutas[0].distancia = 500;
  100.  
  101. rutas[1].codruta = 20;
  102. strcpy(rutas[1].cadorigen , "Murcia");
  103. strcpy(rutas[1].caddestino , "Sevilla");
  104. rutas[1].distancia = 200;
  105.  
  106. fichero = fopen(NOMBRE_ARCHI ,"ab+");
  107.  
  108. fwrite(rutas, sizeof(rutas[cont]), 2, fichero );
  109. fclose(fichero);
  110.  
  111. }
  112.  
  113.  
  114. void datos_ruta () {
  115.    int cod = 0;
  116.    int condicion=0;
  117.    trut rutas;
  118.    FILE *pfich;
  119.  
  120.  printf ("Introduzca el codigo de la ruta:");
  121.  scanf ("%d",&cod);
  122.  LIMPIA_BUFFER; // importantísimo limpiar el buffer después de leer
  123.  pfich = fopen(NOMBRE_ARCHI,"ab+");
  124.      if (pfich == NULL) {
  125.        printf ("Se ha producido un error. Imposible abrir el fichero.");
  126.        return ;
  127.      }else{
  128.          while (condicion == 0){  
  129.             if (compara_cod(cod)) {   // en este punto llamamos a la rutina que compara los códigos            
  130.                printf ("El codigo introducido ya existe.");
  131.                printf ("Por favor, introduzca un codigo diferente:");
  132.                scanf ("%d",&cod);
  133. LIMPIA_BUFFER;
  134.                //fseek(pfich,0,0);    // ya no tiene caso situarse al principio
  135.                condicion=0;          
  136.             } else  {              
  137.                 printf ("INTRODUZCA:\n\n");
  138. rutas.codruta = cod;   //te faltaba esto para que se informe el número de codigo
  139.                 printf ("*Origen del viaje:");
  140.                 scanf ("%s",&rutas.cadorigen);
  141. LIMPIA_BUFFER;
  142.                 printf ("*Destino del viaje:");
  143.                 scanf ("%s",&rutas.caddestino);
  144. LIMPIA_BUFFER;
  145.                 printf ("*Distancia a recorrer:");
  146.                 scanf ("%f",&rutas.distancia);
  147. LIMPIA_BUFFER;
  148.                 condicion=1;  
  149. fwrite (&rutas, sizeof(rutas),1,pfich);
  150. system ("cls");
  151. printf ("*La ruta ha sido creada correctamente*");    
  152.             }
  153.          }          
  154. getch ();
  155.       }
  156.  fclose(pfich);
  157. }
  158.  
  159.  
  160.  
  161.  
152  Programación / Programación C/C++ / Re: Ayuda: Local data exceeds data segment size limit en: 4 Junio 2010, 22:10 pm
Estaría bien que postearas el código para ver que puede estar dando problemas  ::)
153  Foros Generales / Sugerencias y dudas sobre el Foro / Creo que a un moderador se le ha olvidado leer las reglas del foro en: 4 Junio 2010, 14:20 pm
Lo referido es al siguiente post

http://foro.elhacker.net/programacion_cc/progrmacion_en_c-t295555.0.html

Reglas del foro , supongo que a Eternal Idol se le han olvidado ..
Citar
I.A.2. Respuestas.
   I.A.2.b. Antítesis.
    En caso de que un usuario esté en desacuerdo con el contenido de un mensaje, este deberá expresar su opinión de forma respetuosa y
   respaldando sus comentarios, en caso de que el tema sea completamente erróneo se deberá explicar el porqué, en todo caso se debe asumir buena fe.   

    El autor original del mensaje debe responder de igual forma a los mensajes dentro del tema, las opiniones de otros usuarios deberá ser
   respetada aunque no sea compartida.
154  Programación / Programación C/C++ / Re: Interpretar archivo como numero entero en: 4 Junio 2010, 13:39 pm
Me gustaría poder entender lo que quieres hacer con el archivo , lo que tengo claro es que quieres cargarlo en memoria completo , podrias usar un array para almacenarlo y hacer con él lo que necesitas , te lo has planteado ?
155  Programación / Programación C/C++ / Re: programacion en c en: 4 Junio 2010, 12:58 pm

Fíjate siempre en los mensajes que te da el compilador ...
Aquí te esta diciendo que tienes un error en la línea 8 , tienes una ñ metida en "año"  mejor intenta no usar eñes
Código
  1. lis.c:8: error: stray '\361' in program
  2. lis.c:8: error: expected ':', ',', ';', '}' or '__attribute__' before 'o'
  3.  

Este error es el más claro de todos , "\N" no es una secuencia válida de escape la correcta es "\n" , cambiala !
Código
  1. lis.c:27:9: warning: unknown escape sequence '\N'   // \N no es una secuencia de escape , prueba con \n
  2. lis.c: In function 'DarAlta':
  3.  

Esto esta relacionado con el error de la variable año de la estructura fecha
Código
  1. lis.c:46: error: 'struct fecha' has no member named 'a'
  2. lis.c:46: error: stray '\361' in program
  3. lis.c:46: error: expected ')' before 'o'
  4.  
156  Programación / Programación C/C++ / Re: Tengo el siguiente fallo en mi programa que es para calcular el factorial en: 2 Junio 2010, 17:33 pm
Primero que nada te recomiendo que utilices la etiqueta geshi para poner tu codigo.

A simple vista parece ser que tu error está en el while , en ningún momento modificas x
ni tampoco la incializas , por consiguiente nunca será 0

Código
  1. while(x!=0) // nunca se cumple men
  2.  
157  Programación / Programación C/C++ / Re: ordenar por nombre o deuda con la función qsort en: 2 Junio 2010, 15:23 pm
Pues a simple vista diria que lo único que tienes que hacer es implementar un compara para los floats ejem.
Código
  1. int compara_deuda(struct registro *r1, struct registro *r2){
  2.    return(r1->deuda >  r2->deuda ));
  3. }
  4.  

y pasarselo al qsort donde corresponda

Código
  1. qsort(punt_memoria,num_registros,sizeof(cliente),compara_deuda);
  2.  

ya me diras si te funciona ...
 Lo siguiente ordena por deuda de manera ascendente

Código
  1. /* Programa de ejemplo de gestió de memoria dinámica. El programa tomará
  2. los registros de un fichero y reservará la memoria necesaria para poder
  3. guardarlos en memoria y ordenarlos con el qsort(), una vez ordenados los
  4. volverá a guardar en el fichero */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. /* macro para leer cadenas con caracteres blanco filtrando los return y
  10.    blancos iniciales  */
  11. #define lee_cad(cad,n,fin) cad[0]=getchar(); \
  12.                            while(((int)cad[0] == 10) || ((int)cad[0] == 32)) \
  13.                               cad[0]=getchar();\
  14.                            n=0; \
  15.                            while(((int)cad[n]!= 10) && (n < fin)){ \
  16.               n++; cad[n]=getchar();} \
  17.           cad[n]='\0';
  18.  
  19. struct registro{
  20.   char nombre[50];
  21.   float deuda;
  22. };
  23.  
  24. /* Prototipos de procedimientos */
  25. int compara_float();
  26. int compara();
  27.  
  28.  
  29. int main(){
  30.  FILE * df;
  31.  struct registro cliente;
  32.  int i,fin;
  33.  char op;
  34.  int num_registros;
  35.  struct registro *punt_memoria;
  36.  
  37.  
  38.  if((df=fopen("apuestas.dat","wb")) == NULL){
  39.     printf("\nError al crear el fichero apuestas.dat\n");
  40.     exit(1);
  41.  }
  42.  
  43.  
  44.  do{
  45.     printf("Nombre del apostante: ");
  46.     lee_cad(cliente.nombre,i,50);
  47.     //scanf("%49s",cliente.nombre);
  48.     printf("Deuda? ");
  49.     scanf("%f",&cliente.deuda);
  50.     fwrite(&cliente,sizeof(cliente),1,df);
  51.     printf("Otro(0 --> No / 1 --> Sí) ");
  52.     scanf("%d",&fin);
  53.  }
  54.  while(fin!=0);
  55.  
  56.  fclose(df);
  57.  
  58.  if((df=fopen("apuestas.dat","rb")) == NULL){
  59.     printf("\nError al abrir el fichero apuestas.dat\n");
  60.     exit(1);
  61.  }
  62.  /* Para ver cuantos registros hay en el fichero, pongo el puntero
  63.   al final, obtengo su posición y divido por el tamaño del registro */
  64.  fseek(df,0,SEEK_END);
  65.  
  66.  num_registros = ftell(df)/sizeof(cliente);
  67.  
  68.  /* Reservo la memoria necesaria para estos registros */
  69.  punt_memoria = (struct registro *)calloc(num_registros, sizeof(cliente));
  70.  
  71.  /* Leo los registro del fichero y los guardo en memoria */
  72.  
  73.  rewind(df); /* Llego el descriptor de fichero al principio */
  74.  /* Leo todos los registros y los guardo en la zona reservada de memoria */
  75.  fread(punt_memoria,sizeof(cliente),num_registros,df);
  76.  
  77.  fclose(df);
  78.  /* Ordeno el vector con qsort() */
  79.  
  80.  qsort(punt_memoria,num_registros,sizeof(cliente),compara_float);  /* simplemante cambias el parámetro con el nuevo tipo de ordenación */
  81.  
  82.  /* Guarda los registros ordenados en el fichero */
  83.  if((df=fopen("apuestas.dat","wb")) == NULL){
  84.     printf("\nError al crear el fichero apuestas.dat\n");
  85.     exit(1);
  86.  }
  87.  fwrite(punt_memoria,sizeof(cliente),num_registros,df);
  88.  fclose(df);
  89.  
  90.  /* Mostrar el contenido del fichero ordenado */
  91.  if((df=fopen("apuestas.dat","rb")) == NULL){
  92.     printf("\nError al abrir el fichero apuestas.dat\n");
  93.     exit(1);
  94.  }
  95.  fread(punt_memoria,sizeof(cliente),num_registros,df);
  96.  for(i=0; i < num_registros; i++)
  97.    printf("%s  %.1f\n",(punt_memoria+i)->nombre, (punt_memoria+i)->deuda);
  98.  fclose(df);
  99.  free(punt_memoria);
  100. } /* main() */
  101.  
  102. /* La función compara usa strcmp para ordenar alfabéticamente
  103.    el fichero */
  104.  
  105. int compara(struct registro *r1, struct registro *r2){
  106.    return(strcmp(r1->nombre, r2->nombre));
  107. }
  108. int compara_float(struct registro *r1, struct registro *r2){
  109. return(r1->deuda > r2->deuda);
  110. }
  111.  
158  Programación / Programación C/C++ / Re: modificar arreglo de cadena de caracteres en: 31 Mayo 2010, 12:18 pm
A mi me paso algo parecido , mirate esto
  http://foro.elhacker.net/programacion_cc/problemas_con_funcion_tolower_del_ctype-t279250.0.html;msg1374719#msg1374719

una posible solución es la siguiente:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main() {
  6. char listado[3][10];
  7.  
  8. strcpy(listado[0], "_:\\mi_listado.txt");
  9. strcpy(listado[1], "_:\\notas.txt");
  10. strcpy(listado[2], "_:\\p.txt") ;
  11.  
  12.  
  13. int i;
  14.  
  15. for (i=0; i < 3; i++) {
  16.     listado[i][0] = 'C';
  17.     printf("%s\n",listado[i]);
  18. }
  19.  
  20.  
  21. }
  22.  
  23.  
  24.  
159  Programación / Programación C/C++ / Re: pasar float con array usando punteros - help en: 28 Mayo 2010, 11:57 am
No entiendo mucho de C++ pero en niguna de las funciones estas usando/modificando el valor de las variables que pasas como parametro a las mismas
por ejemplo en "calcular" no veo que utilices dentro de la función  ni "int *anguloprincipal" ,  ni    "int *aux",  ni  "int LIM" ......
160  Programación / Programación C/C++ / Re: Librería en: 26 Mayo 2010, 09:17 am
Pienso que sería buena idea incluir la implementación de TAD's (árboles , pilas , colas) que les parece ?
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18 19 20
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines