Stockage et addition de variables. Conversion de chiffres binaires en décimaux.

Le
JeanMickey
Bonjour,
J'ai essayé de faire un programme de conversion de chiffres
binaires en chiffres décimaux. Malheureusement, dans la partie marquée
par un commentaire ('), je ne parviens pas à stocker une variable
temporaire ni à l'ajouter à d'autres. Quelqu'un peut-il m'aider? Voici
la partie du programme où le problème se pose :

NbreBinaire = InputBox("Choisissez un nombre binaire ")
LongNbreBinaire = Len(NbreBinaire)
For i = LongNbreBinaire To 1 Step -1
If Mid(NbreBinaire, i, 1) = 0 Then
ChiffreDecimal1 = 0 * (2 ^ (LongNbreBinaire - 1))
ElseIf Mid(NbreBinaire, i, 1) = 1 Then
VarTemp = 0
ChiffreDecimal = 1 * (2 ^ (LongNbreBinaire - 1))

'La variable est stockée mais je n'arrive pas à l'aditionner à
d'autres
'par la suite et à trouver le bon résultat

VarTemp = ChiffreDecimal
End If
Next i

Worksheets(3).Range("B2").Value = VarTemp
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #18841121
bonjour JeanMickey,

ChiffreDecimal = ChiffreDecimal + 1 * (2 ^ (LongNbreBinaire - 1))

autre exemple :

Public Function b2b10(n) 'fonction transforme un chiffre de la base 2 à
la base 10
Dim s As Double
nc = Len(n)
For i = nc To 1 Step -1
x = Asc(UCase(Mid(n, i, 1)))
Select Case x
Case 48 To 57: s = s + (x - 48) * 2 ^ (nc - i)
Case 65 To 70: s = s + (x - 55) * 2 ^ (nc - i)
End Select
Next i
b2b10 = s
End Function 'Autheur : Serge (allias garnotte) de Québec

A1 = '111111100001111000111
dans la feuille de calcul : ²b10(A1) resultat : 2081735

isabelle

JeanMickey a écrit :
Bonjour,
J'ai essayé de faire un programme de conversion de chiffres
binaires en chiffres décimaux. Malheureusement, dans la partie marquée
par un commentaire ('), je ne parviens pas à stocker une variable
temporaire ni à l'ajouter à d'autres. Quelqu'un peut-il m'aider? Voici
la partie du programme où le problème se pose :

NbreBinaire = InputBox("Choisissez un nombre binaire ")
LongNbreBinaire = Len(NbreBinaire)
For i = LongNbreBinaire To 1 Step -1
If Mid(NbreBinaire, i, 1) = 0 Then
ChiffreDecimal1 = 0 * (2 ^ (LongNbreBinaire - 1))
ElseIf Mid(NbreBinaire, i, 1) = 1 Then
VarTemp = 0
ChiffreDecimal = 1 * (2 ^ (LongNbreBinaire - 1))

'La variable est stockée mais je n'arrive pas à l'aditionner à
d'autres
'par la suite et à trouver le bon résultat

VarTemp = ChiffreDecimal
End If
Next i

Worksheets(3).Range("B2").Value = VarTemp



MichDenis
Le #18841101
Ceci n'est pas suffisant ?

'Décimale en binaire
x = Application.Bin2Dec(TaValeur)

'Binaire en hexadécimale
t = Application.Bin2Hex(TaValeur)

'Binaire en octodécimale
d = Application.Bin2Oct(TaValeur)



"JeanMickey"
Bonjour,
J'ai essayé de faire un programme de conversion de chiffres
binaires en chiffres décimaux. Malheureusement, dans la partie marquée
par un commentaire ('), je ne parviens pas à stocker une variable
temporaire ni à l'ajouter à d'autres. Quelqu'un peut-il m'aider? Voici
la partie du programme où le problème se pose :

NbreBinaire = InputBox("Choisissez un nombre binaire ")
LongNbreBinaire = Len(NbreBinaire)
For i = LongNbreBinaire To 1 Step -1
If Mid(NbreBinaire, i, 1) = 0 Then
ChiffreDecimal1 = 0 * (2 ^ (LongNbreBinaire - 1))
ElseIf Mid(NbreBinaire, i, 1) = 1 Then
VarTemp = 0
ChiffreDecimal = 1 * (2 ^ (LongNbreBinaire - 1))

'La variable est stockée mais je n'arrive pas à l'aditionner à
d'autres
'par la suite et à trouver le bon résultat

VarTemp = ChiffreDecimal
End If
Next i

Worksheets(3).Range("B2").Value = VarTemp
isabelle
Le #18841081
bonjour Denis,

c'est limité à 511 pour xl2002, c'est à combien sur xl2007 ?

isabelle

MichDenis a écrit :
Ceci n'est pas suffisant ?

'Décimale en binaire
x = Application.Bin2Dec(TaValeur)

'Binaire en hexadécimale
t = Application.Bin2Hex(TaValeur)

'Binaire en octodécimale
d = Application.Bin2Oct(TaValeur)



"JeanMickey"
Bonjour,
J'ai essayé de faire un programme de conversion de chiffres
binaires en chiffres décimaux. Malheureusement, dans la partie marquée
par un commentaire ('), je ne parviens pas à stocker une variable
temporaire ni à l'ajouter à d'autres. Quelqu'un peut-il m'aider? Voici
la partie du programme où le problème se pose :

NbreBinaire = InputBox("Choisissez un nombre binaire ")
LongNbreBinaire = Len(NbreBinaire)
For i = LongNbreBinaire To 1 Step -1
If Mid(NbreBinaire, i, 1) = 0 Then
ChiffreDecimal1 = 0 * (2 ^ (LongNbreBinaire - 1))
ElseIf Mid(NbreBinaire, i, 1) = 1 Then
VarTemp = 0
ChiffreDecimal = 1 * (2 ^ (LongNbreBinaire - 1))

'La variable est stockée mais je n'arrive pas à l'aditionner à
d'autres
'par la suite et à trouver le bon résultat

VarTemp = ChiffreDecimal
End If
Next i

Worksheets(3).Range("B2").Value = VarTemp





MichDenis
Le #18841621
c'est la même chose pour 2007.




"isabelle" a écrit dans le message de groupe de discussion :
uR$
bonjour Denis,

c'est limité à 511 pour xl2002, c'est à combien sur xl2007 ?

isabelle

MichDenis a écrit :
Ceci n'est pas suffisant ?

'Décimale en binaire
x = Application.Bin2Dec(TaValeur)

'Binaire en hexadécimale
t = Application.Bin2Hex(TaValeur)

'Binaire en octodécimale
d = Application.Bin2Oct(TaValeur)



"JeanMickey"
Bonjour,
J'ai essayé de faire un programme de conversion de chiffres
binaires en chiffres décimaux. Malheureusement, dans la partie marquée
par un commentaire ('), je ne parviens pas à stocker une variable
temporaire ni à l'ajouter à d'autres. Quelqu'un peut-il m'aider? Voici
la partie du programme où le problème se pose :

NbreBinaire = InputBox("Choisissez un nombre binaire ")
LongNbreBinaire = Len(NbreBinaire)
For i = LongNbreBinaire To 1 Step -1
If Mid(NbreBinaire, i, 1) = 0 Then
ChiffreDecimal1 = 0 * (2 ^ (LongNbreBinaire - 1))
ElseIf Mid(NbreBinaire, i, 1) = 1 Then
VarTemp = 0
ChiffreDecimal = 1 * (2 ^ (LongNbreBinaire - 1))

'La variable est stockée mais je n'arrive pas à l'aditionner à
d'autres
'par la suite et à trouver le bon résultat

VarTemp = ChiffreDecimal
End If
Next i

Worksheets(3).Range("B2").Value = VarTemp





Charabeuh
Le #18845261
Bonjour,

avec une formule:

En A1 le nombre en base 2 à convertir - en format texte (exemple '11100110)

puis
En A2 mettre la formule suivante :
=SOMME(SI(ESTERREUR(STXT($A$1;NBCAR($A$1)-{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36}+1;1));0;STXT($A$1;NBCAR($A$1)-{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36}+1;1))*2^({1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36}-1))

valider la formule matricielle par CTRL+Shift+Entrée.

Cela devrait fonctionner...

fichier : http://cjoint.com/?djnAQyHAGp


Slt




"JeanMickey" news:
Bonjour,
J'ai essayé de faire un programme de conversion de chiffres
binaires en chiffres décimaux. Malheureusement, dans la partie marquée
par un commentaire ('), je ne parviens pas à stocker une variable
temporaire ni à l'ajouter à d'autres. Quelqu'un peut-il m'aider? Voici
la partie du programme où le problème se pose :

NbreBinaire = InputBox("Choisissez un nombre binaire ")
LongNbreBinaire = Len(NbreBinaire)
For i = LongNbreBinaire To 1 Step -1
If Mid(NbreBinaire, i, 1) = 0 Then
ChiffreDecimal1 = 0 * (2 ^ (LongNbreBinaire - 1))
ElseIf Mid(NbreBinaire, i, 1) = 1 Then
VarTemp = 0
ChiffreDecimal = 1 * (2 ^ (LongNbreBinaire - 1))

'La variable est stockée mais je n'arrive pas à l'aditionner à
d'autres
'par la suite et à trouver le bon résultat

VarTemp = ChiffreDecimal
End If
Next i

Worksheets(3).Range("B2").Value = VarTemp
garnote
Le #18849281
Plus généralement :

Public Function baseb10(n As String, b As Byte) As Long
' Transforme un nombre n de base b en un nombre de base 10.
' Formatez la cellule contenant n en texte et assurez-vous
' que vous entrez la bonne base de départ.
' b compris entre 2 et 16.
x = Len(n)
For i = x To 1 Step -1
c = UCase(Mid(n, i, 1))
ca = Asc(c)
Select Case ca
Case 48 To 57: nd = nd + c * b ^ (x - i)
Case 65 To 70: nd = nd + (ca - 55) * b ^ (x - i)
End Select
Next i
baseb10 = nd
End Function

Public Function base10b(n As Long, b As Byte) As String
' Transforme un nombre entier positif de base 10
' en un nombre d'une base b de votre choix.
' b doit être compris entre 2 et 16
Dim x(1 To 100)
Dim r(1 To 100)
Dim table
table = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D", "E", "F")
x(1) = n
i = 1
Do Until x(i) = 0
i = i + 1
x(i) = Int(x(i - 1) / b)
r(i - 1) = x(i - 1) - b * x(i)
Loop
For j = i - 1 To 1 Step -1
rep = rep & table(r(j))
Next j
base10b = rep
End Function

Public Function baseb1b2(n As String, b1 As Byte, b2 As Byte) As String
' Transforme un nombre n de base b1 en un nombre de base b2.
'' Formatez la cellule contenant n en texte.
' Assurez-vous que la base de départ b1 est bien la bonne.
' b1 et b2 compris entre 2 et 16.
Dim x(1 To 100)
Dim r(1 To 100)
Dim table
n = baseb10(n, b1)
table = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D", "E", "F")
x(1) = n
i = 1
Do Until x(i) = 0
i = i + 1
x(i) = Int(x(i - 1) / b2)
r(i - 1) = x(i - 1) - b2 * x(i)
Loop
For j = i - 1 To 1 Step -1
rep = rep & table(r(j))
Next j
baseb1b2 = rep
End Function

Serge
garnote
Le #18849621
Ave Jean, Isabelle, Denis et Charabeuh,

Mes tites fonctions semblent aller beaucoup plus loin
que les fonctions Excel ;-)
En base 10, la limite me semble être 999 999 999.

Qu'en pensez-vous ?

http://www.cijoint.fr/cjlink.php?file=cj200903/cijDu38ocJ.xls


Serge
garnote
Le #18849731
Ave Jean, Isabelle, Denis et Charabeuh,

Maudite moisson, pardon, boisson !
Pas envoyé le bon document.
Voici le con, pardon, le bon :
http://www.cijoint.fr/cjlink.php?file=cj200903/cijtx1qKAR.xls

À demain

Serge
garnote
Le #18850301
En remplaçant Long par Double, la limite en base 10
passe de 999 999 999 ä 999 999 999 999 999.
M'enfin il me semble !

Public Function baseb10(n As String, b As Byte) As Double
Public Function base10b(n As Double, b As Byte) As String

Là c'est terminé pour de bon, fondue chinoise oblige ;-)

A+

Serge
Charabeuh
Le #18851011
Bonjour,

J'avoue mon oignon rance sur ce sujet.
Le type double, je crois, représente un nombre décimal sous la forme d'un
produit de 3 termes: un signe (1 bit), une puissance positive ou négative de
2 (11 bits) et une mantisse de la forme 1,m (52 bits). Un entier est donc
aussi converti en une représentation via la base 2.

Je ne sais pas à partir de quelle valeur d'entier la représentation
entier/double ne représente plus le même nombre.

De plus, il y a la représentation affichée par Excel qui passe
automatiquement à une représentation à exposant de 10 à partir d'une
certaine valeur (99 999 ..... 999) mais quid de la représentation interne ?

Je reconnais m'y perdre un peu. Tes fonctions semblent en effet aller plus
loin dans les grands entiers.

Toujours est-il que par sureté, je pense que si on manipule des entiers dans
un programme alors il vaut mieux typer ses variables en entier (simple ou
long) pour être certain de provoquer une erreur en cas de dépassement et
d'éviter les conversions sujettes à des effets d'approximation inconnus.

Quoi qu'il en soit, avec tes fonctions, je vais passer mes rentrées
bancaires en base disons 7 et laisser mes dépenses en base 10. Si, grâce à
tes fonctions, je présente à mon banquier mes comptes sous cette forme et
assez vite (très vite!), il ne devrait y voir que du feu et me féliciter
d'avoir redressé ma situation aussi rapidement. En passant, je pourrais
aussi lui demander comment vont bien les comptes de la banque ? Un petit
mot gentil à un banquier en difficulté ne mange pas de pain et lui mettrait
un peu de baume au coeur. D'ailleurs il pourra me dire si les pertes et les
prêts de l'état sont en type double ou s'il a fallu construire un nouveau
type. Pour mon propre compte le type Byte suffit largement.

Trêve de chinoiseries, était-elle bonne la fondue ? Si on trempe les
raviolis dans l'eau chaude d'une marmite , je suppute que les lèvres n'ont
pas été trempées que dans l'eau froide d'un verre ? :-)

Charabeuh




"garnote" news:
En remplaçant Long par Double, la limite en base 10
passe de 999 999 999 ä 999 999 999 999 999.
M'enfin il me semble !

Public Function baseb10(n As String, b As Byte) As Double
Public Function base10b(n As Double, b As Byte) As String

Là c'est terminé pour de bon, fondue chinoise oblige ;-)

A+

Serge



Publicité
Poster une réponse
Anonyme