- Rémi et safia ont découvert le code binaire des nombres en cours d'informatique. ils l'utilisent pour se donner des rendez-vous secrets. ils ont décidé que : un message comporte 5 bits et donne le jour puis le moment les jours et les moments sont traduits par les nombres comme ci-dessous
- Le code ascii en informatique - Guide
- Message - Guide
- Code binaire des nombres - Guide
- Comment récupérer les messages supprimés sur whatsapp - Guide
- Winrar 64 bits windows 10 - Télécharger - Compression & Décompression
6 réponses
23 oct. 2023 à 10:27
Salut,
pour moi, ce que j'en comprends, c'est qu'il faut faire ce qu'a indiqué Whismeril.
C'est-à-dire appliquer la méthode des divisions euclidiennes (qui marche quelle que soit la base) de manière informatique.
Ce qu'a indiqué PierrotLeFou est pour moi hors-sujet puisque la question ne porte pas sur la représentation interne mais plutôt sur des calculs mathématiques.
Modifié le 21 oct. 2023 à 15:39
Bonjour,
Je ne suis pas assez bon en mathématiques pour apporter une solution.
Je pense cependant que lorsqu'on passe de la base 10 à une base n par des divisions successives, ces divisions sont faites avec les règles de calcul en base 10 telles qu'on les a apprises à l'école primaire.
Je suppose donc que si on veut passer de la base 5 à la base 2 par des divisions successives, il faudra utiliser de nouvelles règles de calcul pour faire ces divisions : des règles de calcul en base 5 qu'il reste à établir (tables de multiplication en base 5)
A priori, ça me semble pas du tout évident : il faudra apprendre à penser en base 5.
En cherchant un peu, je suis tombé sur cette page :
https://www.ilemaths.net/sujet-convertir-d-une-base-a-une-autre-sans-passer-par-la-base-10-450987.html
La technique est assez facile à comprendre.
Dans le cas d'un passage de la base 5 à la base 2, c'est abordable si on se limite à des petits nombres.
Mais ici, puisque arw a donné le résultat, on arrive à un nombre à 10 chiffres. Ce qui veut dire que dans les calculs on va monter jusqu'à 2^9 !
On commence à être dans des calculs énormes. J'ai regardé le début et j'ai laissé tomber.
Dans le code ci-dessous, il n'est fait nulle mention du système décimal ni des registres de la mémoire.
Je me fiche de la façon dont l'ordi fait ses calculs. Il sait comment les faire.
Je ne traite ni les nombres négatifs ni les erreurs.
Je ne fais aucune arithmétique simulée et je ne crois pas que c'est ce qu'on demande.
C'est trop compliqué pour un débutant.
def symbolic2numeric(symbol, base): # Conversion de la forme symbolique à la forme numérique. b = len(base) # La valeur numérique de la base est le nombre de symboles dans la base. number = 0 # Valeur de départ du nombre cherché. for s in symbol: # On parcourt la liste des symboles. # La position (ou index) est la valeur numérique associée au symbole à cette position. digit = base.index(s) # Valeur numérique associée au symbole. Je suppose qu'il n'y a pas d'erreur. number = number * b + digit # Je tasse le nombre d'une position et j'ajoute le digit suivant. return number def numeric2symbolic(number, base): # Convertion de la forme numérique à la forme symbolique. b = len(base) # La valeur numérique de la base est le nombre de symboles dans la base. symbol = "" # On commence avec une chaîne vide de symboles. while number > 0: # Tant que le nombre est plus grand que 0. s = base[number % b] # Symbole associé au chiffre des unités dans cette base. symbol = s + symbol # J'ajoute le symbole à la gauche. number = number // b # Je divise par la base pour obtenir la prochaine "colonne" en position des unités. return symbol or base[0] # base[0] est le symbole associé au 0 dans cette base (requis si le nombre est 0 au départ) nombre = symbolic2numeric("4432", "01234") # Je convertis "4432" en base 5 (5 symboles) vers la forme interne ou numérique. symbole = numeric2symbolic(nombre, "01") # Je convertis ce nombre de la forme interne ou numérique vers la base 2 (2 symboles). print(symbole) # J'affiche la valeur symbolique du nombre.
Modifié le 23 oct. 2023 à 15:57
Bonjour,
Merci pour la proposition, mais comme le signalent blux et Whismeril, cette réponse ne répond pas aux contraintes de l'exercice. En effet, d'un point de vue maths :
- calculer number * b + digit revient à passer de la base b base 10 (ligne 7)
- calculer number // b et number % b revient à faire en passage de la base 10 vers la base b (ligne 14)
- il est dit explicitement dans l'énoncé qu'il faut faire des divisions successives par deux.
J'ai tronqué le fil de discussion en conséquence. Merci à chacun de rester courtois.
23 oct. 2023 à 15:40
Bonjour,
Je pense qu'il est temps de mettre un terme à cette suite de propositions en tout genre et de ce concentrer uniquement sur la question du demandeur.
Encore une fois la question porte sur une conversion d'un chiffre en base 5 vers un chiffre en base 2 sans passer par la base 10 et en utilisant uniquement des divisions.
Pour l'instant, sauf erreur de ma part, une seule réponse allant dans ce sens a été proposée.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question23 oct. 2023 à 17:31
Finalement, c'est la question qui est hors sujet.
C'est un exercice de calcul écrit, décrit trop sommairement par arw, dans un forum inadéquat.
Ce qui explique que nos réponses ne conduisent pas un algorithme correspondant à l'énoncé.
Si la question avait été "comment faire une division écrite en base 5", nous aurions évidemment rapidement expliqué comment effectuer ce genre d'opération élémentaire.
Sans participation du demandeur, nous nous retrouvons souvent à batailler stérilement à propos de l'interprétation de la demande.
Modifié le 23 oct. 2023 à 18:34
Bonjour à tous
Une autre idée sans passer par la base 10 : On compte de 1 à n en base 5 et en parallèle en base 2
https://www.cjoint.com/c/MJxqEW10ZLB
Cdlmnt