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 :

Conversion de base n à base 10 et l'inverse.


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 2
    Par défaut Conversion de base n à base 10 et l'inverse.
    Salut tout le monde,

    J'ai vu quelques post sur ce sujet mais aucun n'a su répondre à mon problème avec les connaissances que j'ai.

    Donc, je dois écrire un programme en c++ qui convertit des nombres d'une base à l'autre.
    Si l'utilisateur entre un nombre en base 10, le programme doit convertir le nombre en une base choisie par l'utilisateur (entre 2 et 9), et si l’utilisateur entre un nombre en base (entre 2 et 9), le programme doit le transformer en base 10.

    J'ai aucun problème à faire la conversion sur papier, mon problème est vraiment au niveau de la programmation.

    J'ai une bonne idée des étapes à faire mais je ne sais pas comment les programmer.

    Le problème que je n'ai pas réussi à résoudre jusqu'à maintenant est:

    Comment on peut séparer un nombre (qui peut varier en nombre de caractères, selon ce que l'utilisateur entre) en chacun de ses chiffres, et ensuite prendre chacun des chiffres et effecteur des opérations pour obtenir la nouvelle base?

    exemple :
    Si l'utilisateur entre 2734, il faut le séparer en 2 7 3 4 (avec les modulos j'imagine) et ensuite prendre chacun des chiffres pour faire :

    2*(base)^3+7*(base)^2+3*(base)^1+4*(base)^0 bref.. changer le nombre de base.


    j'espère que j'ai été précis
    Merci pour l'aide!

  2. #2
    Membre émérite
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par défaut
    Bonjour,

    Citation Envoyé par MathieuJD Voir le message
    J'ai une bonne idée des étapes à faire mais je ne sais pas comment les programmer.
    C'est ça le gros du travail : Transformer la vague idée en algorithme, i.e. en quelques chose de programmable.

    Écrire du pseudo code avant de te lancer dans du C++ et faire tourner l'algorithme sur papier pourra t'aider (autant que rechercher "algorithme décomposition base n").

  3. #3
    Membre éprouvé Avatar de KsassPeuk
    Homme Profil pro
    Ingénieur Chercheur
    Inscrit en
    Juillet 2013
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 138
    Par défaut
    Lu'!

    Si ton nombre est dans un entier, c'est très simple : le modulo 10 nous donne le dernier chiffre, la division par 10 le nombre actuel, amputé de son dernier chiffre. 2734%10 == 4, 2734/10 == 273 (et on peut recommencer).

    Par contre, j'ai l'impression que tu n'as pas bien saisi le principe du changement de base. Cela ne consiste pas à prendre chacun des chiffres et à le changer de base, c'est bien ton nombre (en entier) que tu changes de base. Tu devrais relire un petit cours à ce sujet .

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Le plus simple pour "changer un nombre de base", c'est de convertir son expression (une chaîne de caractères) en vrai nombre (qui n'a pas de base), puis l'exprimer dans la base désirée.

    Pour lire un nombre en base N, l'algorithme est simple:
    • On commence avec résultat=0
    • Pour chaque chiffre lu,
      • on multiplie le résultat par N
      • et on ajoute le chiffre.

    C'est plus compliqué pour l'afficher, car il faut afficher les chiffres dans l'ordre inverse de leur calcul:
    • On réserve un tableau (ou un std::vector) pour les chiffres
    • Tant que nombre != 0
      • On ajoute nombre modulo N au tableau
      • On divise nombre par N
    • Puis on parcoure le tableau à l'envers
      • Et on affiche chaque chiffre.

    On peut aussi le faire récursivement, mais ce n'est pas ce que je conseillerais à un débutant.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 2
    Par défaut
    Salut tout le monde!

    Merci beaucoup avec votre aide j'ai presque fini mon programme!

    Un dernier problème à résoudre et j'aurai fini!

    Le voici :

    J'ai mes valeurs dans un <vector>, qui affiche le bon chiffre, mais dans le mauvais ordre!

    Comment je pourrais faire pour qu'il affiche "1234" à la place de "4321"?
    Je crois qu'il y a une fonction pour ça, mais peut-on le faire manuellement?

    Merci

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En itérant le vecteur avec rbegin() au lieu de begin()?
    Ou encore avec une boucle de pop_back() jusqu'à ce que le vecteur soit vide?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    Ou bien encore, en insérant par l'autre bout.

    Attention, toute fois, avec vector, il vaut mieux privilégier push_back().

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    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 147
    Billets dans le blog
    4
    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.

Discussions similaires

  1. Conversion BASE 16 à BASE 2
    Par katrena99 dans le forum Pascal
    Réponses: 3
    Dernier message: 16/04/2007, 23h09
  2. Réponses: 2
    Dernier message: 16/02/2007, 21h34
  3. Conversion base 2 base 10
    Par jcaspar dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 23/01/2007, 19h24
  4. Conversion base 16 => base 10
    Par perchman dans le forum Général Python
    Réponses: 2
    Dernier message: 22/01/2007, 19h07
  5. conversion access vers autre base de données
    Par Anthony17 dans le forum Access
    Réponses: 1
    Dernier message: 16/06/2006, 13h50

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