IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

structures et pointeurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 68
    Par défaut structures et pointeurs
    Bonjour! je voudrais implementer un graphe et voici donc mes debuts:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    struct elementadjacent
        { int info;
          struct elementadjacent *suivant;
        };
     
    struct sommet
        {  int label;
            int info;
            struct elementadjacent *adj;
            struct sommet* suivant; 
       };
     
    struct graphe
      {  int nbSommet;
          int nbArete;
          int maxSommet;
          struct sommet* premierSommet;
          struct sommet* dernierSommet;
     }
     
    //initialisation du graphe
    void InitGraphe(graphe *g)
     { g=new graphe;
        (*g).nbSommet=0;
        (*g).nbarete=0;
        (*g).maxSommet=0;
        g.premierSommet=NULL;
        g.dernierSommet=NULL;
      }
    Je voudrais donc savoir est-ce que ma procedure InitGraphe est bien implementer? et commet proceder pour ecrie la procedure ajoutSommet(graphe* g,int S)?
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    Ton init graph n'est pas comme il faut, si tu fais comme sa:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    graph *g;
    g=NULL;
    InitGraph(g);
    g vaudra NULL apres l'appel de InitGraph, il vaut mieux faire comme ça:
    InitGraph(graph *&g)
    (je suis pas sur si la syntaxe est celle-ci, donc me corriger si necessaire).
    Pour prendre la référence sur pointeur de g

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Je voudrais donc savoir est-ce que ma procedure InitGraphe est bien implementer?
    Non.
    1- Il y a une erreur de principe : g est un paramètre de la fonction. Le rôle d'un paramètre est de transmettre une valeur à une fonction, valeur nécessaire à son fonctionnement. Or dans ton code, la première chose que tu fais est g=... ce qui écrase la valeur transmise à la fonction. Ceci prouve que la valeur transmise à g n'a pas d'importance donc que g n'a pas à être un paramètre mais une simple variable locale.
    2- graphe n'est pas un type, c'est struct graphe le type (on est dans le forum C)
    3- new n'est pas du C. On doit utiliser malloc() (on est dans le forum C)
    4- (*g).nbSommet n'est pas faux mais une syntaxe lourde et avantageusement remplacée par g->nbSommet
    5- g.premierSommet est faux : g n'est pas une struct/union mais une adresse de struct/union. La syntaxe est la même qu'en 4.
    6- La fonction crée (ou devrait créer) une struct graphe dynamiquement. Il faut donc qu'elle retourne l'adresse de la structure créée.

    Donc globalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    //initialisation du graphe
    struct graphe * InitGraphe(void)
    { 
       struct graphe * g=malloc(sizeof *g);
       if(g != NULL)
       {   
          g->nbSommet=0;
          g->nbarete=0;
          g->maxSommet=0;
          g->premierSommet=NULL;
          g->dernierSommet=NULL;
       }
       return g;
    } 
    ....
    struct graphe * gra = InitGraphe();
    if(gra != NULL)....

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 68
    Par défaut
    Merci pour la reponse mais je voudrais ma procedure InitGraphe prenne un parametre peu importe qu'il renvoie ou ne renvoi rien

  5. #5
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    Dans ce cas tu fais comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    //initialisation du graphe
    void InitGraphe(struct graphe **ret)
    { 
       struct graphe * g=malloc(sizeof *g);
       if(g != NULL)
       {   
          g->nbSommet=0;
          g->nbarete=0;
          g->maxSommet=0;
          g->premierSommet=NULL;
          g->dernierSommet=NULL;
       }
       *ret=g;
    }
     
    struct graphe *g=NULL;
    InitGraph(&g);

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 68
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void InitGraphe(struct graphe **ret
    Deux etoiles??? pointeur sur un pointeur de struct graphe? j n comprend pa bien cette ligne

Discussions similaires

  1. Structures et pointeurs
    Par Tchetch dans le forum C
    Réponses: 14
    Dernier message: 19/10/2006, 13h30
  2. Structure et pointeur
    Par Nalido dans le forum C
    Réponses: 5
    Dernier message: 08/08/2006, 15h08
  3. Copie de structure par pointeur - Problème LSB MSB
    Par the_ionic dans le forum Réseau
    Réponses: 4
    Dernier message: 17/07/2006, 15h08
  4. Structures et pointeurs
    Par mastochard dans le forum C
    Réponses: 17
    Dernier message: 25/05/2006, 11h55
  5. [structure et pointeur] problème d'affichage
    Par kitsune dans le forum C
    Réponses: 17
    Dernier message: 22/03/2006, 22h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo