Ajout du code de base
This commit is contained in:
parent
c6a1bd1462
commit
852d60c5a4
4 changed files with 265 additions and 0 deletions
37
coureur.c
Normal file
37
coureur.c
Normal file
|
@ -0,0 +1,37 @@
|
|||
#include "coureur.h" //inclure le fichier "coureur.h" qui contien les libs, structure et prototypes
|
||||
|
||||
// Creation d'un coureur en memoire avec recupération de son adrresse avec le parametrage de c'est different champs
|
||||
coureur * creerCoureur(char nom[],char prenom[],int dossard, char equipe[],int temps)
|
||||
{
|
||||
coureur * leCoureur = malloc(sizeof(coureur)); //initilisation taille memoire taille de structure
|
||||
|
||||
leCoureur->nom = malloc(sizeof(char)*strlen(nom)); //initilisation taille memoire 4oct*tailleChaine
|
||||
strcpy(leCoureur->nom,nom); //copy de nom(para) dans le champs nom de la structure leCoureur
|
||||
leCoureur->prenom = malloc(sizeof(char)*strlen(prenom));//initilisation taille memoire 4oct*tailleChaine
|
||||
strcpy(leCoureur->prenom,prenom); //copy de prenom(para) dans le champs prenom de la structure leCoureur
|
||||
leCoureur->equipe = malloc(sizeof(char)*strlen(equipe));//initilisation taille memoire 4oct*tailleChaine
|
||||
strcpy(leCoureur->equipe,equipe); //copy de equipe(para) dans le champs equipe de la structure leCoureur
|
||||
|
||||
leCoureur->temps=temps; //ecriture temps(para) dans le champs temps de la structure leCoureur
|
||||
leCoureur->dossard=dossard; //ecriture dossard un int dans le champs dossard de la structure leCoureur
|
||||
|
||||
return leCoureur; //retour addresse de la structure crée "leCoureur"
|
||||
}
|
||||
|
||||
|
||||
//Modifier le temps d'un coureur a partir de son adresse et d'une valeur de cumule
|
||||
void ajouterTemps(int leTemps,coureur * leCoureur)
|
||||
{
|
||||
leCoureur->temps+=leTemps; //Cumul du champ temps appartenant a la structure leCoureur avec leTemp(para) qui est un int
|
||||
}
|
||||
|
||||
//Afficher le temps d'un coureur stocker en seconde sous forme d'heures, de minutes et de secondes ( a partir de l'adresse de sa structure de définition)
|
||||
void afficherCoureur(coureur * leCoureur)
|
||||
{
|
||||
int heure,minute,seconde; //initilisation de 3 variable tampon
|
||||
heure = (int)(leCoureur->temps)/3600; //calcul d'heures qui renvoie uniquement la partie entier
|
||||
minute = (int)((leCoureur->temps-heure*3600)/60); //calcul de minutes qui renvoie uniquement la partie entier avec la prise en compte des heures soustraite en minutes
|
||||
seconde = leCoureur->temps-(heure*3600+minute*60); //calcul de seconde qui renvoie uniquement la partie entier avec la prise en compte des heures soustraite en secondes et des minutes en secondes
|
||||
|
||||
printf("Nom : %s\tPrenom : %s\tDossard : %d\tEquipe : %s\tTemps : %d:%d:%d\n",leCoureur->nom,leCoureur->prenom,leCoureur->dossard,leCoureur->equipe,heure,minute,seconde);
|
||||
}
|
17
coureur.h
Normal file
17
coureur.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
#include <stdio.h> //lib de base
|
||||
#include <stdlib.h> //lib de base
|
||||
#include <string.h> //lib de base
|
||||
#include <stdbool.h> //lib de base
|
||||
|
||||
typedef struct{ //definition de la structure coureur
|
||||
char * nom;
|
||||
char * prenom;
|
||||
int dossard;
|
||||
char * equipe;
|
||||
int temps;
|
||||
} coureur;
|
||||
|
||||
//Prototype
|
||||
coureur * creerCoureur(char nom[],char prenom[],int dossard, char equipe[],int temps);// Creation d'un coureur en memoire avec recupération de son adrresse avec le parametrage de c'est different champs
|
||||
void ajouterTemps(int leTemps,coureur * leCoureur); //Modifier le temps d'un coureur a partir de son adresse et d'une valeur de cumule
|
||||
void afficherCoureur(coureur * leCoureur); //Afficher le temps d'un coureur stocker en seconde sous forme d'heures, de minutes et de secondes ( a partir de l'adresse de sa structure de définition)
|
184
liste.c
Normal file
184
liste.c
Normal file
|
@ -0,0 +1,184 @@
|
|||
#include "liste.h"
|
||||
|
||||
int main(void)
|
||||
{
|
||||
coureur * c1 = creerCoureur("Paris","Simon",15,"TRAUFORE",50000); //creation coureur
|
||||
coureur * c2 = creerCoureur("Bougeont","Yoann",65,"MEILLEUR",99994); //creation coureur
|
||||
coureur * c3 = creerCoureur("Barakai","Obama",120,"AMERICA",372); //creation coureur
|
||||
coureur * c4 = creerCoureur("Boujon","Yohan",56,"MAISYEUR",49999); //creation coureur
|
||||
coureur * c5 = creerCoureur("Runner","Tedi",1,"JUDOOOKA",120); //creation coureur
|
||||
coureur * c6 = creerCoureur("Fatigue","Jean",69,"DODODODO",11554751); //creation coureur
|
||||
printf(" -- COUREUR -- \n");
|
||||
afficherCoureur(c1); //Afficher les champs de la structure coureur c1
|
||||
ajouterTemps(50,c1); //Ajoutee 50 seconde dans le champ temp de c1
|
||||
afficherCoureur(c1); //Afficher les champs de la structure coureur c1
|
||||
liste l1 = initListe(); //declaration de la liste l1 et initialisation
|
||||
ajoutListe(&l1,c1); //ajout d'un element contenat c1 dans liste l1(a partir de son adresse modfication a la maniere d'une variable global)
|
||||
ajoutListe(&l1,c2); //ajout d'un element contenat c2 dans liste l1(a partir de son adresse modfication a la maniere d'une variable global)
|
||||
ajoutListe(&l1,c3); //ajout d'un element contenat c3 dans liste l1(a partir de son adresse modfication a la maniere d'une variable global)
|
||||
ajoutListe(&l1,c4); //ajout d'un element contenat c4 dans liste l1(a partir de son adresse modfication a la maniere d'une variable global)
|
||||
ajoutListe(&l1,c5); //ajout d'un element contenat c5 dans liste l1(a partir de son adresse modfication a la maniere d'une variable global)
|
||||
ajoutListe(&l1,c6); //ajout d'un element contenat c6 dans liste l1(a partir de son adresse modfication a la maniere d'une variable global)
|
||||
printf(" -- AJOUT LISTE, taille =%d -- \n",tailleListe(l1));
|
||||
printlist(l1);
|
||||
effacerCoureur(&l1,c2);
|
||||
printf(" -- SUPR LISTE, taille =%d -- \n",tailleListe(l1));
|
||||
printlist(l1);
|
||||
printf(" -- INTERVERTI COUREUR 1 ET 2 DE LA LISTE -- \n");
|
||||
invertCoureur(&l1,1);
|
||||
printlist(l1);
|
||||
printf(" -- INTERVERTI COUREUR 0 ET 1 DE LA LISTE -- \n");
|
||||
invertCoureur(&l1,0);
|
||||
printlist(l1);
|
||||
printf(" -- COUREUR 2 DE LA LISTE -- \n");
|
||||
afficherCoureur(getCoureur(l1,2));
|
||||
printf(" -- TRI LISTE -- \n");
|
||||
triListe(&l1,tailleListe(l1));
|
||||
printlist(l1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct element * initElement(void)
|
||||
{
|
||||
struct element * returnElement = (struct element *)malloc(sizeof(struct element));
|
||||
returnElement->coureurActuel = creerCoureur("","",0,"",0);
|
||||
returnElement->suiv = NULL;
|
||||
return returnElement;
|
||||
}
|
||||
|
||||
liste initListe(void)
|
||||
{
|
||||
liste l;
|
||||
l.debut=initElement();
|
||||
l.fin=initElement();
|
||||
l.courant=initElement();
|
||||
return l;
|
||||
}
|
||||
|
||||
void ajoutListe(liste * listeActuel,coureur * leCoureur) //avec "leCoureur" le coureur a rajouter
|
||||
{
|
||||
struct element * elementActuel = (struct element *)malloc(sizeof(struct element)); //declaration et allocation en memoire(a l'adresse *elementActuel) d'une taille de structure element de type element (Creation element vierge de taille element)
|
||||
elementActuel->coureurActuel=leCoureur; //dans la variable elementActuel le champ coureurActuel devient leCourreur (l'element vierge est remplie avec le coureur a rajoute)
|
||||
elementActuel->suiv=listeActuel->courant; //dans la variable elementActuel le champ suiv devient le poiteur courant (l'element vierge poite sur le debut le poiteur courant (le premier element)chainage)
|
||||
listeActuel->debut=elementActuel; //le poiteur de premiere element contenue dans liste pointe sur le nouvelle element
|
||||
listeActuel->courant=elementActuel; //le poiteur courant contenue dans la liste pointe sur le nouvelle element
|
||||
}
|
||||
|
||||
void printlist(liste l)
|
||||
{
|
||||
struct element * eCourant = l.courant;
|
||||
struct element * eFin = l.fin;
|
||||
while(eCourant->suiv != eFin->suiv)
|
||||
{
|
||||
afficherCoureur(eCourant->coureurActuel);
|
||||
eCourant=eCourant->suiv;
|
||||
}
|
||||
printf("NULL \n");
|
||||
}
|
||||
|
||||
void allerDebut(liste * l)
|
||||
{
|
||||
l->courant = l->debut;
|
||||
}
|
||||
|
||||
void allerFin(liste * l)
|
||||
{
|
||||
l->courant = l->fin;
|
||||
}
|
||||
|
||||
void avancer(liste * l)
|
||||
{
|
||||
l->courant = l->courant->suiv;
|
||||
}
|
||||
|
||||
coureur * coureurCourant(liste * l)//------------------------------------------------------------------------Artefacte
|
||||
{
|
||||
return l->courant->coureurActuel;
|
||||
}
|
||||
|
||||
void effacerCoureur(liste * listeActuel,coureur * coureurSuppr)
|
||||
{
|
||||
struct element * eParcours = listeActuel->courant;
|
||||
struct element * ePrevious;
|
||||
if(eParcours->coureurActuel == coureurSuppr)
|
||||
{
|
||||
listeActuel->courant=eParcours->suiv;
|
||||
listeActuel->debut=eParcours->suiv;
|
||||
}
|
||||
else{
|
||||
ePrevious=eParcours;
|
||||
eParcours=eParcours->suiv;
|
||||
while(eParcours->coureurActuel != coureurSuppr){
|
||||
ePrevious=ePrevious->suiv;
|
||||
eParcours=eParcours->suiv;
|
||||
}
|
||||
ePrevious->suiv=eParcours->suiv;
|
||||
free(eParcours);
|
||||
}
|
||||
}
|
||||
|
||||
int tailleListe(liste l)
|
||||
{
|
||||
int returnValue=0;
|
||||
struct element * elementActuel = l.courant;
|
||||
while(elementActuel->suiv != l.fin->suiv)
|
||||
{
|
||||
returnValue++;
|
||||
elementActuel=elementActuel->suiv;
|
||||
};
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
coureur * getCoureur(liste l,int nb)
|
||||
{
|
||||
struct element * elementCourant = l.courant;
|
||||
for(int i=0;i<nb;i++)
|
||||
{
|
||||
elementCourant=elementCourant->suiv;
|
||||
}
|
||||
return elementCourant->coureurActuel;
|
||||
}
|
||||
|
||||
void invertCoureur(liste * l,int nb)
|
||||
{
|
||||
struct element * elementCourant = l->courant;
|
||||
struct element * elementPrecedent = (struct element *)(malloc(sizeof(struct element)));
|
||||
for(int i=0;i<nb;i++)
|
||||
{
|
||||
elementPrecedent = elementCourant;
|
||||
elementCourant=elementCourant->suiv;
|
||||
}
|
||||
struct element * elementSuivant = elementCourant->suiv;
|
||||
elementCourant->suiv=elementSuivant->suiv;
|
||||
elementSuivant->suiv=elementCourant;
|
||||
if(nb==0)
|
||||
{
|
||||
l->courant=elementSuivant;
|
||||
l->debut=l->courant;
|
||||
}
|
||||
else{
|
||||
elementPrecedent->suiv = elementSuivant;
|
||||
l->courant=l->debut;
|
||||
}
|
||||
}
|
||||
|
||||
void triListe(liste * l,int taille)
|
||||
{
|
||||
bool tabOrdered = true;
|
||||
for(int i=taille-1;i>1;i--)
|
||||
{
|
||||
for(int j=0;j<=i-1;j++)
|
||||
{
|
||||
if(getCoureur(*l,j+1)->temps < getCoureur(*l,j)->temps)
|
||||
{
|
||||
invertCoureur(l,j);
|
||||
tabOrdered = false;
|
||||
}
|
||||
printlist(*l);
|
||||
}
|
||||
if(tabOrdered)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
27
liste.h
Normal file
27
liste.h
Normal file
|
@ -0,0 +1,27 @@
|
|||
#include "coureur.h" //inclure le fichier "coureur.h" qui contien les libs et la structure coureur
|
||||
|
||||
struct element{ //definition de la structure qui element qui sera encaspule/chaine
|
||||
coureur * coureurActuel; //"contient" l'adresse d'une structure coureur
|
||||
struct element * suiv; //"contient" l'adresse d'une autre strucutre element(chainage)
|
||||
};
|
||||
|
||||
typedef struct{ //definition de la structure liste qui "contient" l'encaspsulation
|
||||
struct element * debut; //"contient" un element en debut *voir init dans liste.c
|
||||
struct element * courant; //"contient"element actuel *voir init dans liste.c
|
||||
struct element * fin; //"contient"element en fin de la liste (NULL) *voir init dans liste.c
|
||||
} liste;
|
||||
|
||||
//Prototype de fonction
|
||||
struct element * initElement(void); //initialise un element en memoir qui encapsule une strucure de coureurau champs vide
|
||||
liste initListe(void); //initialise chaque element de la liste a partir de initElement
|
||||
void ajoutListe(liste * listeActuel,coureur * leCoureur); //ajoute un element contenant un courreur dans le chainage d'une liste
|
||||
void printlist(liste l); //afficher le coureur dans chaque element d'une liste
|
||||
void allerDebut(liste * l); //mettre le poiteur courant sur l'element premier 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
|
||||
coureur * coureurCourant(liste * l); //rien a foutre ici
|
||||
void effacerCoureur(liste * listeActuel,coureur * coureurSuppr);//enleve un element d'une liste a partir de l'adresse d'un courreur, sans briser le chainage
|
||||
int tailleListe(liste l); //retourne le nombre d'elements chaine d'une liste
|
||||
coureur * getCoureur(liste l,int nb); //
|
||||
void invertCoureur(liste * l,int nb); //
|
||||
void triListe(liste * l,int taille); //trie bulle des element d'une liste a partir du temps contenue dans la structure encapsule dans l'element
|
Loading…
Add table
Reference in a new issue