Partage
  • Partager sur Facebook
  • Partager sur Twitter

Conversion Décimal vers binaire

Transcodage entier décimal en binaire.

Sujet résolu
    16 novembre 2011 à 20:53:56

    Bonsoir à tous, :)
    Je suis quelqu'un qui débute en python et je suis bloqué sur un exercice qui consiste à transcoder un nombre Décimal en Binaire.

    J'ai réalisé un algo de mon programme:

    Citation

    Début
    Entier decimal,binaire,coef,result
    coef<- -1

    tq decimal>0 faire
    coef<-coef+1
    result<-decmimal MOD 2
    binaire<-(result*10^coef)+binaire
    decimal<-decimal DIV 2
    fin tq

    Afficher(binaire)


    L'algo me semble correct.

    Voici mon programme:(fait en python 3.2.2)

    # -*-coding:utf-8 -*-
    #programme de transcodage Décimal Binaire
    
    print ("Saisir une valeur décimale")
    dec=int(input())
    mem=dec
    c=-1
    binaire=0
    while(dec>0):
        c=c+1
        result=dec%2
        binaire=result*10**c+binaire
        dec=dec/2
    
    print (mem, "en binaire donne:" ,binaire)
    


    Je lance mon programme,j'entre la valeur à convertir.
    Saisir une valeur décimale
    12
    12 en binaire donne: 0.4

    et voilà :(
    Je pense qu'il doit y avoir un problème à cette ligne:
    binaire=result*10**c+binaire
    

    J'ai besoin d'un coup de main.
    Merci à l'avance
    ^^
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      16 novembre 2011 à 20:56:56

      C'est simplement pour vérifier que l'algo est correct ou quelquesoit la façon l'essentiel est le résultat?
      • Partager sur Facebook
      • Partager sur Twitter
        16 novembre 2011 à 21:03:22

        Je voudrais savoir les deux.
        Je pense que l'algo est bon mais je ne comprends pas pour le résultat. :o
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          16 novembre 2011 à 21:08:47

          Pour l'algorithme, tu peux regarder ce lien et modifier le tiens en fonction

          <> veut dire différent de
          • Partager sur Facebook
          • Partager sur Twitter
            16 novembre 2011 à 21:25:55

            Merci ,mais je suis toujours au même point. :(

            J'ai remplacé dans le while "<" par "!=0":
            while(dec!=0):
            


            et ça donne toujours la même chose.

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              16 novembre 2011 à 22:00:32

              En suivant naïvement

              def bin(n):
                  res = []
                  while n != 0:
                      res.append(str(n%2)) # ajoute dans ma liste le reste
                      n //= 2 # calcul de la nouvelle valeur de n
                  res.reverse() # j'inverse le résultat
                  return "".join(res) # transforme la liste en une chaine de caracteres
                  
              print(bin(25))
              print(int(bin(25), 2)) # transforme mon binaire en décimal
              
              • Partager sur Facebook
              • Partager sur Twitter
                16 novembre 2011 à 22:10:37

                Je comprend un peu mieux mais je n'ai pas encore appris à faire avec des fonctions comme res.append ; res.reverse...
                Pour l'instant je ne vois que la base du python en cours.(while,if,else...)

                Merci de m'avoir aidé. :)
                Bonne soirée. ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  16 novembre 2011 à 22:54:18

                  >>> a='101011'
                  >>> b=0
                  >>> for i in a: b=b*2+int(i)
                  ...
                  >>> b
                  43
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Python c'est bon, mangez-en. 

                  Anonyme
                    16 novembre 2011 à 23:05:27

                    c'est du décimal au binaire ;)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 novembre 2011 à 23:32:16

                      mouarf ! >_<


                      on pense jamais à divmod() ...

                      >>> a = 43
                      >>> b = ''
                      >>> while a:
                      ...     a,c = divmod(a,2)
                      ...     b = str(c)+b
                      ... 
                      >>> print(b)
                      101011
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Python c'est bon, mangez-en. 

                        17 novembre 2011 à 6:47:00

                        n4 = input("le nombre en base 10: ")
                        base2= ''
                        while n4!= 0:
                            if n4 % 2 != 0:
                                n4 = int(n4/2)
                                base2 =('1')+base2
                            else:
                                n4 = n4/2
                                base2 = ('0')+base2
                        
                        print(base2)
                        


                        c'est un truc que j'ai fait il y a pas longtemps pour mon cours de méthodologie de programmation (oui moi je le fait en python puis je traduit vers le francais x) )

                        je te laisse comprendre sinon ça serait trop facile :p

                        J'ai aussi un code qui peut transformer une base 10 vers n'importe quel autre base y compris la base 16 ^^


                        Sinon oui divmod mais je pense qu'en débutant la progra il faut faire travailler ses neurone et pas utiliser les fonctions existante ^^
                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 novembre 2011 à 10:19:57

                          Pour trouver l'écriture binaire d'un nombre, il faut remarquer deux choses :
                          • Le bit de poids le plus faible (le plus à droite dans l'écriture classique) indique la parité du nombre. Par exemple, le nombre <math>\({100101}_2\)</math> est impair car son bit de poids le plus faible est 1.
                          • Pour supprimer le bit de poids le plus faible d'un nombre, il suffit de le diviser par deux (au sens division entière).


                          A partir de là, même plus besoin de réfléchir :
                          def dec2bin(n) :
                            """ Returns the list of the binary bits of n """
                            b = []
                            m=n
                            while m != 0 :
                              b.append(m%2) #append method add the argument at the end of the list
                              m /= 2
                          
                            b.reverse() #reverse method reverse the order of the list
                            return b #b is now in the correct bits order for reading
                          
                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 novembre 2011 à 11:15:47

                            Citation : Creatortag21


                            J'ai aussi un code qui peut transformer une base 10 vers n'importe quel autre base y compris la base 16 ^^



                            j' aimerai bien le voir ...

                            Citation : Creatortag21


                            Sinon oui divmod mais je pense qu'en débutant la progra il faut faire travailler ses neurone et pas utiliser les fonctions existante ^^



                            alors sans divmod() ça donne avec en prime un élargissement des bases:

                            bstring = '0123456789abcdefghijklmnopqrstuvwxyz'
                            base = 2 #choisir une 0<base<37
                            a = 43 # entrer un nombre
                            b = ''
                            while a:
                                #a,c = divmod(a,base)
                                b = bstring[a % base]+b
                                a //= base
                            
                            print(b)
                            

                            ça ne change rien à l'algo, ce n'est pas comme si j'avais utilisé bin().

                            d' ailleurs, c'est exactement ce que fait ton code (ci-dessous, je me suis permis des petites corrections) les tests inutiles en moins.
                            n4 = int(input("le nombre en base 10: "))
                            base2= ''
                            while n4:
                                if n4 % 2:
                                    n4 = n4//2
                                    base2 =('1')+base2
                                else:
                                    n4 = n4/2
                                    base2 = ('0')+base2
                            
                            print(base2)
                            
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Python c'est bon, mangez-en. 

                              17 novembre 2011 à 19:09:50

                              Mdr pourquoi tu veux mon code alors que tu viens de le faire ;D

                              mais je le colle quand même :p

                              b = "0123456789ABCDEF"
                              n = input('Le nombre: ')
                              b1 = input('La base: ')
                              
                              nb =""
                              while n != 0:
                                  n2 = n%b1
                                  nb = b[n2]+nb
                                  n =int(n/b1)
                              
                              print nb
                              


                              je suis allé jusqu'a F vais pas commencer a mettre AA AB etc sinon on en fini pas ;D tant qu'on as le principe c'est bon ;D
                              • Partager sur Facebook
                              • Partager sur Twitter
                                17 novembre 2011 à 22:55:05

                                Citation : Creatortag21

                                Mdr pourquoi tu veux mon code alors que tu viens de le faire ;D



                                autant pour moi, j'avais mal lu ...
                                j'avais compris pour convertir n'importe quelle chaîne en base 10.
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Python c'est bon, mangez-en. 

                                Conversion Décimal vers binaire

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown