Decimal relatif vers binaire
Résolu/Fermé- Decimal relatif vers binaire
- Codage binaire - Guide
- Windows 7 vers windows 10 - Guide
- Transferer photo android vers pc - Guide
- Qwerty vers azerty - Guide
- Vers quelle adresse web renvoie ce lien - Guide
4 réponses
Modifié le 2 nov. 2022 à 18:00
Bonjour,
Comme la fois précédente, tu devrais essayer de convertir le décimal relatif en binaire relatif à la main, avant d'écrire le code. Voir ce message où je faisais un exemple hier : https://forums.commentcamarche.net/forum/affich-37721776-nombre-binaire#7 Par ailleurs, tu es partie sur une mauvaise piste pour l'inversion des bits, on ne change pas leur position comme dans l'inversion des caractères d'une chaine, on change juste la valeur de chaque bit 1==>0, 0==>1, 1010 ==> 0101 ; 0100 ==> >1011
J'ai vu que tu as mis des print ;-) plutôt de dans la fonction mettre relatif=-10 tu devrais, pour les tests, avant les assert (moi je les mets en commentaire), mettre un print(dec_to_bin_relatif(-10))
Modifié le 2 nov. 2022 à 18:57
Attention, sur 4 bits, on ne peut pas coder -10, sur 4 bits on va de -8 à +7, donc tester -6
Pour l'inverse, il ne faut pas oublier de cumuler : inverse=inverse+"1"
print(dec_to_bin_relatif(-6)) fonctionne pour moi, c'est peut être ton environnement ? essaye
result=dec_to_bin_relatif(-6) print(result)
J'ai copié ce que vous avez écrit à la fin de mon programme et la seule donnée que j'ai à la fin c'est l'erreur.
def dec_to_bin_relatif(relatif): # si relatif est un positif alors j'utilise directement la fonction dec_to_bin() définie plus haut. if relatif > 0 : binaire = dec_to_bin(relatif) # sinon (relatif est un négatif) j'utilise la méthode complément à DEUX. else: # calcul du binaire de la valeur absolue en utilisant la fonction dec_to_bin() définie plus haut. binaire = dec_to_bin(abs(relatif)) # ecriture du complément à UN (on inverse les bits) inverse="" for i in binaire : if i == "0" : inverse= "1" else: inverse= "0" # écriture du complémént à DEUX (on fait +1) binaire="" retenue="1" # c'est notre +1 for j in range(len(binaire),-1): # attention, parcours de droite à gauche !!! if inverse[j]=="0": binaire=binaire+"1" retenue="0" elif inverse[j]=="1" and retenue=="1": binaire=binaire+"0" retenue="1" else: binaire=binaire+"1" retenue="0" return binaire result=dec_to_bin_relatif(-6) print(result) # Les lignes ci-dessous testent votre code... n'y touchez pas ! # Si une AssertionError apparaît... c'est que votre code n'est pas bon... assert dec_to_bin_relatif(-6) == '1010' assert dec_to_bin_relatif(-1) == '1111'
Traceback (most recent call last): File "<input>", line 41, in <module> AssertionError
Modifié le 2 nov. 2022 à 19:07
je pense que c'est ton environnement de développement, mets les assert en commentaire, ou
met un print de binaire avant le return
tu devrais aussi faire un print de j dans ta boucle, tu verras un soucis
2 nov. 2022 à 19:25
d'accord merci beaucoup je regarde ceci dans les jours à venir.
3 nov. 2022 à 18:40
Bonjour,
J'ai pu retravailler mon programme et voici ce que ça donne. Il reste toujours faux mais je ne comprends pas pourquoi mon binaire n'évolue pas et je ne suis pas sûr de ce que j'ai pu faire pour l'inverse.
Merci
def dec_to_bin_relatif(relatif): binaire=-6 # si relatif est un positif alors j'utilise directement la fonction dec_to_bin() définie plus haut. if relatif > 0 : binaire = dec_to_bin(relatif) # sinon (relatif est un négatif) j'utilise la méthode complément à DEUX. else: # calcul du binaire de la valeur absolue en utilisant la fonction dec_to_bin() définie plus haut. binaire = dec_to_bin(abs(relatif)) # ecriture du complément à UN (on inverse les bits) inverse="" for i in binaire : if i == "0" : inverse= "1" + inverse else: inverse= "0" + inverse print("inverse :",inverse) # écriture du complémént à DEUX (on fait +1) binaire="" retenue="1" # c'est notre +1 for j in range(len(binaire),-1,-1): # attention, parcours de droite à gauche !!! if inverse[j]=="0": binaire= retenue + binaire retenue="0" elif inverse[j]=="1" and retenue=="1": binaire="0"+ binaire retenue="1" else: binaire="1"+ binaire retenue="0" print("binaire :",binaire) return binaire # Les lignes ci-dessous testent votre code... n'y touchez pas ! # Si une AssertionError apparaît... c'est que votre code n'est pas bon... assert dec_to_bin_relatif(-6) == '1010' assert dec_to_bin_relatif(-1) == '1111' assert dec_to_bin_relatif(3) == '0011'
inverse : 1001 binaire : 0
Traceback (most recent call last): File "<input>", line 42, in <module> AssertionError
Modifié le 3 nov. 2022 à 19:19
déjà ta ligne 3 n'a pas de sens ;-) peut être relatif ?
en 26, binaire initialisé 2 lignes au dessus vaut "", donc il ne se passe rien
en 15 et 17 la concaténation n'est pas dans le bon sens
Malheureusement il doit y avoir encore une autre faute quelque part car mon binaire pour -6 est bien 1010 mais j'ai quand même une erreur.
def dec_to_bin_relatif(relatif): relatif=-6 # si relatif est un positif alors j'utilise directement la fonction dec_to_bin() définie plus haut. if relatif > 0 : binaire = dec_to_bin(relatif) # sinon (relatif est un négatif) j'utilise la méthode complément à DEUX. else: # calcul du binaire de la valeur absolue en utilisant la fonction dec_to_bin() définie plus haut. binaire = dec_to_bin(abs(relatif)) # ecriture du complément à UN (on inverse les bits) inverse="" for i in binaire : if i == "0" : inverse= inverse + "1" else: inverse= inverse + "0" print("inverse :",inverse) # écriture du complémént à DEUX (on fait +1) binaire="" retenue="1" # c'est notre +1 for j in range(len(inverse)-1,-1,-1): # attention, parcours de droite à gauche !!! if inverse[j]=="0": binaire= retenue + binaire retenue="0" elif inverse[j]=="1" and retenue=="1": binaire="0"+ binaire retenue="1" else: binaire="1"+ binaire retenue="0" print("binaire :",binaire) return binaire # Les lignes ci-dessous testent votre code... n'y touchez pas ! # Si une AssertionError apparaît... c'est que votre code n'est pas bon... assert dec_to_bin_relatif(-6) == '1010' assert dec_to_bin_relatif(-1) == '1111' assert dec_to_bin_relatif(3) == '0011'
inverse : 1001 binaire : 1010 inverse : 1001 binaire : 1010
Traceback (most recent call last): File "<input>", line 42, in <module> AssertionError
Modifié le 3 nov. 2022 à 20:53
Bien sur puisque tu as -6 en dur dans la fonction
alors l'assert sur -1 échoue
3 nov. 2022 à 21:07
ah oui c'est vrai merci beaucoup de l'aide
2 nov. 2022 à 18:08
J'ai bien commencé à convertir mon décimal à la main mais je n'ai pas dû réussir à le retranscrire au niveau du code.
Pour ce qui est de l'inversion j'aurai mis cela du coup:
je l'aurais vu comme si c'est un 0 on mets un 1 sinon on met un 0 mais je vois que ça ne marche pas.
Pour ce qui est du print(dec_to_bin_relatif(-10)) j'ai essayé de le mettre mais il ne marche pas, je n'ai sûrement pas dû faire de la bonne manière.