diff --git a/Algo/tp/tp15/exe b/Algo/tp/tp15/exe new file mode 100755 index 0000000..772dd7c Binary files /dev/null and b/Algo/tp/tp15/exe differ diff --git a/Algo/tp/tp15/testtp15.c b/Algo/tp/tp15/testtp15.c new file mode 100644 index 0000000..9c3e56e --- /dev/null +++ b/Algo/tp/tp15/testtp15.c @@ -0,0 +1,10 @@ +#include "tp15.h" + +int main(void) +{ + printf("-------------- Jeu 1 --------------\n"); + jeu(); + printf("\n-------------- Jeu 2 --------------\n"); + jeu2(); + return 0; +} \ No newline at end of file diff --git a/Algo/tp/tp15/tp15.c b/Algo/tp/tp15/tp15.c new file mode 100644 index 0000000..827ed52 --- /dev/null +++ b/Algo/tp/tp15/tp15.c @@ -0,0 +1,235 @@ +#include "tp15.h" + +/* Exercice 1 Partie I */ + +File filenouv(void) +{ + File f; + f.t = NULL; + f.q = NULL; + return f; +} + +File adjq(File f, int x) +{ + Maillon *m; + m = (Maillon *)malloc(sizeof(Maillon)); + if(m == NULL) + { + printf("Erreur d'allocation memoire"); + exit(1); + } + m->v = x; + m->suiv = NULL; + if(vide(f)) + { + f.t = m; + f.q = m; + return f; + } + f.q->suiv = m; + f.q = m; + return f; +} + +File supt(File f) +{ + Maillon *aux; + if(vide(f)) + { + printf("opération impossible"); + exit(1); + } + if(f.t == f.q) + { + free(f.t); + return filenouv(); + } + aux = f.t; + f.t = f.t->suiv; + free(aux); + return f; +} + +bool vide(File f) +{ + return f.t == NULL && f.q == NULL; +} + +int tete(File f) +{ + if(vide(f)) + { + printf("opération impossible"); + exit(1); + } + return f.t->v; +} + +int longueur(File f) +{ + int cpt = 0; + while(f.t != NULL) + { + cpt++; + f.t = f.t->suiv; + } + return cpt; +} + +void afficher(File f) +{ + while(f.t != NULL) + { + printf("%d ", f.t->v); + f.t = f.t->suiv; + } + printf("\n"); +} + +/* Exercice 1 Partie II */ + + + +Fil filenouv2(void) +{ + Fil f; + f = NULL; + return f; +} + +Fil adjq2(Fil f, int x) +{ + Maillo *m; + m = (Maillo *)malloc(sizeof(Maillo)); + if(m == NULL) + { + printf("opération interdite"); + exit(1); + } + m->v = x; + if(vide2(f)) + { + m->suiv = m; + return m; + } + m->suiv = f->suiv; + f->suiv = m; + return m; +} + +Fil supt2(Fil f) +{ + Maillo *aux; + if(vide2(f)) + { + printf("opération interdite"); + exit(1); + } + if(f->suiv == f) + { + free(f); + return filenouv2(); + } + aux = f->suiv; + f->suiv = aux->suiv; + free(aux); + return f; +} + +bool vide2(Fil f) +{ + return f == NULL; +} + +int tete2(Fil f) +{ + if(vide2(f)) + { + printf("opération interdite"); + exit(1); + } + return f->suiv->v; +} + +int longueur2(Fil f) +{ + int cpt = 1; + Maillo *aux; + if(vide2(f)) + { + return 0; + } + aux = f->suiv; + while(aux != f) + { + cpt++; + aux = aux->suiv; + } + return cpt; +} + +void afficher2(Fil f) +{ + Maillo *m=f; + if(vide2(f)) + { + printf("opération interdite"); + return; + } + printf("%d", f->suiv->v); + while(f->suiv != m) + { + f = f->suiv; + printf(" %d", f->suiv->v); + } + printf("\n"); +} + + +/* Exercice 2 Partie I */ + +void jeu(void) +{ + File f = filenouv(); + int i, t; + for(i = 1; i <= 40; i++) + { + f = adjq(f, i); + } + while(longueur(f) > 1) + { + for(i = 1; i <= 6; i++) + { + t = tete(f); + f = supt(f); + f = adjq(f, t); + } + f = supt(f); + } + printf("Le gagnant est le joueur %d\n", tete(f)); +} + +/* Exercice 2 Partie II */ + +void jeu2(void) +{ + Fil f = filenouv2(); + int i, t; + for(i = 1; i <= 40; i++) + { + f = adjq2(f, i); + + } + while(longueur2(f) > 1) + { + for(i = 1; i <= 6; i++) + { + t = tete2(f); + f = supt2(f); + f = adjq2(f, t); + } + f = supt2(f); + } + printf("Le gagnant est le joueur %d\n", tete2(f)); +} diff --git a/Algo/tp/tp15/tp15.h b/Algo/tp/tp15/tp15.h new file mode 100644 index 0000000..585c25d --- /dev/null +++ b/Algo/tp/tp15/tp15.h @@ -0,0 +1,36 @@ +#include +#include +#include +#include + +typedef struct maillon { + int v; + struct maillon *suiv; +} Maillon; + +typedef struct { + Maillon *t; + Maillon *q; +} File; + +typedef struct maillo { + int v; + struct maillo *suiv; +} Maillo, *Fil; + +File filenouv(void); +File adjq(File f, int x); +File supt(File f); +int tete(File f); +bool vide(File f); +int longueur(File f); +void afficher(File f); +Fil filenouv2(void); +Fil adjq2(Fil f, int x); +Fil supt2(Fil f); +bool vide2(Fil f); +int tete2(Fil f); +int longueur2(Fil f); +void afficher2(Fil f); +void jeu(void); +void jeu2(void); \ No newline at end of file