Page 1 sur 1

convertiseur hexadecimal en c

Publié : lun. 26 oct. 2009 12:52
par moquette
Je suis un dedutant en c et j'aimerai avoir de l' aide d' un éventuéle programateur
pour ce code..
MERCI
code: c
-------------------------------------------------------------------------------


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>


int main()
{
int i=0 , boucle=0 , choix_de_fin=0 , hd=0 , nbreseizaines=0 , nbreunite=0;

while (boucle==0)
{
printf("Bienvenue dans le convertisseur Hexadecimal \nQue voulez vous faire ?\n1.Hexadecimal-->Decimal\n2.Decimal-->Hexadecimal\n3.Quitter\n") ;
scanf ("%d", &i);

switch (i)
{
case 1:

break ;

case 2:

printf("quel nombre voulez vous convertir?");
scanf ("%d", &hd);

nbreseizaines= hd/16 ;

printf("nbreseizaines vaut %ld \n", nbreseizaines) ;

nbreunite= hd-(nbreseizaines*16) ;

printf("nbreunite vaut %ld \n%ld en decimal vaut %ld%ld en hexadecimal\n\n", nbreunite, hd, nbreseizaines, nbreunite) ;

break ;

case 3:
boucle++ ;
break ;

default :
printf("Vous n'avez pas entre un nombre correct\n");
boucle++ ;
break;
}

}

return 0;
}


/le programe n'est pas encor fini/
/je suis ouvert a toute aide /

Re: convertiseur hexadecimal en c

Publié : lun. 26 oct. 2009 18:45
par hexbinmos
tu peut t'aider de ça :D
http://easycalculation.com/hex-converter.php
et après j'ai une idée où tu peut remplacer avec la commande sed.

Code : Tout sélectionner

sed 's/motARemplacer/motQuOnRemplace/

Re: convertiseur hexadecimal en c

Publié : lun. 26 oct. 2009 20:47
par Jean-Bob
Alors le souci majeur de ton convertisseur décimal -> hexadécimal c'est qu'il ne peut pas convertir des entiers supérieurs à 16².
En effet, ce que tu fais c'est que tu prends un entier, tu effectues la division euclidienne de cet entier par 16, tu en déduis que le nombre des unités est le reste de cette division euclidienne et le nombre des "seizaines" le quotient. Or pour des entiers supérieurs à 16², le quotient est supérieur à 16 donc ce ne peut pas être un chiffre de la décomposition du nombre en base 16.
Ce que tu dois considérer c'est cette décomposition pour un entier n :

n = a0 * 16^0 + a1 * 16^1 + a2 * 16^2 + ... + ap * 16^p.

Que tu peux aussi écrire :

n = a0 + 16 * (a1 + 16 * (a2 + 16 * (... + 16 * ap)...)

Donc le reste de la division euclidienne de n par 16 va te donner a0 et le quotient va te donner a1 + 16 * (a2 + 16 * (... + 16 * ap)...).
Tu auras donc trouvé le premier chiffre de la décomposition en base 16 de n mais pour trouver les autres il faut effectuer des divisions euclidiennes successives sur le quotient.

Si tu as déjà entendu parler de la programmation récursive ce que je t'ai dit devrait te donner des idées, sinon il faudra faire une boucle while pour effectuer autant de divisions euclidiennes que nécessaire.

Au niveau du style je te conseille de stocker les chiffres de la décomposition en base 16 de ton entier dans un tableau pour y voir plus clair. Sinon si tu as par exemple 113 en hexadécimal tu ne pourras pas savoir si c'est 11 3, c'est-à-dire 179 en décimal, ou 1 13, c'est-à-dire 29 en décimal.

La conversion hexadécimal -> décimal se fait par contre beaucoup plus simplement.

Tu peux aussi essayer de faire un système de conversion entre la base décimale et une base b quelconque, voire entre deux bases quelconques b1 et b2.

Bonne chance.

EDIT : dernier conseil histoire de pinailler : enlève le boucle++ du cas default de ton switch afin que l'utilisateur puisse rentrer un nouveau nombre.

Re: convertiseur hexadecimal en c

Publié : lun. 26 oct. 2009 22:38
par moquette
Mérci Jean-Bob j' ai fai plin de progres d'un coup
(tu peu dévelopé in peu sur la programation récursive stp. :!:
Merci aussi cookieslover %x c'est vraiment + simple :P

Re: convertiseur hexadecimal en c

Publié : lun. 26 oct. 2009 22:59
par KIRGO
Ce topic aurait dû être posté dans le topic déjà prévu à cet effet, à savoir celui qui est juste au dessus du tiens désormais ;)

Je lock, si jamais tu as encore des questions à poser, pose-les dans le topic approprié, ou repost ton message initial, si tu en as encore besoin. Mercii

Bonne continuation.

KIRGO


Et on dit PROGRAMMEUR, pas PROGRAMMATEUR, ARG ><'