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