Ajout d'une fonction ne gardant que N coureurs, attention il faut que l'équipe soit dans l'ordre

This commit is contained in:
Yohan Boujon 2022-11-30 01:16:07 +01:00
parent ef5e12585f
commit 5609dc0309
2 changed files with 45 additions and 12 deletions

View file

@ -26,7 +26,7 @@ void allerDebut(liste * l); //mettre le poit
void allerFin(liste * l); //mettre le poiteur courant sur l'element de fin d'une liste void allerFin(liste * l); //mettre le poiteur courant sur l'element de fin d'une liste
void avancer(liste * l); //mettre le poiteur courant sur l'element suivant de la liste dans la qu'elle qu'il pointe void avancer(liste * l); //mettre le poiteur courant sur l'element suivant de la liste dans la qu'elle qu'il pointe
coureur * coureurCourant(liste * l); //rien a foutre ici coureur * coureurCourant(liste * l); //rien a foutre ici
bool effacerCoureur(liste * listeActuel,coureur * coureurSuppr);//enleve un element d'une liste a partir de l'adresse d'un courreur, sans briser le chainage bool effacerCoureur(liste * listeActuel,coureur * coureurSuppr, bool returnSuiv);//enleve un element d'une liste a partir de l'adresse d'un courreur, sans briser le chainage
bool doesCoureurExist(liste* l,coureur * c); bool doesCoureurExist(liste* l,coureur * c);
int effacerListe(liste * destination, liste * source); int effacerListe(liste * destination, liste * source);
int tailleListe(liste l); //retourne le nombre d'elements chaine d'une liste int tailleListe(liste l); //retourne le nombre d'elements chaine d'une liste

View file

@ -1,5 +1,6 @@
#include "../header/readfile.h" #include "../header/readfile.h"
#include "../header/liste.h" #include "../header/liste.h"
#define MAXTEAMATES 3
int main(void) int main(void)
{ {
@ -33,8 +34,12 @@ int main(void)
int * teamCount = teamsCount(tabTeam,teamsNb,l); int * teamCount = teamsCount(tabTeam,teamsNb,l);
printf("\n --- TEAMS AND TEAMS COUNT : --- \n"); printf("\n --- TEAMS AND TEAMS COUNT : --- \n");
printTeamsDetails(tabTeam,teamCount,teamsNb); printTeamsDetails(tabTeam,teamCount,teamsNb);
printlist(l);
printf("\n --- TROIS COUREURS RESTANTS --- : \n");
keepOnlyCoureur(3,&l,tabTeam,teamsNb);
printlist(l);
printf("\n --- COUREURS SUPPRIMEES --- : \n"); printf("\n --- COUREURS SUPPRIMEES --- : \n");
removeTeam(tabTeam,teamsNb,&l,teamCount,3); removeTeam(tabTeam,teamsNb,&l,teamCount,MAXTEAMATES);
printf("\n --- CLASSEMENT GENERAL : ---\n"); printf("\n --- CLASSEMENT GENERAL : ---\n");
triListe(&l,tailleListe(l)); triListe(&l,tailleListe(l));
printlist(l); printlist(l);
@ -171,7 +176,7 @@ coureur * coureurCourant(liste * l)
* @param listeActuel Liste ou l'on suppr un element * @param listeActuel Liste ou l'on suppr un element
* @param coureurSuppr le coureur qui doit etre dans l'element pour le supprimer * @param coureurSuppr le coureur qui doit etre dans l'element pour le supprimer
*/ */
bool effacerCoureur(liste * listeActuel,coureur * coureurSuppr) bool effacerCoureur(liste * listeActuel,coureur * coureurSuppr, bool returnSuiv)
{ {
if(!doesCoureurExist(listeActuel,coureurSuppr)) if(!doesCoureurExist(listeActuel,coureurSuppr))
{ {
@ -182,9 +187,9 @@ bool effacerCoureur(liste * listeActuel,coureur * coureurSuppr)
if(eParcours->coureurActuel == coureurSuppr) if(eParcours->coureurActuel == coureurSuppr)
{ {
listeActuel->courant=eParcours->suiv; listeActuel->courant=eParcours->suiv;
listeActuel->debut=eParcours->suiv; listeActuel->debut=eParcours->suiv;
} }
else{ else{
ePrevious=eParcours; ePrevious=eParcours;
eParcours=eParcours->suiv; eParcours=eParcours->suiv;
while(eParcours->coureurActuel != coureurSuppr){ while(eParcours->coureurActuel != coureurSuppr){
@ -192,7 +197,11 @@ bool effacerCoureur(liste * listeActuel,coureur * coureurSuppr)
eParcours=eParcours->suiv; eParcours=eParcours->suiv;
} }
ePrevious->suiv=eParcours->suiv; ePrevious->suiv=eParcours->suiv;
free(eParcours); free(eParcours);
if(returnSuiv)
{
listeActuel->courant=ePrevious;
}
} }
return true; return true;
} }
@ -217,7 +226,7 @@ int effacerListe(liste * destination, liste * source)
struct element * eCourant = source->debut; struct element * eCourant = source->debut;
while(eCourant->suiv != source->fin->suiv) while(eCourant->suiv != source->fin->suiv)
{ {
if(effacerCoureur(destination,eCourant->coureurActuel)) if(effacerCoureur(destination,eCourant->coureurActuel,false))
{ {
returnValue++; returnValue++;
} }
@ -426,7 +435,7 @@ void removeTeam(char ** teamNames, int sizeCol, liste * list, int * coureursInTe
if((strcmp(teamNames[i],elementCourant->coureurActuel->equipe)) == 0 && (coureursInTeams[i]<=lessThanCoureurCount)) if((strcmp(teamNames[i],elementCourant->coureurActuel->equipe)) == 0 && (coureursInTeams[i]<=lessThanCoureurCount))
{ {
afficherCoureur(elementCourant->coureurActuel); afficherCoureur(elementCourant->coureurActuel);
effacerCoureur(list,elementCourant->coureurActuel); effacerCoureur(list,elementCourant->coureurActuel,false);
elementCourant=getElementCourant(*list); elementCourant=getElementCourant(*list);
} }
} }
@ -447,6 +456,30 @@ void printTeamsDetails(char ** teamsNames, int * coureurInTeams, int teamsNB)
} }
} }
void keepOnlyCoureur(int maxCoureur, liste * list, char ** teamNames, int sizeCol)
{
int k=0,j=0;
struct element * elementCourant = list->courant;
struct element * elementFin = list->fin;
while(elementCourant->suiv != elementFin->suiv)
{
if(strcmp(teamNames[k],elementCourant->coureurActuel->equipe) == 0)
{
if(j>=maxCoureur)
{
effacerCoureur(list,elementCourant->coureurActuel,true);
elementCourant=getElementCourant(*list);
}
j++;
}
else{
k++;
j=1;
}
elementCourant=elementCourant->suiv;
}
}
int test(void) int test(void)
{ {
coureur * c1 = creerCoureur("Paris","Simon",15,"TRAUFORE",50000); coureur * c1 = creerCoureur("Paris","Simon",15,"TRAUFORE",50000);
@ -469,7 +502,7 @@ int test(void)
ajoutListe(&l1,c6); ajoutListe(&l1,c6);
printf(" -- AJOUT LISTE, taille =%d -- \n",tailleListe(l1)); printf(" -- AJOUT LISTE, taille =%d -- \n",tailleListe(l1));
printlist(l1); printlist(l1);
effacerCoureur(&l1,c2); effacerCoureur(&l1,c2,false);
printf(" -- SUPR LISTE, taille =%d -- \n",tailleListe(l1)); printf(" -- SUPR LISTE, taille =%d -- \n",tailleListe(l1));
printlist(l1); printlist(l1);
printf(" -- INTERVERTI COUREUR 1 ET 2 DE LA LISTE -- \n"); printf(" -- INTERVERTI COUREUR 1 ET 2 DE LA LISTE -- \n");
@ -484,9 +517,9 @@ int test(void)
triListe(&l1,tailleListe(l1)); triListe(&l1,tailleListe(l1));
printlist(l1); printlist(l1);
printf(" -- SUPPRIME UN COUREUR N'EXISTANT PAS -- \n"); printf(" -- SUPPRIME UN COUREUR N'EXISTANT PAS -- \n");
effacerCoureur(&l1,c7); effacerCoureur(&l1,c7,false);
effacerCoureur(&l1,c3); effacerCoureur(&l1,c3,false);
effacerCoureur(&l1,c4); effacerCoureur(&l1,c4,false);
printf("Does c3 exists : %d\tand c4 ? : %d\n",doesCoureurExist(&l1,c3),doesCoureurExist(&l1,c4)); printf("Does c3 exists : %d\tand c4 ? : %d\n",doesCoureurExist(&l1,c3),doesCoureurExist(&l1,c4));
printlist(l1); printlist(l1);
return 0; return 0;