#include #include #include #include"part4.h" Filechx initchx (void){// initialise une file choix a NULL Filechx f; f.kechx = NULL; f.ttchx = NULL; return f; } Filecand initcand (void){// initialise une file candidat a NULL Filecand f; f.kecand = NULL; f.ttcand = NULL; return f; } int testVideCand (Filecand f){// fonction test si la Filecand est vide return 1 sinon 0 if (f.ttcand == NULL) return 1; return 0; } int testVideChx (Filechx f){// fonction test si la Filechx est vide return 1 sinon 0 if (f.ttchx == NULL) return 1; return 0; } Candidat lireCa(FILE *fe)// lit un candidat dans un fichier { Candidat c;//candidat que l'on retournera Choix chx;//pour la création de maillons int cpt = 0;//qui servira à compter le nombre de choix fscanf(fe,"%d", c.nEtu); fgets(c.nom, 23, fe); c.nom[strlen(c.nom)-1]= '\0'; fgets(c.prenom, 23, fe); c.prenom[strlen(c.prenom)-1]= '\0'; fscanf(fe, "%f %f %f %f %d%*c", c.moymat, c.moyfr, c.moyen, c.moyspe, c.nbchx); c.lchx = init();//initialisation de la liste return c; } // FAIRE LECTURE CHOIX POUR METTRE EN PARAMETRE PLUTOT QUE LE FE Filechx enfilechx ( Filechx f , File *fe){//fonction enfile un maillon choix en fin de file Choix Maillonchx *mch; int nbchoix, i, nbcand, numCand; char nom[30], prenom[30]; float nmat, nfr, nen, nspe, nDoss; mch = (Maillonchx*) malloc ( sizeof (Maillonchx)); if ( mch == NULL ){ printf("Probleme malloc"); return -1; } fscanf ( fe , "%d %d %s %s %f %f %f %f %f %d", &nbcand, &numCand, nom, prenom, &nmat, &nfr, &nen, &nspe, &nDoss, &nbchoix ); for ( i = 0 ; i < nbchoix ; i++ ){ fscanf( fe, "%s %s %d %d", mch->chx.ville, mch->chx.dptmt, mch->chx.dec, mch->chx.valid); if ( testVideChx (f)){ f.ttchx = mch; f.kechx = mch; } else{ f.kechx->suivchx = mch; f.kechx = mch } } return f; } // FAIRE LECTURE CANDIDAT POUR METTRE EN PARALLELE Filecand enfilecand (Filecand f, FILE *fe){// fonction enfile un maillon cand en fin de file Candidat Mailloncand *mc; int nbchoix, i nbcand; mc = (Mailloncand*) malloc (sizeof (Mailloncand)); if ( mc == NULL ){ printf("probleme malloc"); return -1; } mc->cand = lireCa (fe); //fscanf(fe, "%d %d %s %s %f %f %f %f %f %d",&nbcand, &mc->cand.nEtu, mc->cand.nom, mc->cand.prenom, &mc->cand.moymat, &mc->cand.moyfr, &mc->cand.moyen, &mc->cand.moyspe, &mc->cand.noteDoss, &nbchoix); mc->suivcand = NULL; if ( testVideCand (f)){ f.ttcand = mc; f.kecand = mc; } else{ f.kecand->suivant = mc; f.kecand = mc; } return f; } int chargement (void){// chargement des files cand et chx } Choix lireC(FILE *fe)//fonction extraite de la partie 2 { Choix c; fscanf(fe, "%s%*c", c.ville); fgets(c.dptmt, 26, fe); c.dptmt[strlen(c.dptmt)-1]= '\0'; fscanf(fe, "%d %d%*c", &c.dec, &c.valid); return c; } Listechx InsertTC(Listechx list, Choix m)//Insert en tête de la liste { Maillonchx *mchx; mchx = (Maillonchx*)malloc(sizeof(Maillonchx)); if (mchx == NULL){printf("pb malloc"); exit(-1);} mchx->chx = m; mchx->suivchx = list; return mchx; } Listechx InsertC(Listechx list, Choix m)//insert globalement dans liste de choix { if (list == NULL){return InsertTC(list, m);} if (strcmp(list->chx.dptmt, m.dptmt)>0){return InsertTC(list, m);} list->suivchx = InsertC(list->suivchx, m); return list; } Listecand InsertT(Listecand list, Candidat c)//Insert en tête de la liste { Mailloncand *c1; c1 = (Mailloncand*)malloc(sizeof(Mailloncand)); if (c1 == NULL){printf("pb malloc"); exit;} c1->cand.nEtu = c.nEtu; strcpy(c1->cand.nom, c.nom); strcpy(c1->cand.prenom, c.prenom); c1->cand.moymat = c.moymat; c1->cand.moyfr = c.moyfr; c1->cand.moyen = c.moyen; c1->cand.moyspe = c.moyspe; c1->cand.noteDoss = c.noteDoss; c1->cand.nbchx = c.nbchx; c1->cand.lchx = c.lchx; c1->suivcand = list; return c1; } Listecand Insert(Listecand list, Candidat c)//insert globalement { if (list == NULL){return InsertT(list, c);} if (strcmp(list->cand.nom, c.nom)>0){return InsertT(list, c);} list->suivcand = Insert(list->suivcand, c); return list; } Listecand InsertN(Listecand list, Candidat c)//insert globalement en fonction de la note { if (list == NULL){return InsertT(list, c);} if (list->cand.noteDoss <=+ c.noteDoss){return InsertT(list, c);} list->suivcand = InsertN(list->suivcand, c); return list; } Listecand Chargementlistecandidat(FILE *fe, Listecand lC, int *nbC)// fonction de chargement de la liste des candidats { int cpt, j; fscanf(fe, "%d", nbC); for (j = 1; j <= *nbC; j++) { Candidat Ca; fscanf(fe, "%d %s%*c", &Ca.nEtu, Ca.nom); fgets(Ca.prenom, 26, fe); Ca.prenom[strlen(Ca.prenom)-1]= '\0'; fscanf(fe,"%f %f %f %f %f %d%*c", &Ca.moymat, &Ca.moyfr, &Ca.moyen, &Ca.moyspe, &Ca.noteDoss, &Ca.nbchx); Ca.lchx=NULL; for (cpt = Ca.nbchx; cpt >= 1; cpt--) { Choix c; c = lireC(fe);//lire le maillon avec la fonction plus haut Ca.lchx = InsertC(Ca.lchx, c);//insert le maillon à sa bonne place } lC = Insert(lC, Ca); } return lC; } void test (void){ FILE *fe; fe = fopen( "part4.don", "r"); if ( fe == NULL ){ printf(" probleme d'ouverture de fichier"); return -1; } }