Convertir un entier en somme des carrés et en binaire
Le
Apitos

Bonjour à tous,
J’aimerais convertir un nombre entier en somme des carrés de 2=
puis en binaire, et inversement.
Exemple :
Si je saisi, dans une cellule le nombre 7, j’obtiens :
7 = 2exp0+2exp1+2exp2 = 111
Et si je saisi 111, j’obtiens :
111 = 2exp0+2exp1+2exp2 = 7
Merci d’avance.
J’aimerais convertir un nombre entier en somme des carrés de 2=
puis en binaire, et inversement.
Exemple :
Si je saisi, dans une cellule le nombre 7, j’obtiens :
7 = 2exp0+2exp1+2exp2 = 111
Et si je saisi 111, j’obtiens :
111 = 2exp0+2exp1+2exp2 = 7
Merci d’avance.
Le 18/01/2020 à 14:41, Apitos a écrit :
Regarde la fonction DECBIN
Regarde la fonction BINDEC
En essayant de convertir le nombre 512, ça donne une erreur #NOMBRE! a vec la fonction DECBIN()
Il est limité à 9 bits.
À partir de là tu fais des divisions entières par 512 tu bascules le
reste en binaire et idem pour le diviseur, puis tu concatétène
bitDiv-bitReste. Cela te permettra d'aller jusqu'à 18bits. Pour aller
plus loin je te laisse chercher et trouver.
EN tout cas, si je ne m'abuse, ce n'est qu'une histoire d'additions ;
d'un certain point de vue.
--
Vie : n.f. maladie mortelle sexuellement transmissible
Benoît chez leraillez.com
Merci pour le souligné (parce que sur Usenet le texte enrichi...) ;)
Sinon, je n'aime pas les macros & Co, même si j'ai écris pas mal
d'AppleScript, mais en utilisation interne pure et dure. Cela étant,
j'ai du mal à comprendre ton code. D'autant que tes variables sont
« imbitables » si tu me permets l'expression.
--
Vie : n.f. maladie mortelle sexuellement transmissible
Benoît chez leraillez.com
Michel_D >> Je m’excuse pour ce désagrément !
Et merci pour ton code.
Merci également pour Benoit et MichD.
MichD >> j'ai du mal à comprendre ton code (Qui traite de différe ntes bases)
Entre temps, j'ai essayer de développer un code avec des fonctions et procédures personnalisées, mais reste à nettoyer et corriger quelques lignes (Enfin, je pense en tout cas) :
https://www.cjoint.com/c/JAswmrGc66u
Il vaudrait mieux dire ce que tu ne comprends pas.
Mais je pense que tu devrais te pencher sur les opérateurs logigues.
Nota: pour ce qui concerne je suppose le noms des variables ben tu mets ce qui te fais plaisir ;)
Pour ton code, Michel__D, je n'ai pas compris ceci :
Sgn((2 ^ iK) And Valeur)
Le 18/01/2020 à 23:56, Apitos a écrit :
Comme dans la fonction DEC_BIN on veux avoir une représentation binaire (0 / 1) d'un nombre :
La fonction Sgn renvoie le signe de l'argument autrement dit :
Si l'argument < 0 Sgn = -1 => cas non pertinent pour notre traitement
Si l'argument = 0 Sgn = 0
Si l'argument > 0 Sgn = 1
Ensuite la formule ((2 ^ iK) And Valeur) renvoie pour chaque puissance de 2 => 0 si le bit
correspondant n'est pas positionné et différent de 0 si le bit correspondant est positionné ce qui
combiné à la fonction Sgn fournit le résultat attendu à savoir 0 ou 1.
J'espère que c'est plus clair, c'est quand même les bases de l'informatique.
Bin non, mais varialbles ont un nom compréhensibles. Genre « sRet As
String ». Ok, sRet c'est du « texte », une liste de caractères
typographiques et non un nombre, mais c'est quoi ? C'est
incompréhensible en lecture simple.
« Dim iK As Long, sRet As String » :
- iK (une variable on ne peut plus succinte) est un 16, 32 bits ?
- SRet = "rien" (mais un vide de quoi ?)
- iK = NbCar : sRet je suppose donc que c'est le nombre de caractères
si...
J'arrête, c'est incompréhensible. Si tu regardes une peu de code tu
verras qu'il y a plus de lignes d'explication que de code.
Je ne remets pas en cause ce que tu as fait, loin de là. Imagine juste
que tu ais des dizaines de lignes comme ça à corriger pour un bug généré
beaucoup plus loin (genre sRet est une string alors qu'on parle de
nombres). Bref ton excellent boulot est incompréhensible parce que tu
n'as pas fait quelques petits trucs :
- Des noms « évidents » ;
- Des lignes d'explications avant chaque action.
Imgine que je t'envoie ce code dans deux ans et que je te demande à quoi
il sert ; combien de temps pour comprendre la situation au lieu de lire
quelques lignes de texte qui expliquent le problème puis les variables
qui sont évidentes en regard du problème.
Je parie qu'il ne soit pas sûr de rédiger ton code en moins de lignes,
par contre de façon compréhensible...
Exemples :
- C'est quoi Cdec ? Si c'est une fonction connue du code je ne dis
rien ;
- Je suppose que Len(sRet) est la « longueur » du texte sRet (puisque
c'est une string, donc pas un nombre) ;
- Si j'ai bien compris !!!!! (je n'en suis pas sûr)
If Len(sRet) = 0 Then
DEC_BIN = "#NOMBRE!"
Cela veut dire que si la cellule excel est vide tu dis « #NOMBRE! ».
Ce n'est pas bon comme réponse, tu dois dire, par exemple, « #VIDE! » ou
tout simplement laissé la case vide et « #TEXTE » si c'est un du texte
au lieu d'un nombre ; genre O au lieu de 0. Quand tu détectes une
erreur, justifie cette erreur. Cela sera utile tant pour l'utilisateur
futur, que pour toi.
Sinon, continue, ça fait plaisir de voir des gens aider les autres et
leur donner des « trucs » pour qu'il apprennent.
--
Vie : n.f. maladie mortelle sexuellement transmissible
Benoît chez leraillez.com
Heu, iK As Long cela te parle pas ?
J'initialise une chaîne de caractère (string), c'est du basique.
NbCar est un argument passé lors de l'appel de la fonction que je vais réutiliser/modifier dans mon
code.
Pour toi, vu le nombre de retour on peut estimer que les autres ont compris.
Visiblement tu n'as pas compris le code :
Lorsque l'on utilise le symbole de concaténation cela signifie que l'on travaille avec une chaîne
de caractère.
Comme déja dit, si le nom des variables ne te convient pas tu peux les changer.
J'agit en tant que bénévole et je propose une solution parmi d'autre et je ne prétends pas que
c'est LA SOLUTION
Ensuite pour les explications c'est plutôt une question de temps, mais rien ne t'interdit de le
documenter si tu utilise le code.
regarde dans l'aide Excel.
Initialement Apitos souhaitait que :
7 = 2exp0+2exp1+2exp2 = 111
Or 111 ce n'est pas "111"
Non cela veut dire que l'argument fourni n'est pas un nombre donc "#NOMBRE!" me semble plus
approprié, mais si tu préfère mettre "#VIDE" ou "#TEXTE" je ne t'en voudrais pas ;)
J'essaye d'apporter modestement ma contribution.