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 :

faire un tableau avec des dates et valeurs correspondantes


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut faire un tableau avec des dates et valeurs correspondantes
    edit : je pensais poster sur le forum débutant. Je ne sais comment migrer mon message vers c++->débutant. Désolé pour la pollution :/

    Bonjour à tous,

    Je tâtonne sur c++ depuis quelques semaines et j'avoue qu'il est assez gratifiant de progresser petit a petit avec des buts simples.
    Jusqu'à présent je me suis servis de divers tutoriaux sur le net qui m'ont permit d'avancer. Mais là, j'avoue sécher sur mes recherches d'infos et j'en viens donc a poser ma question sur ce Forum.
    Je cherche la ou les manières de travailler avec un tableau de valeurs du type :
    2010 => 4.5,
    2011 => 4.2,
    2012 => 3.8,
    2013 => 3.4,
    2014 => 3.1
    bref un tableau avec des années et leurs valeurs correspondantes, sachant que ces valeurs doivent être renseignés par l'utilisateur du programme minimaliste que je me suis donné comme objectif pour mon apprentissage.
    J'ai beau fouiller google aucune piste m'a sauté aux yeux.
    en PHP par exemple j'aurais fait
    $tableau = array(2010=>4.5, 2011 => 4.2);
    et pour ajouter une valeur à mon tableau j'aurais fait $tableau[2014] = 3.1;
    En C++ je ne vois pas vraiment quel serait la procédure. Vers quoi orienter mes recherches ?
    Merci pour vos éventuels conseils.

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Il s'agit d'un dictionnaire, reliant des entrées à leur définition/valeur.
    Le nom classique est map.

    En C++, c'est std::map<Clé, Valeur>, si tu veux un tri sur les clés (un arbre ordonné), et std::unordered_map<Clé, Valeur> pour la table de hashage (hash table).

    Dans ton cas, je prendrais str::map<int, float> ou str::map<int, double>.

    Je t'invite à jeter un œil à:
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Je vais explorer ça de ce pas. Merci beaucoup d'avoir prit le temps de me répondre

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    il y a trois possibilités pratiques:
    En profitant du C++11
    Code c++11 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include<map>
    int main() {
        std::map<int, double> values = {
            {2010, 3.5},
            {2011, 7.4},
            {2012, 2.6},
        }
     
        //en faire quelque chose;
     
        return 0;
    }

    à l'ancienne: cas général
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <map>
    #include<utility>
    int main() {
        std::map<int, double> values;
        values.insert(std::make_pair(2010, 3.5));
        values.insert(std::make_pair(2011, 7.4));
        values.insert(std::make_pair(2012, 2.6));
     
        //en faire quelque chose;
     
        return 0;
    }
    à l'ancienne: cas où les valeurs ont une sémantique de valeur et un constructeur par défaut. (les entiers par exemple).
    Il faut bien comprendre qu'il y a des valeurs temporaires qui sont crées puis modifiées avec la valeur indiquée.
    C'est potentiellement couteux, voire impossible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include<map>
    int main() {
        std::map<int, double> values;
        values[2010]=3.5;
        values[2011]=7.4;
        values[2012]=2.6;
     
        //en faire quelque chose;
     
        return 0;
    }
    edit: pas #import, mais #include, merci r0d
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Tu es sûr pour #import?
    Je ne suis pas au courant de toutes les évolutions du c++11 et c++14, mais je n'ai jamais vu ça que pour des libs (pas pour des en-têtes), et que sous Windows.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    houla, non. C'est bien#include.

    Je code en java en même temps, c'est un peu galère...
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    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 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Mode HS

    @leternel, il y a au moins 1 autre solution

    Et je la donne juste pour vous faire grincer les dents
    Parce qu'elle est statique (*) et niveau performances (taille tableau ou vitesse) elle doit pêcher quelque part

    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
    enum {
         year_1 = 2010,
         year_2
    } ALL_YEARS;
     
     
    int main() {
        float values[] = {
            [year_1] = 4.5f,
            [year_2] = 4.2f,
            [2012] = 3.8f,
            [2013] = 3.4f,
            [2014] = 3.1f
        };
     
        printf("%d -> %.1f\n%d -> %.1f", year_1, values[year_1], 2012, values[2012]);
     
        return 0;
    }
    * -> Après on peut tricher si on a un intervalle d'années pas très large, et/ ou prévoir "une roue de secours"

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Et ca compile ca?

    parce que j'ai bien pensé au Cisme suivant (index décallé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    template <Type, int N>
    class shiftarray{
        int shift;
        Type values[N];
    public:
        explicit shiftarray(int shift) : shift(shift) {}
     
        int base() const {return shift;}
        Type& operator[](int i) {
            if (i<shift || i>=shift+N) throw std::out_of_range();
            return values[i-shift];
        }
    };
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  9. #9
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    N'oublions pas la question qui est posée, et notamment:
    Citation Envoyé par MrBidule Voir le message
    bref un tableau avec des années et leurs valeurs correspondantes, sachant que ces valeurs doivent être renseignés par l'utilisateur
    Donc, la map ne sera pas initialisée "en dur".
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  10. #10
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Donc une map avec insert, ou emplace.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

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

Discussions similaires

  1. générer tableau avec des dates en abcisses
    Par boonichou30 dans le forum Excel
    Réponses: 4
    Dernier message: 09/01/2013, 22h15
  2. Faire un tableau avec des divs
    Par identifiant_bidon dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 31/12/2012, 18h15
  3. Faire un tableau avec des div
    Par identifiant_bidon dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 29/12/2012, 11h31
  4. Comment faire un graphique avec des dates
    Par T-MAT dans le forum MATLAB
    Réponses: 3
    Dernier message: 03/01/2009, 10h35
  5. Réponses: 5
    Dernier message: 26/08/2006, 12h14

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