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
res= 0
puis= 1
Pour i = longueur (seqBin) à 0 faire
res= res + seqBin[i] *puis
puis = puis * 2
fin pour
afficher res
ccm81
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
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
badboy
Merci pour ta réponse mais j'ai besoin du pseudo code de l'algorithme si c'est possible
Merci pour ton aide
Nima
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)
DMZ
il n'y a pas vraiment d'erruer dans la 4eme ligne mais plutot dans la dernier: 1X2^7 au lieu de 0x2^7
iBRAcc!
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
Utilise la fonction parseInt
System.out.println(Integer.parseInt("111111",2));
un code (récursif) en VBA
où
- 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
badboy
Merci a vous
c plus le code avec des si sinon, tant que, demande, afficher que je cherche
Merci de votre aide
Fatus
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
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
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
Trouvez des réponses à vos questions sur les langages, les frameworks et les astuces de codage. Échangez avec d'autres développeurs passionnés pour améliorer vos compétences en programmation et rester au fait des dernières tendances du secteur.