Programme C conversion d’une base quelconque à une autr
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous et merci de me lire.
En cours, nous faisons la représentation de l’information. En faisant des conversions d’une base à une autre, je remarque que l’on passe souvent par la base décimale. Je me suis donnée cette consigne : écrire un programme en C qui effectue les conversions d’un nombre base donnée a à une base donnée b sans passer par le système décimal, en suivant le principe des divisions euclidiennes(soustractions successives)
Ça fait 5 jours mais je n’ai pas d’idées . Voici les problèmes que je rencontre:
-deja à partir de la base 11 on a le A qui entre en jeu et je ne sais vraiment pas comment je vais prendre en compte tout ca dans mon programme…
- Les signes lors des soustractions et les soustractions elles mêmes
De plus, je ne connais que les bases du C. S’il vous plaît si je pouvais avoir une proposition de code ainsi que le principe de fonctionnement ca m’aiderait énormément. J’ai également cherché sur internet mais je ne suis tombée sur rien qui aurait pu m’aider.
Merci bien
- Programme C conversion d’une base quelconque à une autr
- Base de registre - Guide
- Recuperer une conversation whatsapp supprimée - Guide
- Comment enregistrer une conversation - Guide
- Programme demarrage windows - Guide
- Masquer une conversation whatsapp - Guide
6 réponses
Bonjour
Est ce que déjà en utilisant le principe des divisions euclidiennes, tu serais passer 15A en base 11 à sa valeur en base 7 (par exemple).
Et si oui, peux tu décrire comme tu fais ?
Au temps pour moi.
Passons donc au point suivant.
En C 'A' c'est une lettre ou un nombre?
On parle de la "représentation" des nombres dans une base donnée.
La représentation, c'est pour la commodité des humains. L'ordi n'en a rien à foutre de la représentation.
On peut dire par abus de langage que la représentation "interne" est "binaire" (ou base 2).
La représentation se fait sous forme de "symboles" ou caractères.
Ainsi le "nombre" 43 vaut 4*10+3 en base 10, 4*11+3 en base 11, et 4*7+3 en base 7
Et 15A en base 11? 1*11^2 + 5*11^1 + ... et le A?
On est habitué de confondre le nombre avec le symbole. Ainsi le symbole '9' vaut 9 comme nombre.
Il y a 10 symboles en base 10: "0123456789". Mais comme par hasard, la position du symbole correspond au nombre.
En base 11, il y a 11 symboles: "0123456789A"
Pour convertir 15A de la base 11 vers la "base" interne, je dois chercher la position du symbole '1', puis '5', puis 'A'
Ce sera 1, 5, et 10. Donc 15A vaut 1*11^2+5*11+10
Ensuite convertir 43 de la base interne (faut bien l'exprimer ...) en base 11, tu dis que tu fais:
43 - 11 = 32 - 11 = 21 - 11 = 10
Et si je faisais 43 / 11 = 3 et 43 % 11 = 10?J'irais chercher le 3ième symbole de la table soit '3' et le 10ième symbole soit 'A' de la table. Donc 43 vaut 3A en base 11.
Le principe est d'abord de convertir d'une représentation d'une base vers la forme interne, puis de la forme interne vers l'autre base.
Pas le bonjur à toi non plus
je te rappelle l'énoncé
écrire un programme en C qui effectue les conversions d’un nombre base donnée a à une base donnée b sans passer par le système décimal,en suivant le principe des divisions euclidiennes(soustractions successives)
Certes j'ai zappé que la division doit se faire dans la base de départ, mais au moins je ne lui ai pas proposé de faire ce qui est clairement interdit par son énoncé.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJe ne dis pas de passer en décimal mais sous forme interne.
Bonne chance si tu veux passer directement de la base 3 vers la base 16.
Ça te prend le nombre au complet pour convertir.
Bonjour à tous,
Je suis assez d'accord avec Pierrot.
Si on ne peut pas stocker la valeur numérique dans un type du langage C, on va au devant de quelque chose de très compliqué et tu ne pourras pas utiliser les opérateurs du C pour faire des "divisions euclidiennes(soustractions successives)".
@Sandy1233 StatutMembre
Je me suis donnée cette consigne : écrire un programme en C qui effectue les conversions d’un nombre base donnée a à une base donnée b sans passer par le système décimal, en suivant le principe des divisions euclidiennes(soustractions successives)
C'est toi même qui t'es donnée cette consigne ?
En théorie, cela suppose de fournir un nombre en entier au programme dans une base donnée, et d'obtenir en résultat un nombre dans une autre base.
Cependant, concrètement, cela suppose en réalité, pour le programme C, de lui fournir une chaîne de caractères, qu'il va devoir interpréter comme étant un nombre.
En tu sais quoi ? Pour convertir n'importe qu'elle chaîne de caractères représentant un nombre entier de n'importe quelle base de 2 à 36 en un entier, il y a déjà des fonctions standard dans le langage C, notamment : strtol().
https://cplusplus.com/reference/cstdlib/strtol/
Le résultat est stocké dans un long int (comme le dit Pierrot, on s'en fiche de savoir comment).
Il ne reste plus que le problème d'affichage, car la fonction standard printf() ne sais gérer que le décimal, l'octal et l'hexadécimal.
Cependant, cela n'est plus un problème très compliqué, et là aussi Pierrot a donné des indications, et une fois que ton nombre est dans un type long int, tu peux lui appliquer tes "divisions euclidiennes(soustractions successives)".
J’utilise des soustractions successives. Je ferai 15A-7 autant de fois jusqu’à ce que ça devienne négatif et la dernière valeur non négative est le reste et le nombre de soustractions effectuées est le quotient.
Puis prochaine opération consiste à faire ces soustractions entre le précédent quotient et 7 ainsi de suite.
c’est implémenter ces opérations de soustractions et le mélange de lettres et chiffres etc qui me semblent compliqués
merci
La soustraction sera effectuée en base 11(base de départ)