#include typedef struct personne personne, *pp; struct personne { char nom[30], prenom[30]; int naissance; pp pere, mere, aine, frere, conjoint; }; void aff(pp x) { if(x) printf("%s %s", x->prenom, x->nom); } int marge=0; void alinea() { printf("\n%*s",marge*3,""); } void affiche(pp x) { aff(x); printf(" (%d)", x->naissance); marge++; if(x->pere) alinea(), printf("pere : "), aff( x->pere); if(x->mere) alinea(), printf("mere : "), aff( x->mere); if(x->conjoint) alinea(), printf("conjoint : "), aff( x->conjoint); if(x->aine) alinea(), printf("premier enfant : "), aff( x->aine); if(x->frere) alinea(), printf("suivant dans la fratrie : "), aff( x->frere); marge--; printf("\n"); } void affancetre(pp x, int n) { marge++; aff(x); if(x&&n&&x->mere) alinea(), printf("mere="), affancetre(x->mere, n-1);; if(x&&n&&x->pere) alinea(), printf("pere="), affancetre(x->pere, n-1);; marge--; } void affdescendant(pp x, int n) { marge++; aff(x); if(x&&n&&x->aine) { alinea(), printf("enfants="); for(x=x->aine;x;x=x->frere) alinea(), affdescendant(x,n-1); } marge--; } int main() { personne adam ={"Faye" , "Adam" ,1930, 0 ,0 , 0,0,0}, eve ={"Dupont" , "Eve" ,1945, 0 ,0 , 0,0,&adam}, lydie ={"Faye" , "Lydie" ,1970, &adam , &eve , 0,0,0}, assia ={"Faye" , "Assia" ,1973, &adam , &eve , 0,0,0}, mamadou ={"Faye" , "Mamadou" ,1975, &adam , &eve , 0,0,0}, fatoumata={"Camara" , "Fatoumata",1985, 0 , 0 , 0,0,&mamadou}, maxime ={"Kowalski", "Maxime" ,1982, 0 , 0 , 0,0,&lydie}, rita ={"Kowalski", "Rita" ,1991, &maxime , &lydie , 0,0,0}, gerard ={"Faye" , "Gerard" ,2005, &mamadou, &fatoumata, 0,0,0}, codou ={"Faye" , "Codou" ,2009, &mamadou, &fatoumata, 0,0,0}; adam.conjoint= &eve; lydie.conjoint= &maxime; mamadou.conjoint= &fatoumata; adam.aine= eve.aine= &lydie; lydie.frere= &assia; assia.frere= &mamadou; maxime.aine= lydie.aine= &rita; mamadou.aine= fatoumata.aine= &gerard; gerard.frere= &codou; affiche(&adam); affiche(&eve); affiche(&lydie); affiche(&assia); affiche(&mamadou); affiche(&fatoumata); affiche(&maxime); affiche(&rita); affiche(&gerard); affiche(&codou); affancetre(&gerard,2); printf("\n"); affdescendant(&eve,2); printf("\n"); return 0; }