You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

236 lines
3.3 KiB

#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));
}