Menu

Algorithme conversion binaire décimal [Fermé]

badboy - 10 févr. 2011 à 04:36 - Dernière réponse :  iBRAcc!
- 28 oct. 2014 à 00:55
Bonjour,

je cherche a trouver la solution d'un algorithme qui prend en entrée une séquence de chiffres binaires et qui donne comme résultat le nombre décimal correspondant


merci de votre aide

Afficher la suite 

13 réponses

flo13142 72 Messages postés mardi 7 décembre 2010Date d'inscription 21 février 2011 Dernière intervention - 11 févr. 2011 à 08:26
+2
Utile
1
voici la traduction en pseudo algo
res= 0
puis= 1
Pour i = longueur (seqBin) à 0 faire
res= res + seqBin[i] *puis
puis = puis * 2 
fin pour
afficher res

Cette réponse vous a-t-elle aidé ?  
ccm81 8346 Messages postés lundi 18 octobre 2010Date d'inscription 26 avril 2018 Dernière intervention - 11 févr. 2011 à 12:14
re,
l'algorithme de flo13142 commence a traiter le nombre par la droite, ce qui te fait maintenant 3 méthodes differentes,
bonne suite
flo13142 72 Messages postés mardi 7 décembre 2010Date d'inscription 21 février 2011 Dernière intervention - 10 févr. 2011 à 10:13
+1
Utile
4
Bonjour,

Tu prends ta séquence binaire de gauche vers la droite et tu ajoutes la valeur de chaque caractére (0 ou 1) multiplié par 2 à la puissance de la position de celui ci.
exemple avec 10010101
en partant de la gauche:
1x 2^0 = 1 x 1 = 1
0 x 2^1 = 0 x 2 = 0
1 x 2 ^2 = 1 x 4 = 4
0 x 2^ 3= 1 x 8 = 0
1 x 2^4 = 1x 16 = 16
0 x 2^5 = 1x32 = 0
0 x 2^6 = 1x64 = 0
0 x 2^7 = 1x128 = 128

soit 1 + 4 +16 +128 = 149
Merci pour ta réponse mais j'ai besoin du pseudo code de l'algorithme si c'est possible

Merci pour ton aide
Il y a une erreur à la 4ème ligne : 0 x 2^3 = 0 x 8 = 0 (et pas 0 x 2^3 = 1 x 8 = 0)
il n'y a pas vraiment d'erruer dans la 4eme ligne mais plutot dans la dernier: 1X2^7 au lieu de 0x2^7
oui Nima t'as raison, il ya une erreur à la 4eme ligne prcq ( 0 x 2^3 il est <> 1 x 8 ) et 1 x 8 = 8 pas = 0
sakoba2010 157 Messages postés lundi 7 février 2011Date d'inscription 24 juillet 2013 Dernière intervention - 10 févr. 2011 à 17:41
0
Utile
Utilise la fonction parseInt
System.out.println(Integer.parseInt("111111",2));

regardes ça http://sakoba.byethost13.com/2011/02/10/java-binary-to-decimal/
ccm81 8346 Messages postés lundi 18 octobre 2010Date d'inscription 26 avril 2018 Dernière intervention - 10 févr. 2011 à 18:26
0
Utile
3
bonsoir

un code (récursif) en VBA

- Len(a) donne la longueur de la chaine a
- Left(b,1) donne le 1° caratere à gauche de la chaine b
- Right(b, Len(b) - 1)) donne la queue de b (b sauf le 1° caractere)

RQ. VBA est permissif et Left(b,1) est interpreté comme un nombre donc pour un algorithme propre utiliser Valeur(xxx) lorsque xxx est une chaine

Function bin_dec(ByVal b As String) As Long
If Len(b) = 1 Then
  bin_dec = b
Else
  bin_dec = 2 ^ (Len(b) - 1) * Left(b, 1) + bin_dec(Right(b, Len(b) - 1))
End If
End Function


bonne suite
Merci a vous

c plus le code avec des si sinon, tant que, demande, afficher que je cherche

Merci de votre aide
Bonsoir :)
Je cherche aussi une fonction récursive qui traduirait un entier passé en paramètre et codé en binaire en un nombre décimal.
Le principe ne s'éloigne pas trop de la solution que tu (ccm81) as proposé sauf que le soucis pour moi c'est que le paramètre initial est un entier et on ne doit pas utiliser de fonctions pour le convertir en chaîne ...
Est ce que quelqu'un pourrait m'aider quel que soit le language utilisé c'est surtout l'idée que je cherche.
MERCI ;)
ccm81 8346 Messages postés lundi 18 octobre 2010Date d'inscription 26 avril 2018 Dernière intervention - 27 avril 2011 à 08:45
re
c'est encore plus simple, mais un peu moins efficace puisque le parametre en entrée est de type entier et comme il est au " format binaire" il ne pourra pas être bien "long", mais comme c'est plus pour l'esthétique que l'efficacité ...
n mod 10 est le reste de la division euclidienne de n par 10
n \ 10 est le quotient de la division euclidienne de n par 10

Public Function bintodec(ByVal n As Long) As Long
If n <= 1 Then
  bintodec = n
Else
  bintodec = n Mod 10 + 2 * bintodec(n \ 10)
End If
End Function


bonne suite
ccm81 8346 Messages postés lundi 18 octobre 2010Date d'inscription 26 avril 2018 Dernière intervention - 10 févr. 2011 à 21:03
0
Utile
re

un autre algorithme non récursif, toujours en VBA, avec TANTQUE mais pas de SI,
a toi de traduire
il decrit le nombre b de la gauche vers la droite (comme l'algorithme de Horner)

Function bindec(b As String) As Long
Dim som As Long, chi As Long
som = 0                    ' initialisation du total
While Len(b) > 1           ' tant que longueur de b > 1
  chi = Left(b, 1)         ' chi = premier chiffre à gauche de b
  som = (som + chi) * 2    '
  b = Right(b, Len(b) - 1) ' on recommence avec b auquel
Wend                       ' on a enlevé le 1° chiffre
bindec = som + b           ' il reste un seul chiffre à b
End Function


bon courage