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 :

Partiel en C


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Partiel en C
    Salut à tous !

    Je me permets de vous demander vos service car, ayant beaucoup de mal à obtenir la logique de l'informatique, je persiste en travaillant, refaisant même les partiels ratés ! (il est à noter que je suis en école de mécanique, ce qui pourra légèrement justifier mon manque de compétence en info). Pour ceux que ca paraitra un remix de C++, le prof a en effet tendance a inserer quelques instruction de C++.

    Nous avons eu un partiel qui posait un probleme d'assemblage d'elements. il fallait simuler des assemblages d'elements porteurs.

    Il est a noter que nous n'avons pas vu les pointeurs, la structure doit donc etre iterative.

    Deux elements etaient possible : avec ou sans pieds.

    Chaque element est caracterisé par sa longeur, son epaisseur et s'il ont ou non des pieds.

    La premiere question est de definir un type permettant de modeliser un element

    Voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    tydedef struct elmt 
    { 
    double lgeur; 
    double ep; 
    bool pied; 
    }elmt;
    Pour le coup, je pense que c'est bon, vos avis ?

    2eme question, et la je doute déja plus de mon sous programme, trop simple me semble t il. Il fallait ici ecrire un sous programme fournissant l'epaisseur d'un element donné

    Voici ce que je propose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    double epaisseur (elmt A) 
    { 
    double E; 
    elemt A; 
    E = A.ep; 
    return E; 
    }
    Merci d'avance

    Mac !

  2. #2
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 011
    Points : 1 375
    Points
    1 375
    Par défaut
    Attention en C il n'existe pas de type bool.

    Sinon ta portion de code renvoyant le double peut être simplifiée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double epaisseur (elmt A)
    {
       return A.ep;
    }
    De + pour les structures passées en paramètre il est conseillé d'utiliser un pointeur, ce qui donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double epaisseur (elmt *A)
    {
       return A->ep;
    }
    et l'appel deviendrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    elmt a;
    double d;
     
    a.ep = 10;
    d = epaisseur(&a); /* d prend la valeur 10 */
    Sinon le reste a l'air correct selon ton enoncé

  3. #3
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par muad'dib
    Attention en C il n'existe pas de type bool.
    En C99 si.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos reponses,

    comme je l'ai dis dans mon precedent post, le prof a tendance à mettre des instruction de C++, dit il que c'est pour nous faciliter la tache, je ne suis pas assez competent pour le contre dire.

    Aussi, nous n'avions pas vu les pointeurs...

    Mon code serait il bon ?

  5. #5
    Membre averti
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Points : 387
    Points
    387
    Par défaut
    Hello,

    Citation Envoyé par mac-H1
    Salut à tous !

    Je me permets de vous demander vos service car, ayant beaucoup de mal à obtenir la logique de l'informatique, je persiste en travaillant, refaisant même les partiels ratés ! (il est à noter que je suis en école de mécanique, ce qui pourra légèrement justifier mon manque de compétence en info). Pour ceux que ca paraitra un remix de C++, le prof a en effet tendance a inserer quelques instruction de C++.
    C'est du C ou du C++ que vous faites ? Car à propos de bool, il s'agit d'un mot clé commun à C99 et à C++ (et à d'autres langages...) et non d'une instruction.

    Citation Envoyé par mac-H1
    Nous avons eu un partiel qui posait un probleme d'assemblage d'elements. il fallait simuler des assemblages d'elements porteurs.

    Il est a noter que nous n'avons pas vu les pointeurs, la structure doit donc etre iterative.

    Deux elements etaient possible : avec ou sans pieds.

    Chaque element est caracterisé par sa longeur, son epaisseur et s'il ont ou non des pieds.

    La premiere question est de definir un type permettant de modeliser un element

    Voici ce que j'ai fait :

    tydedef struct elmt
    {
    double lgeur;
    double ep;
    bool pied;
    }elmt;

    Pour le coup, je pense que c'est bon, vos avis ?
    C'est correct. Pour les compilos encore présents en nombre et ne supportant pas C99, on utilisera un int à la place de bool. Il ne faut pas non plus hesiter a ecrire plus pour donner de la sémantique aux variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct element {  
       double largeur; 
       double epaisseur; 
       int piedsPresents; 
    } element;
    Citation Envoyé par mac-H1
    2eme question, et la je doute déja plus de mon sous programme, trop simple me semble t il. Il fallait ici ecrire un sous programme fournissant l'epaisseur d'un element donné

    Voici ce que je propose :

    double epaisseur (elmt A)
    {
    double E;
    elemt A;
    E = A.ep;
    return E;
    }
    Bouh comme c'est compliqué, et incorrect par la même occasion. Etant donné que la structure (le contenu) est passée à la fonction par copie, il suffit de retourner le champ adéquat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    double epaisseur (const elmt A) { 
       return A.epaisseur; 
    }
    Ce qui est faux dans ton code, c'est que tu définis une nouvelle variable locale de type elmt nommée A dans ta fonction. Cette variable masque la structure passée en argument et n'est pas initialisée. C'est la valeur (pifométrique au passage) du champ ep de cette variable locale que tu retournes.

    A+

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    C'est un cours de C mais je vous ai dit, il melange un peu avec le C++ pour apparement nous faciliter la tache.

    Effectivement, c'est bien plus simple comme ça pour la seconde question.

    Par contre, pkoi "const" avant element ? c'est un type lui meme le type element

    En fait, comme j'avais fait, le programme m'aurait retourné n'importe quelle valeur non ?

    merci encore !

  7. #7
    Membre averti
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Points : 387
    Points
    387
    Par défaut
    Citation Envoyé par mac-H1
    C'est un cours de C mais je vous ai dit, il melange un peu avec le C++ pour apparement nous faciliter la tache.

    Effectivement, c'est bien plus simple comme ça pour la seconde question.

    Par contre, pkoi "const" avant element ? c'est un type lui meme le type element

    En fait, comme j'avais fait, le programme m'aurait retourné n'importe quelle valeur non ?

    merci encore !
    Le const est un qualificateur permettant d'indiquer au compilateur que la variable A ne doit pas etre modifier au sein de la fonction epaisseur.

    Exple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double epaisseur(const elmt A) {
        A.pied = false; /* Erreur !! */
        return A.epaisseur;   
    }
    Et effectivement, la fonction initiale aurait retourné n'importe quoi.

    A+

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    d'accord donc c'est un plus, je suis pas oblige de le mettre.
    Cela dit ca veut dire qu'il peut arriver qu'elle soit modifiée sans qu'on le veuille ? Desole mais je comprend pas bien l'interet de const.

  9. #9
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 011
    Points : 1 375
    Points
    1 375
    Par défaut
    L'intérêt du mot-clé const est d'offrir au programmeur une sécurité supplémentaire. Un paramètre d'une fonction déclaré const ne pourra pas être modifié. Si plus loin dans le code on essaye de faire une modification de cette valeur (voulue ou non), le compilateur nous renverra une erreur.

    C'est principalement une aide pour le programmeur finalement, tant au niveau de la sécurité des données que de la lisibilité du code.

    [EDIT]
    Il me semble qu'une fonction entière peut être déclarée const d'ailleurs, si cette fonction ne doit modifier aucune valeur...à confirmer
    [/EDIT]

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    ça roule, merci beaucoup !

    je fais les autres questions et je vous embete un peu apres

    merci beaucoup !

  11. #11
    Membre averti
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Points : 387
    Points
    387
    Par défaut
    Citation Envoyé par mac-H1
    d'accord donc c'est un plus, je suis pas oblige de le mettre.
    Oui.

    Citation Envoyé par mac-H1
    Cela dit ca veut dire qu'il peut arriver qu'elle soit modifiée sans qu'on le veuille ?
    Pas vraiment. En C, le programmeur doit être responsable. Le mot-clé et qualificateur const est une indication que le programmeur donne au compilateur. Si on essaye de modifier la valeur d'une donnée qualifiée par const, la compilation échoue. C'est donc une aide au programmeur.

    Citation Envoyé par mac-H1
    Desole mais je comprend pas bien l'interet de const.

    Si l'on reprend la fonction epaisseur(), son rôle est de renvoyer la valeur du champ epaisseur d'un élément, mais en aucun cas on ne souhaite que cette fonction modifie l'objet, elle ne doit faire que de la lecture.

    Le qualificateur const est donc là pour prévenir le programmeur d'éventuelles tentatives de modications à la compilation là, où on ne le souhaite pas. Il est donc important et conseillé de qualifier en const tout ce qui ne doit pas être modifié.

    A+

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Foobar1329
    ... Le qualificateur const est donc là pour prévenir le programmeur d'éventuelles tentatives de modications à la compilation là, où on ne le souhaite pas. Il est donc important et conseillé de qualifier en const tout ce qui ne doit pas être modifié.
    ...
    Si on est pas sûr de la qualité des programmeurs

    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  13. #13
    Membre averti
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Points : 387
    Points
    387
    Par défaut
    Citation Envoyé par souviron34
    Si on est pas sûr de la qualité des programmeurs

    Hé bé pourtant c'est une réalité Suffit de prendre des programmeurs de culture de base VB et de les faire programmer en C =>

    Quelle mauvaise langue je suis

    A+

  14. #14
    Membre averti
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Points : 387
    Points
    387
    Par défaut
    Hello,

    Citation Envoyé par muad'dib
    [EDIT]
    Il me semble qu'une fonction entière peut être déclarée const d'ailleurs, si cette fonction ne doit modifier aucune valeur...à confirmer
    [/EDIT]
    En C++ oui, en C non.

    A+

  15. #15
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    La déclaration const sur un paramètre d'une fonction est surtout interressante lorsqu'on passe l'adresse d'un objet qui ne doit pas être modifié par la fonction (comme une structure dont on veut éviter la recopie locale).
    Comme de toute façon le caractère const peut être violé, il agit plus à titre d'information (et pour les maladroits)
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  16. #16
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    merci beaucoup !

    Je me permet de vous embeter pour la suite.

    La 3 eme question etait de founir un sous programme permettant de connaitre l'ecart d'epaisseur entre deux elements (valeur positive ou negative)

    Voici ce que j'ai fait :

    double difference_epaisseur (Elemt A, Elemt B)
    {
    double D;
    D = A.epaisseur - B.epaisseur;
    return D
    }

    J'attend l'avis des pros !

  17. #17
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 011
    Points : 1 375
    Points
    1 375
    Par défaut
    Très bien. Cela dit il n'est pas nécessaire de passer par un double intermédiaire. Tu peux très bien faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double difference_epaisseur (Elemt A, Elemt B)
    {
        return (A.epaisseur - B.epaisseur);
    }
    Voila Et n'oublie pas les balises CODE la prochaine fois (symbole # dans la fenêtre de rédaction du message)

  18. #18
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    une question, si maintenant je veux afficher la valeur dans le programme principal ?

  19. #19
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 011
    Points : 1 375
    Points
    1 375
    Par défaut
    Citation Envoyé par mac-H1
    une question, si maintenant je veux afficher la valeur dans le programme principal ?
    Faut quand même connaitre le minima ... Utilises la fonction printf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("Epaisseur : %.2lf\n", ton_element.epaisseur);

  20. #20
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    j'apprecie pas trop ces repproches... "faut savoir.."


    Je suis en ecole de meca, pas d'info... c'est le prof qui fait le cours pas moi ! je sais bien ce qu'est printf mais de moi meme, le prof nous parle cout, en justification il a dit que c'etait plus facile d'utilisation. Partant de la je pense que je n'ai rien a faire d'autre que de me contenter de ca et faire ce qu'il me demande..

    qu'en penses tu ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/07/2007, 11h50
  2. Réponses: 5
    Dernier message: 19/11/2004, 19h16
  3. Réponses: 8
    Dernier message: 10/09/2004, 17h30
  4. Possibilite de replication partielle ?
    Par Mupps dans le forum Requêtes
    Réponses: 5
    Dernier message: 19/03/2004, 15h54
  5. faire un update partiel
    Par danseur dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 19/01/2004, 18h27

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