Programme C conversion d’une base quelconque à une autr
Fermé[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 2 oct. 2023 à 14:54
- Programme C conversion d’une base quelconque à une autr
- Programme demarrage windows 10 - Guide
- Recuperer une conversation whatsapp supprimée - Guide
- Une personne bloqué sur snapchat peut accéder à la conversation ✓ - Forum Snapchat
- Formules excel de base - Guide
6 réponses
30 sept. 2023 à 13:25
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 ?
30 sept. 2023 à 14:11
Et tu ne sais pas faire une division en C?
30 sept. 2023 à 15:05
Les problème que l’arithmétique change. Si je veux faire 1+1 en base 2 ça fait 10 mais 2 en base 10.
en codant en C je devrais redéfinir toutes les règles d’addition et soustractions en une quelconque base et là est le problème
30 sept. 2023 à 15:36
Au temps pour moi.
Passons donc au point suivant.
En C 'A' c'est une lettre ou un nombre?
30 sept. 2023 à 16:22
Une lettre
30 sept. 2023 à 17:18
Et bien non, 'A' est en fait un nombre qui vaut 65.
Tu peux donc te servir de cette propriété pour faire en sorte que 'A' corresponde à 11 ('A' - 54 = 11), et idem pour les bases suivantes.
30 sept. 2023 à 17:27
A-54=11?
je vois que 65-54 vaut 11 mais en quoi ça me servirait
en réalité je vois bien le principe mais l’implémentation en elle même me dérange
si quelqu’un aurait un code à proposer s’il vous plaît
merci beaucoup
30 sept. 2023 à 18:25
Pardon, faut que ça fasse 10...
Donc A -55
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é.
30 sept. 2023 à 16:22
Non On en souhaite pas passer par une base intermédiaire. On veut que le programme puisse directement convertir d’une base à une autre
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.
2 oct. 2023 à 14:54
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)".
Modifié le 30 sept. 2023 à 13:33
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
30 sept. 2023 à 13:32
La soustraction sera effectuée en base 11(base de départ)