Algorithme conversion binaire décimal [Fermé]

Signaler
-
 iBRAcc! -
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

5 réponses

Messages postés
71
Date d'inscription
mardi 7 décembre 2010
Statut
Membre
Dernière intervention
21 février 2011
18
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

2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 077
re,
l'algorithme de flo13142 commence a traiter le nombre par la droite, ce qui te fait maintenant 3 méthodes differentes,
bonne suite
Messages postés
71
Date d'inscription
mardi 7 décembre 2010
Statut
Membre
Dernière intervention
21 février 2011
18
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
Messages postés
157
Date d'inscription
lundi 7 février 2011
Statut
Membre
Dernière intervention
24 juillet 2013
15
Utilise la fonction parseInt
System.out.println(Integer.parseInt("111111",2));

regardes ça http://sakoba.byethost13.com/2011/02/10/java-binary-to-decimal/
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 077
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 ;)
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 077
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
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 077
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