balayer liste chainée

balayer liste chainée - C - Programmation

Marsh Posté le 05-06-2006 à 16:14:42    

>Boujour à tous je suis nouveau sur Hardware :hello:  
 
>Je suis entrain de faire un programme C qui creer un arbre genealogique a partir d'un ficchier texte.
 
>Je dois faire une fonction ref_personne(prenom, nom) qui doit retourner la référence de la personne de nom nom et de prenom prenom. J'ai une erreur dans ma fonction.
 
>Voila des extrait de mon programme qui vous serons utiles pour me répondre.
 
/* Structure de type personne "PERSONNE" */
 
typedef struct personne PERSONNE;
struct personne
{
        char nom[15];
        char prenom[15];
        char S;
        struct  
        {
               int jour;
               int mois;
               int annee;
        }date_naissance;
        PERSONNE * pere;
        PERSONNE * mere;
};
 
/* Structure de type element "ELEMENT" */
 
typedef struct element  ELEMENT;
struct element
{
        PERSONNE * personne;
        ELEMENT * suivant;
};
 
/* Structure de type ensemble "ENSEMBLE" */
 
typedef struct ensemble ENSEMBLE;
struct ensemble
{
        ELEMENT * premier;
};
 
>Et voici ma fonction
ref_personne[i]
 
/* Reference d'une personne */
 
PERSONNE ref_personne(char *nom, char* prenom)
{
     ELEMENT * tmp;
     PERSONNE * resultat;
     tmp = ENSEMBLE -> premier; /*expected primary-expression before '->' token
     int trouve = 0;              
     while (tmp != NULL && !trouve)
     {
           if ((strcmp(tmp->personne->nom, nom)==0) && (strcmp(tmp->personne->prenom, prenom)==0))
           {
              trouve = 1;
              resultat = tmp->personne;                    
           }
           tmp = tmp->suivant;
     }    
     return tmp;        
}
 
tmp doit parcourir ma chaine pour verifier si c'est le bon mon et prenom, or mon erreur si situe au debut (erreur en commentaire) ou je veux metre tmp au debut de ma liste.
 
>J'espere vous avoir fourni assez d'éléments pour me répondre sinon j'attends vos remarques. Merci d'avance.
 
Cordialement Liv.

Reply

Marsh Posté le 05-06-2006 à 16:14:42   

Reply

Marsh Posté le 05-06-2006 à 16:57:17    

Ne mets pas d'espace entre ENSEMBLE et premier:


structure->membre


Et ne mets des noms en majuscule que pour les constantes (define), c'est pas très lisible.


Message édité par simple_stupid le 05-06-2006 à 17:01:06
Reply

Marsh Posté le 05-06-2006 à 17:32:41    

Meme en enlevant les espaces j'ai la meme erreur je mets les espaces afin de rendre mon programme plus lisible et pour les majuscules désolé mais j'ai apris comme ca.
 
J'ai fais une correction de ma fonction mais la meme erreur perciste, voila le nouvel algorithme :
 
PERSONNE * ref_personne(char * nom, char * prenom)
{
     ELEMENT * tmp;
     PERSONNE * resultat;
     tmp =  ENSEMBLE->premier; /* expected primary-expression before '->' token */
     int trouve = 0;              
     while (tmp != NULL && !trouve)
     {
           if ((strcmp(tmp -> personne -> nom, nom)==0) && (strcmp(tmp -> personne -> prenom, prenom)==0))
           {
              trouve = 1;
              resultat = tmp -> personne;                    
           }
           tmp = tmp -> suivant;
     }    
     return resultat;        
}
 
Voila.

Reply

Marsh Posté le 05-06-2006 à 18:27:59    

Bon.
Tu fais  


tmp =  ENSEMBLE->premier;  


C'est quoi ENSEMBLE?
C'est un type de de variable, que tu as défini avec typedef.
Mais tu n'as pas déclaré de variable de ce type.
Un peu comme si tu faisais int->premier.
 
Pour ton parcours, ce serait plus clair avec un for:
 


PERSONNE * ref_personne(char * nom, char * prenom)
{
     ELEMENT * tmp;
     PERSONNE * resultat;
     tmp =  ENSEMBLE->premier;  
 
     int trouve = 0;              
     for (;tmp && !trouve; tmp = tmp -> suivant;)
     {
           if ((strcmp(tmp -> personne -> nom, nom)==0) && (strcmp(tmp -> personne -> prenom, prenom)==0))
           {
              trouve = 1;
              resultat = tmp -> personne;                    
           }
      }    
     return resultat;    


Message édité par simple_stupid le 05-06-2006 à 18:59:40
Reply

Marsh Posté le 05-06-2006 à 18:40:32    

Merci, il me donne mal à la tête ce programme j'ai pas réflechi.

Reply

Marsh Posté le 05-06-2006 à 19:37:49    

J'ai un autre probleme.
Dans un fonction je fais un test pour savoir si un element appartient a un ensemble.Je fais ca avec un if/else or dans mon else une fois que j'ai je return 1 (vrai) je n'est plus besoin de continuer à chercher et j'aimerai savoir comme sortir de ma fonction en retournant 1.
Je pense que si je fais :
 
return 1;
return ();
 
cela va pas marcher, merci.

Reply

Marsh Posté le 05-06-2006 à 19:48:46    

Liv83 a écrit :

J'ai un autre probleme.
Dans un fonction je fais un test pour savoir si un element appartient a un ensemble.Je fais ca avec un if/else or dans mon else une fois que j'ai je return 1 (vrai) je n'est plus besoin de continuer à chercher et j'aimerai savoir comme sortir de ma fonction en retournant 1.
Je pense que si je fais :
 
return 1;
return ();
 
cela va pas marcher, merci.


Dès que tu fais "return 1", tu sors de ta fonction. Donc le 2° return est inutile et ne veut absolument rien dire.
Tu devrais commencer par penser à ouvrir ton bouquin de C !!!


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 05-06-2006 à 19:51:31    

A oui c'est vrai j'ai honte :$, merci.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed