Vous êtes sur la page 1sur 5

Atelier 2 Listes Circulaires (Donner le

Programme C)

Fonction CompterFilles :
int CompterFilles(struct ronde *L) {
int Nb = 0;
struct ronde *Deb = L;

while (L != NULL && L->suivant != Deb) {


if (L->E.sexe == 'F') {
Nb++;
}
L = L->suivant;
}

if (L->E.sexe == 'F') {
Nb++;
}

return Nb;
}
Procédure AjouterEnfant :
void AjouterEnfant(struct ronde **L, Enfant Enf) {
struct ronde *p, *Der, *Debut;
p = (struct ronde*)malloc(sizeof(struct ronde));
p->E = Enf;

if (*L == NULL) {
p->suivant = *L;
*L = p;
} else {
Der = *L;
while (Der != L) {
Der = Der->suivant;
}
Der->suivant = p;
p->suivant = *L;
*L = p;
}
}

Procédure SortirEnfant :
void SortirEnfant(int k, struct ronde **L) {
int i;
struct ronde *P, *Q, *Debut;

if (*L != NULL && (*L)->suivant != *L) {


i = 0;
P = *L;

while (i < k) {
i++;
Q = P;
P = P->suivant;
}

Q->suivant = P->suivant;
free(P);
*L = Q->suivant;
}
}

Fonction RetournerGagnant :
struct ronde* RetournerGagnant(int k, struct ronde *L) {
while (L != NULL && L->suivant != L) {
SortirEnfant(k, &L);
}
return L;
}

Algorithme Jeu :
#include <stdio.h>
#include <stdlib.h>

typedef struct {
char non[50];
char sexe;
} Enfant;

struct ronde {
Enfant E;
struct ronde *suivant;
};

int main() {
int n;
Enfant Enf;
struct ronde *R = NULL;

printf("donner n>1 ");


scanf("%d", &n);

for (int i = 0; i < n; i++) {


printf("donner non et sexe enfant1 ");
scanf("%s %c", Enf.non, &Enf.sexe);
AjouterEnfant(&R, Enf);
}

struct ronde *P = RetournerGagnant(3, R);


printf("enfant gagnant %s %c\n", P->E.non, P->E.sexe);

return 0;
}

Vous aimerez peut-être aussi