Ancien Responsable Matière Sarapproche Posted March 13, 2021 Ancien Responsable Matière Posted March 13, 2021 (edited) Bonjour au sujet des programmes portant sur le binaire (semaine 8 ), niveau informatique ca va je comprends le programme( j'arrive a le faire à la main et trouver les bon résultats), cependant l'aspect mathématique en soi je ne comprends pas comment ça marche pourquoi pour convertir une chaine binaire de base 2 en base 10 l'opération a faire est chiffre + 2*binaire(texte, pos-1) ? pourquoi (programme d'après) pour convertir un nombre lambda en binaire l'opération est (reste-chiffre)/2 en gros si on nous pose un programme " ce programme affiche ...." je vais savoir répondre mais si on nous pose "ce programme convertis un nombre en binaire de base 2" ou "un nombre binaire en nombre normal" je ne vais pas savoir si on fait la bonne opération ou pas du tout est ce que une personne aurait compris la logique de l'opération pour convertir ? j'espère que c'est pas trop brouillon haha vraiment navrée si c'est le cas merci d'avance pour les éclaircissements bonnes révisions à tous Edited March 13, 2021 by Sarou Quote
Solution Pitchounou Posted March 13, 2021 Solution Posted March 13, 2021 (edited) Salut salut @Sarou! Pour commencer petit rappel sur le binaire, comme ça on est sur de parler des même trucs : si on prend une chaine exemple 101, pour la transformer en base de 10 on considère que le 1 le plus à droite est à la position 2^0, que le 0 est à la position 2^1, et que le 1 le plus à gauche est à la positon 2^2. Donc on fait le chiffre en question (0 ou 1), multiplié par sa position : 1x 2^0 + 0x2^1 puis 1x2^2 = 5. A partir de là, on va prendre une chaîne en exemple 100101, et cette chaine on veut la traduire en nombre en base de 10. Une façon de réfléchir c’est de se dire que ça revient à chercher la traduction en base de 10 de 10010 (et à la multiplier par deux mais oublie pour l'instant on y revient après) et d’ajouter le dernier chiffre multiplié par 2^0 (puisque c’est sa position, on revient à ce que j’ai dit au début en rappel). Or rajouter le dernier chiffre multiplié par 2^0, ça revient juste à rajouter le dernier chiffre (2^0=1) : c’est de la que vient la partie chiffre + binaire(texte,pos-1). Maintenant pourquoi on multiplie binaire(texte,pos-1) par 2 ? Et bien quand tu fais cette méthode, tu vas décaler toutes tes positions de 1 vers la gauche : c’est-à-dire qu’au lieu de considérer la chaine entière 100101 tu la tronques en 10010, et tu cherches la valeur en base de 10 de ta nouvelle chaine. Problème : ton 0 le plus à droite qui originellement était à la position 2^1 dans ta chaine totale, se retrouve à la position 2^0 dans ta chaine tronquée (ce qui nous arrange parce qu’on veut faire ça, càd tronquer la chaine jusqu’à ce qu’on arrive au tout dernier chiffre à gauche à la position 2^0, ce qui nous return tout simplement le chiffre et après on pourra remonter). Seulement toi en réalité tu ne veux pas 0 à la position 2^0, tu veux sa vraie position dans ta « vraie » chaine. Décaler tout d'une position vers la gauche, ça revient à diviser par deux (on passe de 2^1 à 2^0), donc pour redonner la vraie valeur on doit tout re-décaler vers la droite, ce qui revient tout simplement à multiplier par deux ! Je fais un petit exemple rapide avec la même chaine très courte de tout à l’heure 101 (qui est égal à 5), et on va retrouver le même résultat : on considère que ça revient à trouver la traduction en base de 10 de « 10 », la multiplier par deux pour avoir sa vraie valeur dans notre chaine totale (puisqu’on a tout décalé d’1 à gauche) et rajouter 1x2^0 c’est-à-dire 1 c’est-à-dire "chiffre". - Je veux 1 + binaire(10)*2, pour cela il me faut binaire(10) - Je cherche la conversion de la chaine "10", ça revient à faire la conversation de la « chaine » 1 *2 + 0 - Je cherche la conversion de "1", sachant que 1 est à la position 2^0, la fonction récursive renvoie tout simplement le chiffre, c’est-à-dire 1 - Je remonte avec 1[conversion de 1 ]x2 + 0 = 2 - Je remonte avec 2 [conversion de 10]x2+1= 5 Tu me dis si c’est plus clair ! Y’a aussi une autre manière de comprendre mais je trouve ça un peu moins intuitif Edited March 13, 2021 by Pitchounou Gathou, MiniAm, Sans-Visage and 1 other 1 1 1 1 Quote
Ancien Responsable Matière Sarapproche Posted March 13, 2021 Author Ancien Responsable Matière Posted March 13, 2021 @Pitchounou o m g j'ai compris il est trop bien ton exemple !!! merci beaucoup !!! c'est bien plus compréhensible !!! je vais appliquer ça au programme ça devrait mieux passer merciiii Quote
Pitchounou Posted March 14, 2021 Posted March 14, 2021 (edited) @Sarou avec plaisir ! (NB : ducoup tu devrais comprendre le programme suivant qui fait l'inverse, de base de 10 à base de 2, sinon tu me dis!) Edited March 14, 2021 by Pitchounou Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.