llevo un montón de horas intentando solucionar los errores de este código y no lo con
consigo.
¿Me podéis ayudar?
Saludos.
Código:
#include <stdio.h> #include <stdlib.h> /*Declaració de constants*/ #define MAX_DRIVERS 50 #define MAX_RACES 50 /*Declaració de tipus*/ typedef enum {FALSE, TRUE} bool; typedef struct{ int idRace; float timeRace; float kmRace; } tRaceInfo; typedef struct{ int idDriver; tRaceInfo dataDriver[MAX_RACES]; int numRaces; } tDriver; typedef struct{ tDriver drivers[MAX_DRIVERS]; int numDrivers; } tChampionship; /* Predeclaració de funcions*/ void obtainReadingSequence(tRaceInfo *reading, bool *endSeq, int *idDriver); void processReadingSequence(tChampionship *championship, int idDriver, tRaceInfo reading); void findDriver(int idDrive, tChampionship *championship, int *index); void findRace(tRaceInfo reading, tDriver *driver, int *pos); void insertDriver(int idDriver, int index, tChampionship *championship); void insertRace(tRaceInfo reading, int position, tDriver *driver); void writeResult(tChampionship championship); int main() { tChampionship championship; bool endSeq; tRaceInfo reading; int idDriver; championship.numDrivers=0; endSeq = FALSE; obtainReadingSequence(&reading, &endSeq, &idDriver); while(!endSeq) { processReadingSequence(&championship, idDriver, reading); obtainReadingSequence(&reading, &endSeq, &idDriver); } writeResult(championship); //system("PAUSE"); //pause en Windows getchar(); //pause en Linux return 0; } /*accio obtainReadingSequence (sor reading: tRaceInfo, sor endSeq: boolea, sor idDriver: enter)*/ void obtainReadingSequence(tRaceInfo *reading, bool *endSeq, int *idDriver) { int aux; scanf("%d", &aux); *endSeq = (aux == 0); if(!endSeq) { idDriver=aux; scanf("%d",&reading->idRace); scanf("%f",&reading->timeRace); scanf("%f",&reading->kmRace); } } /*accio processReadingSequence (entsor championship : tChampionship, ent idDriver: enter, ent reading: tRaceInfo )*/ void processReadingSequence( tChampionship *championship, int idDriver, tRaceInfo reading) { int index; int position; findDriver(&championship, &idDriver, &index); findRace(&championship.drivers[index], &reading, &position); } //accio findDriver( ent idDriver: enter, entsor championship: tChampionship, sor index: enter ) void findDriver(int idDrive, tChampionship *championship, int *index) { index=1; bool found = FALSE; while((!found) && (index<=(championship->numDrivers))) { found=(championship->drivers[index]).idDriver>=idDriver; if (!found) { index=index+1; } } if((!found)||(championship.drivers[index].idDriver<>idDriver)) { insertDriver(&championship, index, idDriver) } } //accio findRace (ent reading: tRaceInfo, entsor driver: tDriver, sor pos: enter ) void findRace(tRaceInfo reading, tDriver *driver, int *pos) { pos=1; bool found = FALSE; while((!found) && (pos<=driver->numRaces)) { found=(driver->dataDriver[pos]).idRace>=reading.idRace; if(!found) { pos=pos+1; } } if((!found) || ((driver->dataDriver[pos]).idRace<>reading.idRace) { insertRace(&driver, pos, reading); } } //accio insertDriver(ent idDriver: enter ent index: enter,entsor championship: tChampionship, ) void insertDriver(int idDriver, int index, tChampionship *championship) { int j; for (j=championship->numDrivers; j=index;j--) { championship->drivers[j+1]=championship->drivers[j]; } (championship->drivers[index]).idDriver=idDriver; (championship->drivers[index]).numRaces=0; championship->numDrivers=championship->numDrivers+1; } //accio insertRace(ent reading : tRaceInfo , ent position : enter,entsor driver : tDriver) void insertRace(tRaceInfo reading, int position, tDriver *driver) { int j; for(j=(driver->numRaces);j=position;j--) { driver->dataDriver[j+1]=driver->dataDriver[j]; } (driver->dataDriver[position]).idRace=reading.idRace; (driver->dataDriver[position]).timeRace=reading.timeRace; (driver->dataDriver[position]).kmRace=reading.kmRace; driver->numRaces=driver->numRaces + 1; { //accio writeResult (ent championship: tChampionship) void writeResult(tChampionship championship) { int j, k; float average; for(k=1;k=championship.numDrivers;k++) { writeInteger(championship.drivers[k].idDriver); printf(" "); for(j=1;j=(championship.drivers[k].numRaces);j++) { writeInteger(championship.drivers[k].dataDriver[j].idRace); printf(" "); average=(championship.drivers[k].dataDriver[j].kmRace*60)/(championship.drivers[k].dataDriver[j].timeRace); printf("%f",average); printf(" "); } } }