Conversion de base

Conversion de base - C - Programmation

Marsh Posté le 18-04-2010 à 22:07:26    

Bonsoir!
Je suis de retour sur ce forum qui a toujours apporté de l'aide!  
Donc voila, mon probleme peut paraitre simple et evident pour certains d'entre vous, mais bon.
 
En fait voila, j'ai un algorithme à ecrire ( il est long, il y a des tableaux à 2 dim...) mais je vais vous parler just de la partie qui me gene!
C'est pour convertir un nombre donner dans une base en une autre base entre 2 et 9.
Mon souci est le suivant, je n'ai j'amer fait de cours sur la conversion des base, et je n'arrive pas à assimiler ce que j'ai trouver sur le net, donc je m'adresse à vous!
je veux just la méthode simple pour passer d'une base à l'autre,  et pire encore, je ne vois pas comment savoir la base de depart d'un nombre donné!  
 
Aidez moi SVP!  
Merci d'avance!

Reply

Marsh Posté le 18-04-2010 à 22:07:26   

Reply

Marsh Posté le 18-04-2010 à 22:16:40    

Voir strtol


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 18-04-2010 à 22:23:19    

Excuse moi, car je suis débutant!, strtol je risque de ne pas comprendre grand chose, j'aimerai just une methode mathématique simple pour convertir plz!

Reply

Marsh Posté le 18-04-2010 à 22:24:34    

excuse, il y avais un mal entendu!

Reply

Marsh Posté le 18-04-2010 à 22:35:38    

Citation :

convertir un nombre donner dans une base en une autre base entre 2 et 9.

Un nombre, c'est une valeur, ça dépend pas de la base. Ce que tu veux, c'est convertir la chaine S qui représente un nombre dans une base a en une chaine T  qui représente ce même nombre dans une base b.
Faut que tu écrives deux fonctions:
Une qui prend en entrée une chaine et une base, et qui calcule la valeur du nombre correspondant, et une autre qui prend en entrée un nombre et une base et qui calcule la chaine qui représente le nombre dans la base.
Si la première est calcule_valeur(chaine, base) et la seconde est imprime_représentation(nombre, base), tu vas avoir:
T = imprime_représentation(calcule_valeur(S, a), b)

 
Citation :

je ne vois pas comment savoir la base de depart d'un nombre donné

Tu ne peux pas. quand on écrit "10", ca a pour valeur 10 si la base est décimale, 2 si elle est binaire, 8 si elle est octale, etc.
A+,


Message édité par gilou le 18-04-2010 à 22:40:07

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 18-04-2010 à 22:41:52    

Merci gilou pour les explications, mais j'ai encore besoin de quelques eclairssicements!
je suis d'accord sur le fait qu'l faut utiliser deux fonctions, en gros c'est l'enoncé que j'ai:
la machine demandera à l'utilisateur un nombre danc une chaine S, puis la base  
 de ce nombre! ainsi que la base volu, et en sortie, le le programme donnera ce meme nombre dans la base d'arrivée! (donc une chaine T)
tout ça je l'ai compris, mais je ne vois pas les operations mathématiques pour le faire! c'est mon probleme.

Reply

Marsh Posté le 18-04-2010 à 23:04:15    

Up aidez moi VP c'est urgent!
Merci encore

Reply

Marsh Posté le 19-04-2010 à 11:18:37    

Je vais pas non plus faire tout le boulot a votre place, mais je veux bien vous donner les algos:
calcule_valeur(T, a):
resultat <- 0
tant que il y a un chiffre a lire dans T faire
resultat <- resultat*a + chiffre lu
fin faire
retourner resultat

 

Exemple: calcul de la valeur de ce qui est noté "312" en base 5
resultat <- 0
On lit le chiffre 3, resultat <- 0*5 + 3 = 3
On lit le chiffre 1, resultat <- 3*5 + 1 = 16
On lit le chiffre 2, resultat <- 16*5 + 2 = 82
retourner 82

 

imprime_représentation(n, b):
chaine <- ""
tant que n >= b faire
chaine <- chaine + "n mod b" (on ajoute a la chaine le chiffre (exprimé dans la base b) représentant la valeur du reste de la division entière de n par b)
n <- n div b  (résultat de la division entière de n par b)
fin faire
si n est non nul,
chaine <- chaine + "n" (on ajoute a la chaine le chiffre (exprimé dans la base b) représentant la valeur n)
fin si
chaine <- Inverse(chaine) (inverse est la fonction qui inverse une chaine. Inverse("abcd" ) renvoie "dcba" )
retourner chaine

 

Exemple: la valeur 253 a exprimer en base 3:
imprime_représentation(253, 3)
chaine <- ""
chaine = "", chaine <- "253 mod 3" (= "1" ), n <- 253 div 3 = 84
chaine = "1", chaine <- "1"+"84 mod 3" (= "0" ), n <- 84 div 3 = 28
chaine = "10", chaine <- "10"+"28 mod 3" (= "1" ), n <- 28 div 3 = 9
chaine = "101", chaine <- "101"+"9 mod 3" (= "0" ), n <- 9 div 3 = 3
chaine = "1010", chaine <- "1010"+"3 mod 3" (= "0" ), n <- 3 div 3 = 1
chaine = "10100", 1 > 0 donc chaine <- "10100"+ "1"
chaine = "101001", chaine <- Inverse("101001" )
retourner "100101"

 

A+,


Message édité par gilou le 19-04-2010 à 11:25:26

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 19-04-2010 à 20:13:44    

Merci gilou! c'est gentil de ta part,  
si je pose des questions sur ce forum, ce n'est pas pour copier des reponses completes, je n'etais pas tres explicite peut etre dans ma demande! je comprend bien que c'est à moi de travailler! merci quand meme! @++

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed