Ajout d'une fonction ne gardant que N coureurs, attention il faut que l'équipe soit dans l'ordre
This commit is contained in:
parent
ef5e12585f
commit
5609dc0309
2 changed files with 45 additions and 12 deletions
|
@ -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
|
||||||
|
|
49
src/liste.c
49
src/liste.c
|
@ -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))
|
||||||
{
|
{
|
||||||
|
@ -193,6 +198,10 @@ bool effacerCoureur(liste * listeActuel,coureur * coureurSuppr)
|
||||||
}
|
}
|
||||||
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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue