Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Algorithme du décimal à l'héxadécimal



  1. #1
    cloy

    Wink Algorithme du décimal à l'héxadécimal


    ------

    Bonjour à tous,
    J'aimerais réaliser un algorithme qui permettrait de convertir un nombre en base 10 en son équivalent en base 16.
    J'ai réalisé une ébauche, sachant que je dois utiliser la division successive, mais je n'arrive pas au bout de l'algorithme...
    Un peu d'aide serait la bienvenue
    Voici mon ébauche :

    debut
    declarer A, B, C, D, E, F : entiers ;
    declarer Dec, Hex, Q, r : reels ;
    A <- 10 ;
    B <- 11 ;
    C <- 12 ;
    D <- 13 ;
    E <- 14 ;
    F <- 15 ;
    afficher "Entrer la valeur du nombre décimal : " ;
    saisir Dec ;
    tant que (Q>=16)
    faire
    q <- floor(partie entière) (Dec/16)
    r <- Dec-Q/16
    Dec <- Q
    ffaire

    ...

    fin

    -----

  2. #2
    whoami

    Re : Algorithme du décimal à l'héxadécimal

    Bonjour,

    Fais un exemple à la main, en notant l'évolution des variables, et tu auras ton algorithme.

  3. #3
    cloy

    Re : Algorithme du décimal à l'héxadécimal

    En fait j'ai déjà essayé, mais ça ne m'a pas mené à grand chose :

    5283= 1*103+1187
    1187= 4*162+163
    163= 10*16+3
    Donc 5283 = 14A3

    Je n'arrive vraiment pas à le traduire... :/

  4. #4
    whoami

    Re : Algorithme du décimal à l'héxadécimal

    Bonjour,

    C'est un de mes jours de bonté.

    Voici le fichier que je donne à mes élèves qui ont des problèmes avec les conversions de base :

    Code:
    Calcul dans différentes bases
    
    Conventions
    
    Dans tout ce document, on va utiliser les notations suivantes:
    
    Le symbole ^ signifie 'élever à la puissance'
    par exemple 10^3 signifie 'élever 10 à la puissance 3' c'est à dire 10*10*10 = 1000
    
    Un nombre suivi par
    #B est écrit en base 2  (B pour binaire)
    #H est écrit en base 16 (H pour Hexadécimal)
    sans précision, il est écrit en base 10
    
    Le symbole * signifie 'multiplier'
    
    Dans les calculs, pour les divisions :
      Q signifie Quotient
      R signifie Reste
    
    Rappel : Tout nombre élevé à la puissance 0 (zéro) vaut 1
    (10^0 = 2^0 = 16^0 = 1)
    
    
    
    Quand nous écrivons un nombre, par exemple 573, cela signifie qu'il est égal à la somme:
    
      3 * 10^0  = 3*1    =    3
    + 7 * 10^1  = 7*10   =   70
    + 5 * 10^2  = 5*100  =  500
                           -----
                            573
                            
     
    On peut transcrire cela dans une autre base, par exemple en base 2
    
    On ne disposera alors que de 2 symboles, 0 et 1.
    Les chiffres en partant de la DROITE signifieront :
    0 ou 1 * 2^0
             2^1
             2^2
             2^3
             etc...
             
    Soit le nombre 1000111101#B, calculons sa valeur en base 10
    
      1 * 2^0  = 1
    + 0 * 2^1  = 0
    + 1 * 2^2  = 4
    + 1 * 2^3  = 8
    + 1 * 2^4  = 16
    + 1 * 2^5  = 32
    + 0 * 2^6  = 0
    + 0 * 2^7  = 0
    + 0 * 2^8  = 0
    + 1 * 2^9  = 512
                -----
                 573
                 
    On peut utiliser une autre base, 16.
    Il nous faut alors 16 symboles pour représenter les différents 'chiffres'.
    Par convention, on a choisi d'utiliser 0 à 9, puis A à F
    
    A vaut donc 10 (décimal)
    B = 11
    C = 12
    D = 13
    E = 14
    F = 15
    
    Avec le même principe que pour la base 2, voyons le nombre 23D#H
    
      D * 16^0 =  13
    + 3 * 16^1 =  48
    + 2 * 16^2 = 512
                -----
                 573
                 
    Le passage d'une base quelconque en base 10 est donc très simple.
    
    
    
    
    Voyons maintenant comment passer de la base 10 à une autre, exemple en base 16.
    
    La technique suivante permet de trouver les chiffres successifs en partant de la DROITE.
    
    soit le nombre 573.
    Divisons le par la base destination, soit 16
    573 / 16 = 35(Q) + 13(R)
      le reste = 13 = D#H est le premier chiffre à droite de la valeur cherchée
      
    répétons le calcul avec le quotient du calcul précédent (35)
    35 / 16 = 2(Q) + 3(R)
      le reste = 3 = 3#H est le deuxième chiffre en partant de la droite
      
    et encore une fois :
    2 / 16 = 0(Q) + 2(R)
      le reste = 2 = 2#H est le troisième chiffre en partant de la droite
      
    Comme le quotient = 0, on peut arrêter.
    
    Le nombre 573 s'écrit donc 23D#H
    
    En supprimant les commentaires, on obtient une disposition claire:
               
              (Q)   (R)   (R en base 16)
    573 / 16 = 35 + 13      D
     35 / 16 =  2 +  3      3
      2 / 16 =  0 +  2      2
      
      On lit les restes de bas en haut = 23D#H
      
      
    Refaisons le calcul pour écrire 573 en base 2
    
              (Q)    (R)
    573 / 2 = 286   + 1
    286 / 2 = 143   + 0
    143 / 2 =  71   + 1
     71 / 2 =  35   + 1
     35 / 2 =  17   + 1
     17 / 2 =   8   + 1
      8 / 2 =   4   + 0
      4 / 2 =   2   + 0
      2 / 2 =   1   + 0
      1 / 2 =   0   + 1
      
      terminé puisque le quotient = 0
      
      et donc en lisant les restes de bas en haut, la valeur est 1000111101#B
      
    
    Voilà, j'espère que c'est assez clair.

  5. A voir en vidéo sur Futura
  6. #5
    jiherve

    Re : Algorithme du décimal à l'héxadécimal

    Bonjour,
    autre solution : diviser l'entier m à convertir par 2^n (n est le nombre de bits tel que 2^n > m et n de la forme 4*k) on obtient donc un nombre compris entre 0 et 1 la conversion s'effectue en multipliant par 16, on récupère la partie entière c'est le premier nibble(MSB), on remultiplie la partie fractionnaire par 16, on aura le second nibble etc etc

    avantages :
    4 bits par itération
    fonctionne de façon évidente avec les fractionnaires
    JR
    l'électronique c'est pas du vaudou!

  7. #6
    cloy

    Re : Algorithme du décimal à l'héxadécimal

    D'accord, merci beaucoup
    Ce qui me bloquait principalement c'était la syntaxe et surtout le langage que je devais utiliser, mais il me semble avoir trouver une solution.
    Je vous la posterai demain, il se fait déjà tard !

Discussions similaires

  1. Conversion hexadécimal en décimal programme en C
    Par phlauw dans le forum Électronique
    Réponses: 7
    Dernier message: 13/01/2013, 14h46
  2. Conversion hexadécimal en décimal programme en C
    Par phlauw dans le forum Électronique
    Réponses: 1
    Dernier message: 12/01/2013, 21h59
  3. Conversion decimal vers hexadécimal
    Par MAXWELL27 dans le forum Mathématiques du collège et du lycée
    Réponses: 2
    Dernier message: 27/02/2011, 20h36
  4. convertion (decimal-hexadecimal)
    Par TaRiKq dans le forum Électronique
    Réponses: 1
    Dernier message: 29/02/2008, 22h57