Utilisateur anonyme
-
15 sept. 2005 à 17:03
BunoCS
Messages postés15475Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 avril 2024
-
15 sept. 2005 à 20:31
bonjour a tous,
Je suis nouveau ici et pour me presenter je suis etudiant en bts informatique.
Je post cette petite question car je dois creer realiser un programme en language C permettant la convertion d'un nombre hexadecimal (sur 1 octet) en binaire et un nombre decimal en binaire ( toujours sur 1 octet) mais cependant je ne vois pas par ou commencer ni comment faire de maniere pas trop compliquer....
Si quelqu'un pouvez me donner quelque conseil je vous en remercie d'avance.
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 15 sept. 2005 à 17:49
Pour ma part je pense que tes profs veulent te faire faire ca a la dur, sans utiliser des fonctions deja concue a cet effet.
Je vais t'aider un peu :
Si tu travailles sur 1 octet, tu es donc sur 8 bits, soit 8 digits.
Tu pourras donc coder des nombres allant jusqu'a :
- FFFFFFFF en hexa
- 11111111 en binaire
- 99999999 en décimal
Tu vas donc organiser ton travail autour de ca.
Pour commencer ton programme tu peux deja faire un début qui demande a l'utilisateur de saisir un nombre en décimal.
Tu prend ce nombre et tu le convertie en binaire (la c'est des maths)
Tu affiches le résultat.
Ce cas la est le plus facile a traiter je pense.
Exemple :
Si le gars saisie 2.
Tu calcules et tu trouves que 2 en décimal ca fait 10 en binaire.
Tu lui affiches donc : 00000010
J'ai completer avec des zéros car tu es sous 8 bits (1 octet)
Voila de quoi te laisser commencer et avancé.
Si tu arrives a faire ca, tu n'auras aucun probleme pour la suite.
N'hésites pas a demander si tu bloques.
En tous cas je viens de te passer le raisonement de base a adopté.
je vais essayer mais le probleme reste au niveau maths je vois qu'il faut faire des divisions et utiliser des modulo mais je pense que je dois effecter "n" divisions en fonction du nbre taper par l'utilisateur donc sa en fait un paquet....
Excuse moi deathcrash mais lorsque j'effectue mais division es ce que je peux stocker mes valeurs quelque par??
car tous les programmes enfin les codes sources present sur ce site integre en parti la notion de tableau d'apres ce que je vois mais je ne suis pas familiariser avec....
BunoCS
Messages postés15475Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 avril 2024103 15 sept. 2005 à 18:24
Décimal-> Binaire: tu peux aussi utiliser un masque.
Exemple: je rentre une valeur comprise entre 0 et 255.
De toute façon, ton nombre est codé en binaire dans la machine: ce serait bête de calculer la conversion... Donc, tu va lire chaque bit de ton nombre en faisant un ET logique entre celui-ci et ton masque de la forme 10000000 (pour récupérer le bit de poids fort) et tu vas pouvoir l'afficher. Ensuite, tu change de masque...
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Merci pour tous vos conseils je vous remercie je v tester tous sa et je vous tiendrai au courant si j'ai des probleme ou pas... et une autre petite question si je veux faire hexa => binaire es ce que c la meme maniere?
C'est encor moi je crois que je vais passé pour un nul mais je débute en programmation et la avec toute les aide que j'ai eu jsuis parti pour faire des divisions mais en fait je ne vois pas comment faire "une boucle" pour repeter la division "n" fois et stocker les valeurs quelque part en fait.
BunoCS
Messages postés15475Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention23 avril 2024103 15 sept. 2005 à 20:31
Comment ferais-tu sur papier? Et bah là, c'est pareil...sauf qu'il faut le coder :)
Prenons un exemple simple: écrire 5 en binaire:
5/2 = 2, reste 1
2/2 = 1, reste 0
1/2 = 0, reste 1
[STOP]
Soit Q(i) (resp. R(i)) le quotient (resp. le reste) de la division par 2 au niveau i. On a:
R(i+1)/2 = Q(i), reste R(i).
Quand Q(n) vaut 0, on arrête et on lit le nombre suivant:
Q(n), R(n), R(n-1),...,R(1),R(0) qui, dans notre cas donne: 0101 qui vaut bien 5
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...