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 :

Structure et pointeurs


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2011
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 56
    Points : 34
    Points
    34
    Par défaut Structure et pointeurs
    Bonjour,

    J'étudie en maths et je débute en C.

    Pour un devoir, dont l'objectif est la gestion d une collection BD, organisée en série contenant plusieurs tomes,
    j'ai défini 2 structures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct Tome_s {
      char *titre;
      char *scenariste;
      char *dessinateur;
      int no_serie;
      struct Serie_s *serie;
    } Un_tome;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct Serie_s {
      char *titre;
      char *pays_parution;
      int nb_parus;
      Un_tome *tomes[MAX_TOMES];
    } Une_serie;
    Je dois créér une fonction permettant de créer une série selon le prototype suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Une_serie *creer_serie(char *nom_serie, char *pays_parution, int nb_parus)
    et une permettant de créer une série selon le prototype suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Un_tome *creer_tome(char *titre, char *scenariste, char *dessinateur, int no_serie)
    Voici ma proposition :

    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
    Une_serie *creer_serie(char *nom_serie, char *pays_parution, int nb_parus) {
     
        Une_serie *s = (Une_serie *)malloc(sizeof(Une_serie));
        s->titre=strdup(nom_serie);
        s->pays_parution=strdup(pays_parution);
        s->nb_parus=nb_parus;
    	return s;
    }
     
    Un_tome *creer_tome(char *titre, char *scenariste, char *dessinateur, int no_serie) {
     
        Un_tome *t = (Un_tome *)malloc(sizeof(Un_tome));
        t->titre=strdup(titre);
        t->scenariste=strdup(scenariste);
        t->dessinateur=strdup(dessinateur);
        t->no_serie=no_serie;
    	return t;
     
    }

    je teste avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main() {
          Une_serie *test_serie = creer_serie("Asterix", "FR", 20);
          Un_tome *test_tome = creer_tome("Asterix le gaulois", "gosc","ud", 12);
    }
    Je pense que cela fonctionne bien.

    J'ai plus de difficulté pour créer une fonction ajouter_serie_a_collection qui ajoute une nouvelle série à la fin du tableau. Elle doit déterminer cette fin. Les cases vides contiennent la valeur NULL.

    Le prototype est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     void ajouter_serie_a_collection(Une_serie *collectionSeries[], Une_serie *serie)
    Merci
    N.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Septembre 2011
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    merci j ai solutionné mon problème avec l'aide du site suivant
    http://sizious.emunova.net/docs/?ids...at=7&iddoc=8#1
    l'explication des pointeurs, pointeurs et structure et double pointeurs est particulièrement bien expliquée.
    Merci N

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Citation Envoyé par lefevrelaumonier Voir le message
    J'ai plus de difficulté pour créer une fonction ajouter_serie_a_collection qui ajoute une nouvelle série à la fin du tableau. Elle doit déterminer cette fin. Les cases vides contiennent la valeur NULL.
    Ben non. Nulle part je t'ai vu initialiser quoi que ce soit à NULL !!!

    Donc tu rectifies ce détail. Ensuite, il y a un gros défaut de conception dans ton code. Soit tu lies tous les albums d'une même série sous la forme d'une liste chainée, et dans ce cas tu n'as pas besoin dans ton type "série" de définir un tableau de pointeurs vu qu'il te suffit d'avoir le premier album pour avoir ensuite tous les autres par ricochet ; soit tu ne les lies pas ensembles et dans ce cas alors effectivement tu es obligé de stocker "n" albums dans une série.
    Or toi tu as fait les deux. Tu as créé un type "album" où chaque membre pointe sur le suivant, mais tu as considéré aussi qu'une série avait "n" albums. C'est redondant.

    Donc comme je pense que ton TP est sur les listes chainées, je te propose la structure suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct {
      char titre;
      char *pays_parution;
      int nb_parus;
      t_tome *premier;
    } t_serie;
    Ensuite, une fonction "ajouter_tome()" qui ajoute un tome à la fin de la liste des tomes, puis ta fonction "ajouter_tome_a_serie()" qui se contente de remplir le champ "premier" et le champ "nb_parus"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

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