Foros del Web » Programación para mayores de 30 ;) » C/C++ »

ordenar fichero por orden alfabético

Estas en el tema de ordenar fichero por orden alfabético en el foro de C/C++ en Foros del Web. Hola, el siguiente programa da de alta ciclistas y he creado un subprograma usando el quicksort para ordenar el nombre de los equipos alfabéticamente. Quiero ...
  #1 (permalink)  
Antiguo 06/05/2010, 05:37
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 9 meses
Puntos: 0
ordenar fichero por orden alfabético

Hola, el siguiente programa da de alta ciclistas y he creado un subprograma usando el quicksort para ordenar el nombre de los equipos alfabéticamente. Quiero que me muestre por pantalla los equipos ordenados seguido del tiempo realizado por cada equipo, pero no me sale.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define NUM_EQUIPOS 4
  6.  
  7. #define LEE_CAR(c)\
  8.         c=getchar();\
  9.         while((c=='\n') || (c==' ') || (c=='\t'))\
  10.             c=getchar();
  11.  
  12. #define LEE_CAD(c,n) { int i=0; \
  13.                      c[i]=getchar();\
  14.              while((c[i]=='\n') || (c[i]=='\t')) c[i]=getchar();\
  15.              while ((c[i]!='\n') && (i < (n-1))){ \
  16.                 i++;\
  17.             c[i]=getchar(); }\
  18.              c[i]='\0'; }
  19.  
  20. typedef struct {
  21.     int dorsal;
  22.     char equipo[20];
  23.     char nom[50];
  24.     char apell[100];
  25.     char nacion[30];
  26.     double tiempo;
  27. } ciclista;
  28.  
  29. int main(){
  30.     void crear_fich();
  31.        
  32.    
  33.    
  34.         int ordenar_por_equipos(FILE *);  
  35.    
  36.        
  37.     char op;
  38.  
  39.         FILE * pf; /* Puntero al fichero */
  40.         /* Abre el fichero para trabajar con él en Lectura / Escritura */
  41.         if((pf = fopen("tour_france.dat", "rb+")) == NULL) {
  42.            /* Si no existe, ejecuta el módulo que lo cree */
  43.        crear_fich();
  44.        /* Una vez creado lo habre en lectura/escritura */
  45.            if((pf = fopen("tour_france.dat", "rb+")) == NULL) {
  46.         perror("Fichero no accesible");
  47.                 exit(3);
  48.        }
  49.         }
  50.         do {
  51.         printf("Elija opción:\n1--> Crear el fichero del Tour\n");
  52.         printf("2--> Ordenar el fichero\n 3--> Salir");
  53.                
  54.                 do{
  55.                      LEE_CAR(op);
  56.                 }while((op < '1') || (op > '3'));
  57.        
  58.         switch(op) {
  59.             case '1': { crear_fich(pf);
  60.                     /* Una vez creado lo habre en lectura/escritura */
  61.                     if((pf = fopen("tour_france.dat", "rb+")) == NULL) {
  62.                     perror("Fichero no accesible");
  63.                             exit(3);
  64.                     }
  65.                     break; }
  66.             case '2': {ordenar_por_equipos(pf); break;}
  67.                      
  68.         } /* switch */
  69.     }while (op!= '9');
  70.         if(fclose(pf) == EOF)
  71.         printf("Error al cerrar el fichero, compruebe si ha perdido información\n");
  72.         exit(0);
  73. } /* main() */
  74. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  75. void crear_fich(FILE* pf) {
  76.          char otro;
  77.          ciclista nuevo_corredor;
  78.  
  79.      if((pf = fopen("tour_france.dat", "wb")) == NULL) {
  80.         perror("Al crear el fichero de Tour de Francia");
  81.                 exit(1);
  82.          }
  83.          
  84.          /* Lectura de los ciclistas */
  85.          do {
  86.         printf("Deme el dorsal(entero): "); scanf("%d",&nuevo_corredor.dorsal);
  87.                 printf("Equipo: "); LEE_CAD(nuevo_corredor.equipo, 20);
  88.         printf("Nombre: "); LEE_CAD(nuevo_corredor.nom, 50);
  89.         printf("Apellidos: "); LEE_CAD(nuevo_corredor.apell, 100);
  90.         printf("Nacionlidad: "); LEE_CAD(nuevo_corredor.nacion, 30);
  91.                 nuevo_corredor.tiempo = 0.0;
  92.         printf("Tiempo: "); scanf("%lf",&nuevo_corredor.tiempo);
  93.                 /*Escribe el corredor en el fichero */
  94.                 fwrite(&nuevo_corredor, sizeof(ciclista),1, pf);
  95.         printf("¿Otro? (s/n) ");
  96.                 LEE_CAR(otro);
  97.     }while((otro=='s') || (otro=='S'));
  98.     if(fclose(pf) == EOF){
  99.         printf("Error al cerrar el fichero, compruebe si hay información\n");  
  100.                 exit(2);
  101.         }
  102. } /* crear_fich()*/
  103. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  104. int ordenar_por_equipos(FILE * pf){
  105.    ciclista *p;
  106.    char nom_equipo[100];
  107.    double tiempo;
  108.    int n,i;
  109.    
  110.    int ordenar();
  111.      
  112.    printf("Cuantas personas vamos a leer: ");
  113.    scanf("%d",&n);
  114.    p=(ciclista*)calloc(n,sizeof(ciclista));
  115.    
  116.    for(i=0; i < n; i++) {
  117.       printf("Nombre del equipo: ");
  118.       LEE_CAD(nom_equipo,100);
  119.       strcpy((p+i)->equipo,nom_equipo);
  120.       printf("Tiempo: ");
  121.       scanf("%lf",(p+i)->tiempo);
  122.    }  
  123.      
  124.    qsort(p,n,sizeof(ciclista),ordenar);
  125.    
  126.    for(i=0; i < n; i++)
  127.       printf("%s\t%.2lf\n",(p+i)->equipo,(p+i)->tiempo);
  128.      
  129.    exit(0);    
  130. }
  131.  
  132. int ordenar(ciclista *c1, ciclista *c2){
  133.     return(strcmp(c1->equipo, c2->equipo));
  134. }

Etiquetas: fichero, orden
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:16.