Mon travail serait trop compliqué à décortiquer. Il s'agit d'un projet conséquent et je bloque sur cette histoire de tableau.
J'ai laissé tombé l'histoire de créer un nouveau tableau sans doublons à partir du premier. Ça me parait inutile en y re-pensant.
Je cherche directement à stocker les données qui viennent en fait dans mon projet d'une pile de type Personne.
Mon type Personne :
Code C/C++ :
/* structure article */
typedef struct str_personne {
int id; //id de la personne
char * nom;
char * prenom;
int age;
}Personne;
Ma pile de personnes :
Code C/C++ :
typedef struct str_p_personnes
{
Personne p;
struct str_p_personnes *precedent;
}Spile, *P_Personnes;
Ma fonction doit afficher les personnes par noms. (C'est pour cela que je cherche le moyen d'afficher qu'une seule fois le nom.
Exemple :
DUPONT
Pierre
Marie
SMITH
Jean
Ma fonction actuelle :
Code C/C++ :
void impression(P_Personnes pers)
{
Nat nb = hauteur(p); //hauteur de la pile
Chaine noms [nb]; //tableau de stockage des categories
Personne p = initialisation();
P_Personnes q;
int i;
for(i=0;i<nb;i++)//on sauvegarde dans une pile temporaire
{
p = sommet(pers);
q=empiler(q,p);
pers=depiler(pers);
}
for(i=0;i<nb;i++)
{
p = sommet(q);
pers=empiler(pers,p);
while(pers.nom!=noms[i])
{
i++; //c'est ici que je cherche à n'avoir qu'une seule fois le nom
}
q=depiler(q);
}
for(i=0;i<nb;i++)
{
printf("Nom %s\n",noms[i]);
Nat j;
for(j=0;j<nb;j++)
{
p = sommet(pers);
q=empiler(q,p);
pers=depiler(pers);
}
Nat k;
for(k=0;k<nb;k++)
{
p = sommet(q);
pers=empiler(pers,p);
if(p.nom==noms[i])
{
printf("%d\n",p.prenom);
}
q=depiler(q);
}
printf("\n");
}
}
Voilà, j'espère que c'est plus compréhensible,
Aurel