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 :

Décomposition de nombre


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Assistant d'éducation
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistant d'éducation

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Décomposition de nombre
    Bonjour,

    j'écrit sur ce forum car je me retrouve face à un petit soucis concernant un exercice à réaliser en C++.

    Le but est de créer un programme qui permet de saisir un nombre entier naturel et qui affiche la position, en partant de la droite (premier chiffre de droite en position 0), de chaque chiffre dans ce nombre.

    Exemple, si je saisit 7377683
    Le programme indiquera :
    Nom : Capture.PNG
Affichages : 1249
Taille : 1,9 Ko

    De plus, je dois utiliser seulement des variables numériques.

    Voici mon problème, mon code fonctionne bien cependant, lorsque des chiffres se répète comme 7 et 3 dans l'exemple, je n'arrive pas à obtenir les positions sur la même ligne.
    Nom : Capture.PNG
Affichages : 2578
Taille : 20,3 Ko

    Merci d'avance pour votre aide

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 116
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    à partir du moment où tu espères avoir une liste de positions, il te faudrait au minimum un vector.
    Tu as 10 chiffres possibles, donc un tableau de 10 vector fera très bien l'affaire std::vector<int> a[10]. Tu détectes quel chiffre est à traiter avec un modulo et tu push_back sa position.

    ps: le code se poste via les balises POST et non en image, merci.
    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.

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,
    Citation Envoyé par Bousk Voir le message
    Salut,

    Tu as 10 chiffres possibles, donc un tableau de 10 vector fera très bien l'affaire std::vector<int> a[10].
    A ceci près que chaque chiffre peut être présent plus d'une fois dans un nombre (mais que l'on ignore le nombre de fois où il apparaîtra )

    Nous sommes donc peut-être dans un des rares cas dans lequel un std::vector<std::vector<int>> (voir un std::array<std::vector<int>, 10> ) pourrait s'avérer utile, vu qu'il faut maintenir toutes les positions, et que le nombre de positions peut varier pour chaque chiffre.
    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

  4. #4
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 116
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par koala01 Voir le message
    A ceci près que chaque chiffre peut être présent plus d'une fois dans un nombre (mais que l'on ignore le nombre de fois où il apparaîtra )
    D'où le tableau de 10 vector, puisqu'il n'existe toujours que 10 chiffres : 0-9
    Inutile d'avoir un vector de vector ici, une des dimensions est fixe.

    un std::array<std::vector<int>, 10> serait effectivement plus sexy à l'écriture.
    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.

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par Bousk Voir le message
    D'où le tableau de 10 vector, puisqu'il n'existe toujours que 10 chiffres : 0-9
    Inutile d'avoir un vector de vector ici, une des dimensions est fixe.
    Oupss... Au temps pour moi... je n'avais pas vu le [10] (je m'étais arrêté à std::vector<int>)
    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

  6. #6
    Futur Membre du Club
    Homme Profil pro
    employé administratif
    Inscrit en
    Janvier 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : employé administratif
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2018
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    Salut,

    J'ai fait une tentative avec vecteurs (je précise que je ne suis pas développeur, j'apprends ... ), valide tant qu'on ne dépasse pas 232 - 1 (4294967295).

    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
     
    #include <iostream>
    #include <vector>
     
    using namespace std;
     
     
    int main() {
     
        unsigned int d;
        vector <unsigned int> t; // Vecteur qui contiendra le nombre à entrer
        vector <unsigned int> z; // Vecteur qui contiendra "t" sans les doublons.
     
        cout << "Entrez un nombre : ";
        cin >> d;
     
     
        while (d!=0)
        {
            t.push_back(d%10);
            d /= 10;
     
        }
     
     
        for (unsigned int i=0; i<t.size(); i++){
     
           for (unsigned int k=0; k<z.size(); k++)
                if (z[k] == t[i])
                    goto suite;
     
            cout << t [i] << " : " << i << " ";
     
            for (unsigned int j=i+1; j<t.size(); j++)
                if (t[j] == t[i])
                    cout <<  j << " ";
     
           z.push_back(t[i]);
           cout << endl;
           suite:
           ;
     
        }
     
    }

  7. #7
    Candidat au Club
    Homme Profil pro
    Assistant d'éducation
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistant d'éducation

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Etant au tout début de mon apprentissage sur ce langage, je n'ai vraiment pas cette notion !! J'ai l'impression que ce que vous proposez est plus agréable à utiliser !

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Là, on ne demande pas de stocker quoi que ce soit, juste de faire de l'affichage...
    Et rien n'empêche de boucler 10 fois sur le même nombre, une fois pour afficher les 0, une pour afficher les 1...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    employé administratif
    Inscrit en
    Janvier 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : employé administratif
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2018
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    Hello,

    Effectivement, j'ai mal interprété. Je pensais que l'affichage des chiffres devait être ordonné de droite à gauche ...

    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
     
    #include <iostream>
    #include <vector>
     
    using namespace std;
     
    int main() {
     
        unsigned f = 1;
        vector <unsigned> nb;
        unsigned int n;
     
        cout << "Entrez un nombre : ";
        cin >> n;
     
        if (n == 0)
            nb.push_back(n);
     
        while (n!=0)
        {
            nb.push_back(n%10);
            n /= 10;
     
        }
     
     
        for (int i=0; i<10; i++){
            for (int j=0; j<nb.size(); j++)
                if (nb[j] == i){
                    if (f == 1){
                        cout << nb[j] << " : ";
                        f = 0;
                    }
                    cout << j << " ";
                }
            if (f == 0)
                cout << endl;     
            f = 1;
        }
     
    }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/10/2015, 09h29
  2. Réponses: 3
    Dernier message: 15/06/2014, 00h30
  3. [Turbo Pascal] Exercice/programme sur les boucles et booléens
    Par uncalamarroux dans le forum Turbo Pascal
    Réponses: 6
    Dernier message: 11/12/2010, 22h17
  4. Sujet exercice programmation linéaire
    Par bruce-willis dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 14/09/2009, 13h56

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