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 :

Structures à utiliser pour un exercice


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 10
    Par défaut Structures à utiliser pour un exercice
    Bonjour, je viens ici car j'ai une question et je ne comprends pas bien le fonctionnement.

    J'ai un exercice à réaliser avec une structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct SwiStruct {
      int ref;
      int nb_ports;
      int constr;
      int speed;
      float energy;
      float prix;
      int qte;
    };
    et voici les valeurs que je dois définir pour cette structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    {34215637, 8, 001, 256, 1.8, 123.59, 12},
    {34215641, 64, 001, 512, 4.2, 223.59, 45},
    {34215117, 8, 010, 256, 2.1, 93.59, 116},
    {34215118, 2, 001, 64, 0.8, 23.59, 2},
    {34200007, 24, 001, 256, 1.8, 123.59, 212},
    {34214637, 8, 012, 256, 1.8, 49.99, 342},
    {34200017, 32, 100, 256, 2.58, 183.49, 89} ,
    {34225637, 4, 101, 256, 1, 33.59, 62} ,
    {14215637, 16, 101, 256, 1.4, 89.49, 592}
    Comment faire pour définir ma structure avec toutes ces valeurs ?

    Merci à vous.

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 771
    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 771
    Par défaut
    Il faut faire 1 tableau

    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
    55
    56
    57
    58
    59
    60
    61
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct s_SwiStruct {
      int ref;
      int nb_ports;
      int constr;
      int speed;
      float energy;
      float prix;
      int qte;
    } t_SwiStruct;
     
     
    #define IS_EMPTY_ELEMENT(ONE_ELEMENT) ((ONE_ELEMENT->ref == 0) && (ONE_ELEMENT->nb_ports == 0) && \
                              (ONE_ELEMENT->constr == 0) && (ONE_ELEMENT->speed == 0) && \
                              (ONE_ELEMENT->energy == 0.0) && (ONE_ELEMENT->prix == 0.0) && \
                              (ONE_ELEMENT->qte == 0))
     
     
    void display(t_SwiStruct* one_element) {
        if (one_element != NULL) {
            printf("%d, %d, %d, %d, %f, %f, %d\n", one_element->ref, one_element->nb_ports,
                one_element->constr, one_element->speed, one_element->energy,
                one_element->prix, one_element->qte);
        }
    }
     
     
    /*****************************************************************************/
    /***********************************  Main  **********************************/
    /*****************************************************************************/
     
    int main(int argc, char** argv)
    {
        t_SwiStruct list_elements[] = {
            {34215637, 8, 001, 256, 1.8, 123.59, 12},
            {34215641, 64, 001, 512, 4.2, 223.59, 45},
            {34215117, 8, 010, 256, 2.1, 93.59, 116},
            {34215118, 2, 001, 64, 0.8, 23.59, 2},
            {34200007, 24, 001, 256, 1.8, 123.59, 212},
            {34214637, 8, 012, 256, 1.8, 49.99, 342},
            {34200017, 32, 100, 256, 2.58, 183.49, 89} ,
            {34225637, 4, 101, 256, 1, 33.59, 62} ,
            {14215637, 16, 101, 256, 1.4, 89.49, 592},
            {0, 0, 0, 0, 0.0, 0.0, 0} // sentinelle
        };
     
        t_SwiStruct* elt;
     
        elt = list_elements;
     
        while ( !IS_EMPTY_ELEMENT(elt) ) {
            display(elt);
     
            ++elt;
        }
     
     
        return EXIT_SUCCESS;
    }

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 10
    Par défaut
    Merci beaucoup ! Cela marche parfaitement avec ce que j'ai réalisé.

    Un peu bête de ma part de ne pas y avoir pensé...

    Si je peux abuser un petit peu, je dois afficher le tableau trié par ordre croissant selon le 5è champ (energy).
    Même en lisant la doc, j'ai du mal à comprendre son fonctionnement. Serait-il possible de me l'expliquer ?

    Encore merci de votre temps et vous m'ôtez une énorme épine du pied !

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 771
    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 771
    Par défaut
    Attention à ma solution parce que c'est 1 tableau constant

    Je suis presque sûr qu'on ne peut pas ajouter ou supprimer d'éléments.
    Et ensuite, on peut peut-être modifier les valeurs des éléments

    Pour ton tri, c'est trivial : tu prends n'importe quel tri (tri rapide, tri à bulles, tri sélectif, tri par insertion, ...) mais
    • Les tests vont porter sur le membre enegy if (elt1->energy <= elt2->energy) par exemple
    • lors d'échange de 2 éléments, il faut recopier tous les membres. Donc il faut avoir 1 fonction void swap_2_elements(t_SwiStruct*, t_SwiStruct*).
    • Peut-être même avoir 1 petite bibliothèque pour faire des choses de base : copier, échanger, tester en fonction d'1 membre, ... voire même des structures spécifiques comme 1 tableau, 1 pile par exemple pour ajouter ou supprimer 1 élément, inverser des éléments, partager ou fusionner 2 structures, ...

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Si l'exercice consiste à utiliser la fonction qsort(), il faut :
    a) définir une fonction qui indiquera comment trier sur le champ energy qui pourrait s'appeler int compare_energy_of_SwiStruct(const void*, const void*).
    b) appeler la fonction qsort() en lui passant les bons paramètres, et le dernier des 4 est justement la fonction compare_energy_of_SwiStruct.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Citation Envoyé par foetus Voir le message
    Je suis presque sûr qu'on ne peut pas ajouter ou supprimer d'éléments.
    Exact.

    Citation Envoyé par foetus Voir le message
    Et ensuite, on peut peut-être modifier les valeurs des éléments
    Oui, on peut. Ton tableau c'est exactement comme écrire int tab[]={1, 2, 3}; tab[0]=5.

    Citation Envoyé par foetus Voir le message
    Peut-être même avoir 1 petite bibliothèque pour faire des choses de base : copier, échanger, tester en fonction d'1 membre, ... voire même des structures spécifiques comme 1 tableau, 1 pile par exemple pour ajouter ou supprimer 1 élément, inverser des éléments, partager ou fusionner 2 structures, ...
    Hum... je pense que tu as perdu le PO...
    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]

  7. #7
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 10
    Par défaut
    Merci à tous pour vos réponses, ça marche du feu de dieu pour le moment !

    Si j'ai d'autres problèmes concernant la suite de mon exercice, je peux continuer à m'adresser à vous ?

  8. #8
    Membre chevronné
    Homme Profil pro
    très occupé
    Inscrit en
    Juillet 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : très occupé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 137
    Par défaut
    Citation Envoyé par foetus Voir le message
    • lors d'échange de 2 éléments, il faut recopier tous les membres. Donc il faut avoir 1 fonction void swap_2_elements(t_SwiStruct*, t_SwiStruct*).
    en, C, on peut copier le contenu d'une struct vers une autre de même type avec l'opérateur =

    à moins d'avoir à faire des traitements intermédiaires (ce qui n'est pas le cas si la copie est à l'identique), créer une fonction ne me parait pas nécessaire.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Faire un swap c'est assigner b à un temporaire, puis assigner a à b, puis assigner le temporaire à a.
    Créer une fonction est un minimum de bon sens si on fait ça plus de 1 fois. Ou tout simplement pour avoir plus de lisibilité dans le code.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 676
    Par défaut
    Bonjour,

    Citation Envoyé par IdiCoda Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    {34215637, 8, 001, 256, 1.8, 123.59, 12},
    {34215641, 64, 001, 512, 4.2, 223.59, 45},
    {34215117, 8, 010, 256, 2.1, 93.59, 116},
    {34215118, 2, 001, 64, 0.8, 23.59, 2},
    {34200007, 24, 001, 256, 1.8, 123.59, 212},
    {34214637, 8, 012, 256, 1.8, 49.99, 342},
    {34200017, 32, 100, 256, 2.58, 183.49, 89} ,
    {34225637, 4, 101, 256, 1, 33.59, 62} ,
    {14215637, 16, 101, 256, 1.4, 89.49, 592}
    Il y a des valeurs octales dans ces structures, est-ce normal ?

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kaitlyn Voir le message
    Il y a des valeurs octales dans ces structures, est-ce normal ?
    Je pencherais plutôt pour des valeurs décimales affichées sur 3 digits. Certes en C l'instruction int i=012 remplit "i" avec une valeur codée en octal, mais là il nous a présenté des valeurs "brutes" (comme si elles venaient d'un fichier ou d'une liste) donc sans lien avec une quelconque convention C et donc présumées être écrites en décimal.
    De fait, si tu lis un fichier contenant une string "012" et que tu convertis cette string en int sans spécifier quoi que ce soit à la fonction de conversion, tu obtiens la valeur 12 et non 10.
    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]

  12. #12
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 10
    Par défaut
    Citation Envoyé par kaitlyn Voir le message
    Bonjour,



    Il y a des valeurs octales dans ces structures, est-ce normal ?
    Oui. Certains champs ont des tailles spécifiques, notamment 3 chiffres pour le constructeur.

  13. #13
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 676
    Par défaut
    Suite aux second et troisième messages de la discussion, tu sembles utiliser une source dans laquelle un tableau a été initialisé avec ces valeurs, d'où ma remarque.
    Si tu affiches par exemple list_elements[2].constr (éventuellement avec un printf), tu comprendras.

  14. #14
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 10
    Par défaut
    Les 00 situés devant disparaissent. Comment les forcer à rester ?

  15. #15
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 676
    Par défaut
    Non c'est pire que ça, et ton modèle de structure étant imposé (int constr; ) tu ne peux remettre tes 0 qu'à l’affichage, par contre, pour une initialisation, il faut les enlever.
    C'est là qu'est toute la différence entre la gestion en interne de données et leur présentation (à l'utilisateur). C'était peut-être un piège.

    petite illustration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct {int x, y;} 
        s= {  010, 10};
     
    printf("s.x: %03d (!)\ns.y: %03d", s.x, s.y);

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

Discussions similaires

  1. Quelle structure utiliser pour manier ces données
    Par marcelin88 dans le forum Débuter
    Réponses: 8
    Dernier message: 26/03/2014, 15h12
  2. Réponses: 4
    Dernier message: 24/09/2010, 00h13
  3. Structure utilisée pour la gestion de graphes
    Par SandyF dans le forum VB.NET
    Réponses: 10
    Dernier message: 05/08/2010, 12h46
  4. Quelle Structure utiliser pour un tri croissant
    Par sunp dans le forum Langage
    Réponses: 6
    Dernier message: 30/04/2008, 14h19
  5. Réponses: 1
    Dernier message: 28/10/2006, 13h05

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