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 :

les structures en langage c


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 47
    Points : 32
    Points
    32
    Par défaut les structures en langage c
    bonjour,j'ai pas compris la nnotion de structure en c.par exemple
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct  date
    {
       int jour,mois,annee;
    }var_date;
    qui peut m'explique le role de la variable var_deta? et merci

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    La variable var_date est un objet regroupant plusieurs "sous-variables" qu'on nomme en général champs de la structure. Ainsi, var_date contient un champ jour (accessible via var_date.jour), un champ mois (accessible via var_date.mois) et un champ annee (accessible via var_date.annee).

    Cette technique permet de structurer l'information en regroupant plusieurs variables liées en une seule.

    Thierry

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 47
    Points : 32
    Points
    32
    Par défaut
    merci beaucoup

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 47
    Points : 32
    Points
    32
    Par défaut les piles en c
    bonjour a tous j'ai une qst.
    concernant modelisation de piles par listes chainees.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct liste
    {
    int valeur;
    struct liste *suivant;
    };
    main()
    {
    struct liste *l,*precedent,*nouveau;
    quel est le role de ces variables qui ont en rouge ?s'il vous une reponse complete et merci

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par youssef222 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct liste
    {
    int valeur;
    struct liste *suivant;
    };
    Il s'agit de créer une structure par maillon de liste. Ainsi une liste est organisée comme une chaine de maillons (ou de noeuds) ordonnés où chaque élément est relié au suivant à l'aide du pointeur suivant.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste *variable -> liste(valeur = 10, suivant--)---> liste(valeur = 20, suivant--)--->  ...
    Thierry

  6. #6
    Membre régulier Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Points : 97
    Points
    97
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct _date{
        unsigned int jour;
        unsigned int mois;
        unsigned int annee;
    }Date;
    Voici une structure, c'est à dire une caisse où se trouve dedans les informations concernant une date.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int main(){
        Date *d = NULL;
        d = (Date*)malloc(sizeof(Date));
        if( d == NULL ){
            fprintf(stderr, "ERROR: malloc Date *d\n");
            return (EXIT_FAILURE);
            }
         d->jour = 17;
         d->mois = 4;
         d->annee = 2008;
         printf("DATE : %d / %d / %d\n", d->jour, d->mois, d->annee);
         return (EXIT_SUCCESS);
    }
    Possible aussi en "non-dynamique"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main(){
         Date d;
         d.jour = 17;
         d.mois = 4;
         d.annee = 2008;
         printf("DATE : %d / %d / %d\n", d.jour, d.mois, d.annee);
         return (EXIT_SUCCESS);
    }

  7. #7
    Membre averti Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Points : 363
    Points
    363
    Par défaut
    qui peut m'explique le role de la variable var_deta? et merci
    Cette variable stocke trois autres variables jour, mois et annee. Qui sont accessibles ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var_deta.jour
    var_deta.mois
    var_deta.annee

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par youssef222 Voir le message
    bonjour,j'ai pas compris la nnotion de structure en c.par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct date
    {
    int jour,mois,annee;
    }var_date;
    qui peut m'explique le role de la variable var_deta? et merci
    C'est une variable de type structure. L'exemple que tu montres est techniquement possible, mais pas très facile à comprendre ni pratique à utiliser... De même, je déconseille de regrouper les définition de variables (ou de champs de structures) sur une seule ligne, sous prétexte que c'est techniquement possible. Il y a des dizaines de techniques possibles en C pour rendre le code incompréhensible et inmaintenanble. Ca ne veut pas dire qu'il faille les utiliser...

    Il est d'usage, et pour de bonnes raisons, de séparer la définition de la structure de son ou ses instanciations :

    Définition d'un structure 'date' formée des champs 'jour, 'mois et 'année' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    /* definition */
    struct date
    {
       int jour;
       int mois;
       int annee;
    };
    Définition d'un instance de la structure 'date' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /* instanciation*/
    struct date var_date;
    Après, on peut initialiser chaque champs comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var_date.jour = 17;
    var_date.mois = 4;
    var_date.annee = 2008;
    Mais le plus intéressant est qu'on peut passer la structure (ou son adresse) en paramètre à une fonction, ce qui évite bien des complications de codage.

    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void afficher_date (int jour, int mois, int annee)
    {
        printf ("%2d/%2d/%4d\n", jour, mois, annee);
    }
    on écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void afficher_date (struct date date)
    {
        printf ("%2d/%2d/%4d\n", date.jour, date.mois, date.annee);
    }
    ce qui est correct mais un peu lourdingue sur le plan de l'exécution, car toute la structure est recopiée. C'est pour ça qu'on préfère une méthode plus légère qui consiste à ne passer que l'adresse de la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void afficher_date (struct date *p_date)
    {
        printf ("%2d/%2d/%4d\n", p_date->jour, p_date->mois, p_date->annee);
    }
    Enfin, le pointeur permettant la modification des données initiales, mais la fonction n'ayant aucune raison de modifier ces données, on le précise avec 'const' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void afficher_date (struct date const *p_date)
    {
        printf ("%2d/%2d/%4d\n", p_date->jour, p_date->mois, p_date->annee);
    }
    Voilà la forme la plus rationnelle possible de codage en C de cette fonction.

    http://emmanuel-delahaye.developpez....htm#structures

    Pose des questions si tu ne comprends pas.

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par nicodn02 Voir le message
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int main(){
        Date *d = NULL;
        d = (Date*)malloc(sizeof(Date));
        if( d == NULL ){
            fprintf(stderr, "ERROR: malloc Date *d\n");
            return (EXIT_FAILURE);
            }
         d->jour = 17;
         d->mois = 4;
         d->annee = 2008;
         printf("DATE : %d / %d / %d\n", d->jour, d->mois, d->annee);
         return (EXIT_SUCCESS);
    }
    • Pourquoi un exemple aussi complexe, alors qu'on a affaire à un débutant ? Le 2è exemple que tu as donné suffit pour comprendre la base. Il faut expliquer les concepts un par un...
    • Pourquoi affecter 'd' 2 fois de suite ?
    • A quoi sert le cast (Date*) ?

Discussions similaires

  1. [POO] Les structures de données comme en C++...
    Par FrankOVD dans le forum Langage
    Réponses: 3
    Dernier message: 27/04/2006, 19h44
  2. Aide sur les structure
    Par Yoshio dans le forum C
    Réponses: 7
    Dernier message: 18/02/2006, 12h56
  3. Question sur les statics et les structures
    Par Steph12 dans le forum C
    Réponses: 3
    Dernier message: 24/03/2005, 13h20
  4. Coherence dans les structures arborescentes...
    Par Alec6 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/09/2004, 12h04

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