#include typedef struct personne { char nom[30], prenom[30], sexe; int naissance; struct personne *conjoint, *aine, *sibling, *pere, *mere; } personne, *pp; void affnom(pp p) { printf("%s %s",p->prenom,p->nom); } void aff(pp p) { char *e="e"+(p->sexe!='F'); affnom(p), printf(" né%s en %d",e,p->naissance); if(p->pere) printf(" de "),affnom(p->pere); if(p->mere) printf(p->pere?" et ":" de "),affnom(p->mere); if(p->conjoint) printf(" marié%s à ",e), affnom(p->conjoint); printf(p->aine?" parent de ":" sans enfant.\n"); pp f; for(f=p->aine;f;f=f->sibling) affnom(f),printf(f->sibling?", ":".\n"); } int nbenfants(pp p) { int n=0; pp f; for(f=p->aine;f;f=f->sibling) n++; return n; } int nbfils(pp p) { int n=0; pp f; for(f=p->aine;f;f=f->sibling) n+=f->sexe=='H'; return n; } int nbfilles(pp p) { int n=0; pp f; for(f=p->aine;f;f=f->sibling) n+=f->sexe!='H'; return n; } int nbpetitsenfants(pp p) { int n=0; pp f; for(f=p->aine;f;f=f->sibling) n+=nbenfants(f); return n; } int nbpetitsfils(pp p) { int n=0; pp f; for(f=p->aine;f;f=f->sibling) n+=nbfils(f); return n; } int nbpetitesfilles(pp p) { int n=0; pp f; for(f=p->aine;f;f=f->sibling) n+=nbfilles(f); return n; } int nbnieces(pp p) { personne a; a.aine=p; return nbpetitesfilles(p->pere?:p->mere?:&a)-nbfilles(p); } int nbneveux(pp p) { personne a; a.aine=p; return nbpetitsfils(p->pere?:p->mere?:&a)-nbfils(p); } void affdescendants(pp p) { pp f; for(f=p->aine;f;f=f->sibling) affnom(f),printf(", "),affdescendants(f); } void affancetres(pp p) { if(p->pere) affnom(p->pere),printf(", "),affancetres(p->pere); if(p->mere) affnom(p->mere),printf(", "),affancetres(p->mere); } void famille(pp p) { aff(p); printf("ancètres : "), affancetres(p), printf("\n"); printf("descendants : "), affdescendants(p), printf("\n"); printf("%d fils + %d filles = %d enfants %d petits-fils + %d petites-filles = %d petits-enfants %d neveu %d nièce\n\n", nbfils(p),nbfilles(p),nbenfants(p),nbpetitsfils(p),nbpetitesfilles(p),nbpetitsenfants(p),nbneveux(p),nbnieces(p)); } int main() { personne ken = {"N'Djae" , "Kenneth" , 'H', 2018, 0 , 0 , 0 , 0, 0}; personne barbie = {"N'Djae" , "Barbara" , 'F', 2015, 0 , 0 , &ken , 0, 0}; personne pamela = {"Debache" , "Pamela" , 'F', 1995, 0 , &barbie, 0 , 0, 0}; personne romulus = {"Debache" , "Romulus" , 'H', 1971, 0 , &pamela, 0 , 0, 0}; personne jacqueline = {"Ouali" , "Jacqueline", 'F', 1976, &romulus , &pamela, 0 , 0, 0}; personne omar = {"N'Djae" , "Omar" , 'H', 1995, &pamela , &barbie, 0 , 0, 0}; personne ifouma = {"N'Djae" , "Ifouma" , 'F', 1993, 0 , 0 , &omar , 0, 0}; personne abdou = {"N'Djae" , "Abdoulaye" , 'H', 1992, 0 , 0 , &ifouma, 0, 0}; personne henriette = {"Ibraimovitch", "Henriette" , 'F', 1962, 0 , &abdou , 0 , 0, 0}; personne jules = {"N'Djae" , "Jules" , 'H', 1958, &henriette, &abdou , 0 , 0, 0}; barbie.pere = ken.pere = pamela.conjoint = &omar; barbie.mere = ken.mere = &pamela; pamela.pere = &romulus; pamela.mere = romulus.conjoint = &jacqueline; abdou.pere = ifouma.pere = omar.pere = henriette.conjoint = &jules; abdou.mere = ifouma.mere = omar.mere = &henriette; famille(&ken); famille(&barbie); famille(&pamela); famille(&romulus); famille(&jacqueline); famille(&omar); famille(&ifouma); famille(&abdou); famille(&henriette); famille(&jules); return 0; }