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 en c


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 186
    Par défaut structure en c
    bonjour,
    j'ai commencer hier un nouveau chapitre sur les strucures en C et j'ai un travail à rendre, éh oui déja sur ce même chapitre.
    voilà le début de la consigne :
    Ecrire une structure étudiant qui contient comme données:
    -le nom de l'étudiant
    -le prénom de l'étudiant
    -un tableau de 10 notes de l'étudiant

    voici donc ce que j'ai essayé de faire pour l'instant :
    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
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
     
    struct note
    {
     
     float notes;
     
    };
    struct Etudiant
    {
           char nom [31];
           char prenom [31];
           struct note notes[10];
     
    };
    cela vous parrait il bon?
    merci

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    - Pas besoin de faire une structure pour les notes
    - Utilise une constante symbolique pour le nombre de notes
    - Utilise une autre constante pour la longueur max des noms et prenoms
    (la taille des buffers seraient alors cette longueur + 1)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 186
    Par défaut
    Citation Envoyé par Gruik
    Salut,

    - Pas besoin de faire une structure pour les notes
    - Utilise une constante symbolique pour le nombre de notes
    - Utilise une autre constante pour la longueur max des noms et prenoms
    (la taille des buffers seraient alors cette longueur + 1)
    je suis désolé mais je suis débutant en C et je n'est pas compris ce que vous me proposez de faire?
    comment faire une seul structure ac la fiche de l'étudiant er son tableau de 10 notes?
    Qu'est ce qu'une constante symbolique?
    Et qu'entendez vous par "Utilise une autre constante pour la longueur max des noms et prenoms
    (la taille des buffers seraient alors cette longueur + 1)"??
    merci

  4. #4
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Bah je sais pas, si ton prof voit ça et qu'ils vous l'a pas encore appris, c'est ptet qu'il vaut mieux pas le faire mais bon, une bonne pratique consiste à ne pas ecrire des nombres directement (ex : 10 et 30 dans ton cas) mais à passer par des "constantes symboliques", ce sont des identificateurs generalement en majuscule qui sont remplacés par leur valeur à la compilation.

    Et pour la structure note, on est pas obligé de faire une structure pour declarer un tableau.. "float notes[10];" suffit

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 186
    Par défaut
    merci,
    je pense avoir mieux compris et en ce qui concerne les constante symbolique il ne nous en a jamais parlé et à toujours écrits en numérique.
    merci

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    "Le monsieur te propose" de travailler avec une seule structure...

    Le but d'une structure, c'est, justement, de permettre de rassembler des choses qui n'ont a priori pas grand chose à voir entre elle (exemple: un tableau de caractère et un tableau d'entier)...

    "Le monsieur te propose aussi" d'essayer, autant que faire se peut, d'éviter les "nombres magiques" (AKA, ceux que tu sors de ton chapeau, tel un magicien )

    Au final, cela donnerait un code ressemblant à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /* voici nos deux "nombres magiques", on leur donne un nom et une valeur */
    #define MAXCHAINE 30
    #define MAXNOTES 10
    struct Etudiant
    {
    /* pour le nom et le prénom, il faut penser au '\0' final, tout en prévoyant
       MAXCHAINE caractères possibles */
        char nom[MAXCHAINE+1];
        char prenom[MAXCHAINE+1];
    /* et le tableau des notes */
        float Notes[MAXNOTES];
    }
    Le grand avantage de travailler comme cela (en utilisant chaque MAXCHAINE et MAXNOTES chaques fois que tu dois te reporter au nombre maximum d'éléments du tableau), c'est que, si un jour, tu souhaites autoriser 20 notes, ou que tu tombe sur un éleve qui a un nom à rallonge tel qu'il faut 50 caractères, tu n'aura qu'à modifier la valeur de MAXCHAINE ou de MAXNOTES, et le tour sera joué

    PS: excuses moi, mais je suis d'humeur taquine aujourd'hui
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 186
    Par défaut
    Merci pour ces explication masi n'ayant pas apris cela je ne pense pas que mon prof voi d'un bon oeil que je lui rende quelque chose hors programme (ss jeux de mots ^^) pour l'instant .

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 186
    Par défaut
    Voici les questions de mon énoncé :
    -Ecrire une structure étudiant qui contient comme données:
    -le nom de l'étudiant
    -le prénom de l'étudiant
    -un tableau de 10 notes de l'étudiant
    -ecrire une fonction afficher() qui permet d'afficher les propriétés d'un étudiant
    -ecrire une fonction lire() qui permet de lire les données fournis par l'utilisateur pour un étudiant
    -ecrire une fonction tri() qui permet de trier ds un ordre croissant les notes d'un étudiant fournis en paramètre. Pour le tri nous utiliserons la méthode de tri par insertion.

    voici ce que j'ai essayé de faire mais je ne comprend pas bien la différence entre les deux première question...

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
     
    struct Etudiant
    {
           char nom [31];
           char prenom [31];
           float notes [10];
    };
     
    void afficher()
    {
    /*non compris*/
    }   
     
    void lire()
    {
    /*non compris*/   
    }
     
    void tri ()/*s'agit il bien de la bonne méthode de tri?*/
    {
    int t[10],i,j,x,min,max;
        for (i=0;i<9;i++)
        {
        indice =i;
        min = t[i]
            for (j=i+1;j<10;j++)
                if(t[i]<min)
                {
                            indice=j;
                            min=t[j];
                }
        x=t[i]
        t[i]=t[indice]
        t[indice]=xi
        }
    }
    merci pour votre aide...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par brisso
    -ecrire une fonction afficher() qui permet d'afficher les propriétés d'un étudiant
    afficher permet de mettre à l'écran les données sous une forme lisible, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       Nom : Chirac
    Prénom : Jacques
     Notes : 10.2 12.4 8.1 9.2
    -ecrire une fonction lire() qui permet de lire les données fournis par l'utilisateur pour un étudiant
    Lire est ici à prendre dans le sens de saisir.
    • Saisie du nom.
    • Saisie du prénom.
    • Saisie des notes.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 186
    Par défaut
    Merci pour votre réponse,
    j'ai essayé de faire au mieux mais il y a un probleme au niveau des appels de mes "variable" (j'entend par là nom, prenom, notes) entre les différentes fonction.
    Comment faire pour utiliser les mm variables pour toutes les fonction en les intégrant convenablement?

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
     
    struct Etudiant
    {
           char nom [31];
           char prenom [31];
           float notes [10];
    };
     
    void afficher()
    {
    int nom,prenom,notes [10]
           printf("Nom :%s \n",nom);
           printf("Prenom :%f  \n",prenom);
           printf("Notes :s% \n",notes [i]);
     
    }   
     
    void lire()
    {
    int nom, prenom,i, notes [10];
        printf("Donnez le nom de l'étudiant:\n");
        scanf("%s",nom);
        printf("Donnez le prenom de l'etudiant:\n");
        scanf("%s",prenom);
        printf("Donnez les dix notes de l'etudiant:\n");
        scanf("%f",notes[i]);
     
    }
     
    void tri ()
    {
    int t[10],i,j,x,min,max;
        for (i=0;i<9;i++)
        {
        indice =i;
        min = t[i]
            for (j=i+1;j<10;j++)
                if(t[i]<min)
                {
                            indice=j;
                            min=t[j];
                }
        x=t[i]
        t[i]=t[indice]
        t[indice]=xi
        }
    }
    merci encore pour votre aide

  11. #11
    Membre chevronné Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Par défaut
    Réserver 30 octets en mémoire pour le nom c'est bien, mais ça posera problème le jour où Jean-Jacques Du Coeur De Lion De la Rochicliencourtbruant-Carpentras-la-truite-sur-Garonne voudra s'inscrire en fac. D'ou allocation dynamique: il y a deux méthodes, il faut le savoir. Comment le prof notera c'est une autre histoire

    Pour le tri il est également probable que le prof préfère qsort() et qu'il n'a pas google, qui sait?

    Quand la structure sera prête, crées un tableau de structures qui sera manipulé par les fonctions demandées (et re-allocation dynamique).

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par brisso
    Merci pour votre réponse,
    j'ai essayé de faire au mieux mais il y a un probleme au niveau des appels de mes "variable" (j'entend par là nom, prenom, notes) entre les différentes fonction.
    Comment faire pour utiliser les mm variables pour toutes les fonction en les intégrant convenablement?
    Il faut maintenant apprendre à définir la structure dans le main() et à passer son adresse à chaque fonction. L'interface des fonctions devrait ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    void afficher (struct Etudiant *p_etudiant)
    ...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 186
    Par défaut
    Merci mais pourquoi allouer une adresse et que signifit le p_ ?
    J'ai répondu à une nouvelle question de l'énoncé à savoir
    ecrire une fonction myenne qui permet de calculer la moyenne d'un étudiant fourni en paramètre.
    Les trois derniers mots de la phrases me dérangent...que cela signifit il?

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
     
    struct Etudiant
    {
           char nom [31];
           char prenom [31];
           float notes [10];
    };
    void afficher()
    {
    int nom,i,prenom,notes [10];
           printf("Nom :%s \n",nom);
           printf("Prenom :%f  \n",prenom);
           printf("Notes :s% \n",notes [i]);
     
    }   
    void lire(struct etudiant *p_Etudiant)
    {
    int i;
        printf("Donnez le nom de l'étudiant:\n");
        scanf("%s",nom);
        printf("Donnez le prenom de l'etudiant:\n");
        scanf("%s",prenom);
        printf("Donnez les dix notes de l'etudiant:\n");
        scanf("%f",notes[i]);
     
    }
    void tri (struct etudiant *p_Etudiant)
    {
    int i,j,x,min,max,indice;
        for (i=0;i<9;i++)
        {
        indice =i;
        min = t[i];
            for (j=i+1;j<10;j++)
                if(t[i]<min)
                {
                            indice=j;
                            min=t[j];
                }
        x=t[i];
        t[i]=t[indice];
        t[indice]=x i;
        }
    }
    void moyenne(struct etudiant *p_Etudiant)
    {
    int m;
           ((notes[1]+notes[2]+notes[3]+notes[4]+notes[5]+notes[6]+notes[7]+notes[8]+notes[9]+notes[10])/10)=m
           scanf("%f",m);
    }
    re re re merci

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par brisso
    Merci mais pourquoi allouer une adresse
    WTF ? Mais qui a parler d'allouer une adresse (ce qui n'a aucun sens, d'ailleurs... ). J'ai dit 'passer l'adresse de la structure'. Y'a des mots que tu ne comprends pas ?
    et que signifit le p_ ?
    Que le paramètre est un pointeur. Ca fait partie de mes Conventions Personnelles de Codage.

    http://emmanuel-delahaye.developpez....ge.htm#nommage

    J'ai répondu à une nouvelle question de l'énoncé à savoir
    ecrire une fonction myenne qui permet de calculer la moyenne d'un étudiant fourni en paramètre.
    Les trois derniers mots de la phrases me dérangent...que cela signifit il?
    Très exactement ce que j'essaye de te faire comprendre depuis le début. Tu as eu un cours sur les structures et les fonctions ou tu codes au hasard ?

    Montre ton cours...

    Et puis apprend à faire des boucles....

Discussions similaires

  1. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 15h32
  2. [tables systèmes] extraction de la structure d'une base
    Par laffreuxthomas dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 23/03/2006, 13h24
  3. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  4. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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