Número del dorsal.
Equipo.
Nombre.
Apellido.
Nacionalidad.
Tiempo acumulado.
Sobre esta información, almacenada en un fichero, se necesita realizar las operaciones siguientes:
Crear el fichero con todos los participantes.
Buscar fichas usando el dorsal para actualizar el tiempo acumulado.
Cálculo de la clasificación por equipos (suma de los tiempos de los miembros del equipo).
Ordenar el fichero según el tiempo de los corredores.
Listar el fichero por tiempos.
Listar el fichero por tiempos y equipos.
Dar de baja dorsales.
Lo que he hecho es, por un lado, crear un fichero donde doy de alta los ciclistas, busco una ficha para actualizar el tiempo y sumo todos los tiempos de los miembros. Es este:
Código C:
Ver original
#include <stdlib.h> #include <stdio.h> #include <string.h> #define LEE_CAR(c)\ c=getchar();\ while((c=='\n') || (c==' ') || (c=='\t'))\ c=getchar(); #define LEE_CAD(c,n) { int i=0;\ c[i]=getchar();\ while((c[i]=='\n') || (c[i]=='\t')) c[i]=getchar();\ while((c[i]!='\n') && (i<(n-1))){ \ i++;\ c[i]=getchar(); }\ c[i]='\0';} typedef struct{ char num_dorsal[3]; char equipo[50]; char nom[50]; char ape[50]; char nacionalidad[50]; float tiempo_acum; }ciclista; void alta_ciclista (FILE *); void modif_fich (FILE *); float total_tiempos (FILE *); int main(){ char op; FILE *pf; do{ LEE_CAR(op); switch(op){ case 'a': case 'A': {alta_ciclista(pf); break;} case 'b': case 'B': {modif_fich(pf); break;} case 't': } }while((op != 's') && (op != 'S')); if(pf != NULL) } void alta_ciclista(FILE *d){ ciclista participante; LEE_CAD(participante.equipo, 50); LEE_CAD(participante.nom, 50); LEE_CAD(participante.ape, 50); LEE_CAD(participante.nacionalidad, 50); } void modif_fich(FILE *d){ char op; char num_dorsal[3]; ciclista parti; int comp; FILE *aux; if(comp == 0){ printf("%s\n%s\n%s\n%s\n%s\n%.2f\n", parti.num_dorsal, parti.equipo, parti.nom, parti.ape, parti.nacionalidad, parti.tiempo_acum); LEE_CAR(op); if((op=='s') || (op=='S')){ } else{ } } else{ } } } float total_tiempos(FILE *d){ ciclista parti; float total=0.0; total+=parti.tiempo_acum; } return(total); }
Por otro lado, he creado otro fichero para ordenar el tiempo de los corredores:
Código C:
Ver original
#include <stdio.h> #include <stdlib.h> #include <string.h> struct ciclista{ char num_dorsal[3]; char equipo[50]; char nom[50]; char ape[50]; char nacionalidad[50]; float tiempo_acum; }; int main(int argc, char *argv[]){ void ordena_fich_tiempos(); void muestra_fich_tiempos(); ordena_fich_tiempos(argv[1]); muestra_fich_tiempos(argv[1]); } void ordena_fich_tiempos(const char *nom_fich){ FILE *pf; struct ciclista p1, p2; int fin=0; long int pos; else{ do{ if(p1.tiempo_acum >p2.tiempo_acum){ fin=1; } else{ p1=p2; } if(p1.tiempo_acum >p2.tiempo_acum){ fin=0; } } fin=0; } } }
Al compilarlo hago lo siguiente: gcc ficheros_4.c ordenar_fich_por_tiempos_4.c, pero me sale esto: In function `main':
ordenar_fich_por_tiempos_4.c:(.text+0x0): multiple definition of `main'
/tmp/ccUPh1Ba.o:ficheros_4.c:(.text+0x0): first defined here
/tmp/ccK0z4EM.o: In function `main':
ordenar_fich_por_tiempos_4.c:(.text+0x48): undefined reference to `muestra_fich_tiempos'
collect2: ld devolvió el estado de salida 1
¿Pueden ayudarme, por favor?. Gracias.