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 base 10 vers base 16 (et inversement)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 6
    Par défaut Conversion base 10 vers base 16 (et inversement)
    Bonjour à la communauté developpez.net

    Alors voilà, je fais des études en classe préparatoire mathématiques supplémentaires, je débute depuis moins d'une semaine en programmation sur c++ et j'essaie de faire un exercice de cours que j'ai bien avancé mais sur lequel je bloque par manque d'expérience.

    Je dois produire un algorithme et le coder en c++. Cet exercice a pour objectif de convertir un entier en base 10 vers la base 16 et inversement à travers un petit menu. A noter qu'il faut que je mémorise les digits acceptés en base 16 dans un vecteur de type caractère et que ce vecteur servira pour les deux sens de conversion.

    Algorithme:

    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
    programme conversion
    	choix : caractere
    	hexadecimal : chaîne
    	entiernaturel, k : entier
    debut
    	// boucle sur le menu
    	choix <- "Z"
    	tantque choix <> "Q" et choix <> "q"
     
    		// afficher le menu
    		afficher "conversion base 10 en base 16.....1"
    		afficher "conversion base 16 en base 10.....2"
    		afficher "quitter l'application.............Q"
    		saisir choix
     
    		// conversion de base 10 en base 16
    		si choix = "1" alors
    			hexadecimal <- ""
    			afficher "entrer un entier naturel = "
    			saisir entiernaturel
    			tantque entiernaturel <> 0
    				hexadecimal <- str(entiernaturel mod 16) + hexadecimal
    				entiernaturel <- entiernaturel div 16
    			fintantque
    			afficher "conversion en hexadecimal = " + hexadecimal
    		sinon
     
    			// conversion de base 16 en base 10
    			si choix = "2" alors
    				entiernaturel <- 0
    				k <- 0
    				afficher "entrer un nombre hexadecimal = "
    				saisir hexadecimal
     
    				tantque taille(hexadecimal) > 0
    					entiernaturel <- entiernaturel + val(droite(hexadecimal, 1)) * 16^k
    					hexadecimal <- gauche(hexadecimal, taille(hexadecimal)-1)
    					k <- k + 1
    				fintantque
    				afficher "conversion en base 10 = " + entiernaturel
    			finsi
    		finsi
     
    	fintantque
    fin
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    /* programme conversion
    *  but : convertir un entier naturel en hexadecimal et inversement
    *  auteur : td
    *  date : 03/01/2017
    */
     
    #include <iostream>
    #include <math.h>
    #include <string>
    #include <sstream>
     
    using namespace std;
     
    int main()
    {
        char choix ;
        string hexadecimal ;
        int entiernaturel ;
     
        // boucle sur le menu
        choix = 'Z' ;
        while (choix != 'Q' && choix != 'q')
        {
     
            // afficher le menu
            cout << endl << "conversion base 10 en base 16 .......... 1" ;
            cout << endl << "conversion base 16 en base 10 .......... 2" ;
            cout << endl << "quitter l'application................... Q" ;
            cout << endl << "votre choix ........................... " ;
            cin >> choix ;
     
            // conversion base 10 en base 16
            if (choix == '1')
            {
                hexadecimal = "" ;
                cout << "entrer un entier naturel = " ;
                cin >> entiernaturel ;
                while (entiernaturel != 0)
                {
                    // récupération du reste et conversion en caractère
                    char c = (entiernaturel%16) + '0' ;
                    // concaténation du caractère
                    hexadecimal = c + hexadecimal ;
                    entiernaturel = entiernaturel / 16 ;
                }
                cout << "conversion en hexadecimal = " + hexadecimal ;
            }
            else
            {
     
                // conversion base 16 en base 10
                if (choix == '2')
                {
                    entiernaturel = 0 ;
                    int k = 0 ;
                    cout << "entrer un nombre hexadecimal = " ;
                    cin >> hexadecimal ;
                    while (hexadecimal.size() > 0)
                    {
                        // extration du dernier caractère du nombre hexadecimal
                        string s = hexadecimal.substr(hexadecimal.size()-1, 1) ;
                        istringstream myStream(s);
                        int result ;
                        // conversion du caractère en entier naturel
                        myStream>>result ;
                        // ajout dans entiernaturel multiplié par la puissance de 16
                        entiernaturel += result * pow(16, k) ;
                        // on enlève le dernier caractère
                        hexadecimal = hexadecimal.substr(0, hexadecimal.size()-1) ;
                        k++ ;
                    }
                    cout << "conversion en base 10 = " << entiernaturel ;
                }
     
            }
     
         }
     
     
        return 0;
    }
    Merci d'avance!

    debprog01

  2. #2
    Membre Expert Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Par défaut motivations
    Bonjour,

    Le but du forum est de partager l'expérience et de s'ouvrir aux autres, pas de
    faire du message privé. Sinon il y a des cours privés pour cela, et dans ce cas tu dois monnayé le savoir du sachant.
    Si tu exposes ton code (partage) des personnes bien attentionnées
    partageront aussi leur savoir et t'aideront.

    Olivier

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 961
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 961
    Par défaut
    Bonjour,

    J'allais le dire.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 6
    Par défaut
    Désolé!

    Message initial modifié avec insertion de l'algorithme et du code c++

  5. #5
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    TU pourrais aussi nous dire quels problèmes tu rencontres.
    Enfin, en voilà un qui me saute aux yeux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char c = (entiernaturel%16) + '0' ;
    C'est sympas d'utiliser la table ascii mais encore faut-il la connaître. De 0 à 9 ça peut fonctionner mais ensuite il y a ':' ';' '<' ... et non 'A' 'B' 'C' ...

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 6
    Par défaut
    Bonjour,

    Merci de votre message!
    Je ne parviens pas à insérer le vecteur caractère destiné à mémoriser les digits acceptés en base 16 pour les deux sens de conversion.
    Aussi, lorsque je convertis 650 en base 16, cela m'affiche 28: au lieu de 28A.

    Cordialement,

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/09/2010, 09h13
  2. [débutant] besoin d'aide pour un programme
    Par acdchornet dans le forum C++
    Réponses: 12
    Dernier message: 26/10/2006, 22h32
  3. [Free Pascal] Besoin d'aide pour un programme
    Par ricomix dans le forum Free Pascal
    Réponses: 3
    Dernier message: 04/06/2006, 17h01
  4. aide pour un programme a compiler
    Par letombeur dans le forum C++
    Réponses: 8
    Dernier message: 11/01/2006, 21h53

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