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 : 1313
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 : 2701
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 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 130
    Points : 33 063
    Points
    33 063
    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.

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    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.

  4. #4
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 130
    Points : 33 063
    Points
    33 063
    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.

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    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>)

  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 : 43
    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 : 50
    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...

  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 : 43
    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, 10h29
  2. Réponses: 3
    Dernier message: 15/06/2014, 01h30
  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, 23h17
  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, 14h56

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