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 :

Exercices sur les énumérations et les pointeurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2021
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2021
    Messages : 18
    Par défaut Exercices sur les énumérations et les pointeurs
    Bonsoir,
    je m'entraine en c et je fais des exercices sur les enumérations et les pointeurs mais j'ai pleins d'erreurs dans la sortie . Quelqu'un peut m'aider svp?


    Là je dois juste définir deux énumérations et une structure puis faire des affiches
    Code C : 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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    #include <stdio.h>
     
    typedef enum color {
        pique,
        coeur,
        carreau,
        trefle,
    }color;
     
    typedef enum value{
        roi,
        dame,
        valet,
    }value;
     
    typedef struct{
        color;
        value;
    }card;
     
    void affiche_color(color a){
        switch(a){
            case pique:
            printf("pique");
            break;
     
            case coeur:
            printf("coeur");
            break;
     
            case carreau:
            printf("carreau");
            break;
     
            case trefle:
            printf("trefle");
            break;
        }
    }
     
    void affiche_value(value a){
        switch(a){
            case roi:
            printf("roi");
            break;
     
            case dame:
            printf("dame");
            break;
     
            case valet:
            printf("valet");
            break;
     
        }
    }
     
    void affiche_card(card a){
        affiche_color(a.color);
        affiche_value(a.value);
    }
     
     
    int main()
    {
        card a;
        a.color="pique";
        a.value="roi";
        affiche_card(a);
     
        return 0;
    }

    En ce qui concerne les pointeurs mon probleme c'est que je sais pas comment mettre les parametres dans la fonction swap que j'ai appelé dans tri pour que ça pointe vers les bonnes valeurs. J'ai essayé plusieurs trucs mais ça marche pas .

    Code C : 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
     
     
    #include <stdio.h>
     
     
    void swap(int *pa, int *pb){
        int c=*pa;
        *pa=*pb;
        *pb=c;
    }
    void tri2(int* px, int* py){
        if(*px>*py){
            swap(px, py);
        }
        else{
            return;
        }
    } 
    int main(){
        int a=5;
        int b=6;
        tri2(&a,&b);
        printf("a= %d \n b= %d", a, b);
    }

    Aidez moi svp. Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Pour les pointeurs (le code 2) c'est quoi le problème ?

    Pour le code 1, ta structure a deux membres sans nom.
    De plus, les valeurs énumérées ont leur nom global a.c=pique;.

    Et au passage, ton nommage est DÉGEU
    Moi ce que je fais c'est typedef struct s_XXXX {} t_XXX et typedef enum e_XXXX {} t_XXX.
    Ainsi ta structure et ton énumération commence par le préfixe t_ qui annonce 1 type.
    Pour le struct s_XXXX et enum e_XXXX, le nom est facultatif (si je ne dis pas de bêtises ) mais les suffixes e_ et s_ permettent de faire la distinction au cas où.

    Ensuite pour le nommage des valeurs, je rappelle le nom de l'énumération (pour éviter les collisions de noms autant que faire se peut puisqu'ils sont en global) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef enum e_color {
        COLOR_PIQUE = 0,
        COLOR_COEUR,
        COLOR_CARREAU,
        COLOR_TREFLE,
    } t_color
    Les majuscules, c'est pour le nommage "global" (1 "coding style" assez utilisé) et le = 0 c'est pour que les choses sont claires : la première valeur c'est 0 (mais dans ton code tu t'en fiches )

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2021
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2021
    Messages : 18
    Par défaut
    Bonsoir,
    Merci beaucoup de prendre le temps de me répondre

    Citation Envoyé par foetus Voir le message
    Pour les pointeurs (le code 2) c'est quoi le problème ?
    j'ai essayé plusieurs et bizarrement là ça marche lol



    Citation Envoyé par foetus Voir le message

    Pour le code 1, ta structure a deux membres sans nom.
    De plus, les valeurs énumérées ont leur nom global a.c=pique;.
    Je viens de me rendre compte effectivement que j'ai pas mis de type avant de déclarer les variable dans la struct. Je dois mettre par exemple color color_card c'est ça? Parce que je sais pas vraiment si color (enum) est censée etre un type. Je suis un peu perdu là dsl....


    Citation Envoyé par foetus Voir le message
    Et au passage, ton nommage est DÉGEU
    Moi ce que je fais c'est typedef struct s_XXXX {} t_XXX et typedef enum e_XXXX {} t_XXX.
    Ainsi ta structure et ton énumération commence par le préfixe t_ qui annonce 1 type.
    Pour le struct s_XXXX et enum e_XXXX, le nom est facultatif (si je ne dis pas de bêtises ) mais les suffixes e_ et s_ permettent de faire la distinction au cas où.

    Ensuite pour le nommage des valeurs, je rappelle le nom de l'énumération (pour éviter les collisions de noms autant que faire se peut puisqu'ils sont en global) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef enum e_color {
        COLOR_PIQUE = 0,
        COLOR_COEUR,
        COLOR_CARREAU,
        COLOR_TREFLE,
    } t_color
    Les majuscules, c'est pour le nommage "global" (1 "coding style" assez utilisé) et le = 0 c'est pour que les choses sont claires : la première valeur c'est 0 (mais dans ton code tu t'en fiches )
    Haha merci pour la remarque je vais changer ça.
    Merci beaucoup

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Citation Envoyé par emma34 Voir le message
    j'ai essayé plusieurs et bizarrement là ça marche lol
    Parce que le principe du tri, c'est de trier tri2(&a /*5*/,&b /*6*/);. Si tes données sont déjà dans l'ordre croissant, ton code ne fait rien parce que if(*px /*5*/ >*py /*6*/).


    Citation Envoyé par emma34 Voir le message
    Parce que je sais pas vraiment si color (enum) est censée etre un type. Je suis un peu perdu là dsl....
    Oui enum c'est 1 type particulier. Il permet d'avoir 1 variable qui n'accepte qu'1 ensemble de valeurs.
    Ces valeurs sont comme les macros, du texte (pas 1 chaîne de caractères) mais en interne ce sont des valeurs entières ... qu'on peux générer ou utiliser comme des drapeaux ("bit flags") par exemple.
    Mais les valeurs sont définies en global et comme c'est 1 type, d'où mes recommandations sur le nommage.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par emma34 Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void tri2(int* px, int* py){
        if(*px>*py){
            swap(px, py);
        }
        else{
            return;
        }
    }
    T'es sûre de ta logique là? "sinon quitter la fonction qui de toute façon sera quittée quoi qu'il arrive"...

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void tri2(int* px, int* py){
        if (*px > *py) swap(px, py);
    }

    Citation Envoyé par foetus Voir le message
    Pour le struct s_XXXX et enum e_XXXX, le nom est facultatif (si je ne dis pas de bêtises )
    C'est facultatif s'il y a un typedef. Sinon c'est obligatoire.
    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]

Discussions similaires

  1. [Turbo Pascal] Exercice sur les pointeurs : employés d'une société
    Par raton laveur dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 20/06/2015, 06h09
  2. Réponses: 1
    Dernier message: 24/03/2012, 20h26
  3. Problème de compréhension d'un exercice sur les pointeurs
    Par neufrdb dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 28/05/2011, 23h58
  4. besoin d aide sur un exercice sur les pointeurs
    Par azumachakib69 dans le forum C
    Réponses: 3
    Dernier message: 28/12/2006, 01h16

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