#include #include typedef struct Personne Personne; struct Personne { char Nom[25], Prenom[25]; int AnneeN; char Sexe; // m - Masculin, f - Féminin Personne *Pere, *Mere, *Conjoint, *FirstChild, *NextSibling; }; void setPersonne(Personne * dest, char * Nom, char * Prenom, int AnneeN, char Sexe, Personne * Pere, Personne * Mere, Personne * Conjoint, Personne * FirstChild, Personne * NextSibling) { strcpy(dest->Nom, Nom); strcpy(dest->Prenom, Prenom); dest->AnneeN=AnneeN; dest->Sexe=Sexe; dest->Pere=Pere; dest->Mere=Mere; dest->Conjoint=Conjoint; dest->FirstChild=FirstChild; dest->NextSibling=NextSibling; } void printPersonne(Personne * source) { if (source) printf("%-15s%-15s (%d-) Sexe %s\n", source->Nom, source->Prenom, source->AnneeN, source->Sexe=='m' ? "Masculin" : "Feminin"); } void printParents(Personne * source) { if (source) { printPersonne(source->Pere); printPersonne(source->Mere); } } void printGrandParents(Personne * source) { if (source) { printParents(source->Pere); printParents(source->Mere); } } void printChildren(Personne * source) { Personne *s; if (source) for(s=source->FirstChild;s;s=s->NextSibling) printPersonne(s); } void printGrandChildren(Personne * source) { Personne *s; if (source) for(s=source->FirstChild;s;s=s->NextSibling) printChildren(s); } void printCousins(Personne * source) { Personne *s; if (source && source->Pere && source->Pere->Pere) for(s=source->Pere->Pere->FirstChild;s;s=s->NextSibling) if(s!=source->Pere) printChildren(s); if (source && source->Mere && source->Mere->Pere) for(s=source->Mere->Pere->FirstChild;s;s=s->NextSibling) if(s!=source->Mere) printChildren(s); } int main() { Personne Veronique, Hugues, Marion, Charlotte, Hubert, Nathalie, Laurence, Gilles={ "BESLER", "Gilles", 1920, 'm', 0, 0, 0 , &Hugues, 0}, Helene={ "BESLER", "Helene ", 1922, 'f', 0, 0, &Gilles, &Hugues, 0}, Elisabeth={ "BESLER", "Elisabeth", 1960, 'f', &Gilles, &Helene , 0, 0, 0}; setPersonne(&Veronique, "BESLER", "Veronique", 1956, 'f', 0, 0, &Hugues, &Marion, 0); setPersonne(&Hugues, "BESLER", "Hugues", 1954, 'm', &Gilles, &Helene, &Veronique, &Marion, &Charlotte); setPersonne(&Marion, "BESLER", "Marion", 1978, 'f', &Hugues, &Veronique, 0, 0, 0); Charlotte=(Personne){ "DUBOISY", "Charlotte", 1957, 'f', &Gilles, &Helene, &Hubert, &Nathalie, &Elisabeth}; setPersonne(&Hubert, "DUBOISY", "Hubert", 1953, 'm', 0, 0, &Charlotte, &Nathalie, 0); setPersonne(&Nathalie, "DUBOISY", "Nathalie", 1975, 'f', &Hubert, &Charlotte, 0, 0, &Laurence); setPersonne(&Laurence, "DUBOISY", "Laurence", 1982, 'f', &Hubert, &Charlotte, 0, 0, 0); Gilles.Conjoint=&Helene; printPersonne(&Charlotte); printf("\n"); printParents(&Marion); printf("\n"); printGrandParents(&Marion); printf("\n"); printChildren(&Gilles); printf("\n"); printGrandChildren(&Gilles); printf("\n"); printCousins(&Marion); printf("\n"); printCousins(&Laurence); return 0; }