Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1194 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Programme de Conversion base 10 vers 16 et inversement.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Programme de Conversion base 10 vers 16 et inversement.

n°2255477
smxme
Posté le 11-04-2015 à 16:29:52  profilanswer
 

Bonjour à tous.
Je dois réaliser un programme en C++ permettant de faire une conversion de base 10 vers 16, et inversement, à travers un petit menu simple.
Le problème est que je n'arrive pas à convertir parfaitement de décimal à hexadécimal.
 
Voici ce que je fais : Je déclare un tableau de caractère de 16 cases. (0-15), contenant les digits de la base hexa (0 1 2 3 4 5 6 7 8 9 A B C D E F).
Je déclare un int unEntier, une string unHex, et mon tabHex[16].
 
Tant que unEntier > 0
       unHex =unHex + tabHex[unEntier / 16] // On concatène les chaines.
       unEntier = unEntier / 16
fintantque
On affiche le résultat.
 
Le problème est que pour la dernière partie de la conversion, ca ne fonctionne pas , par exemple je veux convertir 85 (54 en hexa).
85 / 16 = 5.3 (5 puisque entier).
tabHex[5] = 5, on aura donc unHex = "5".
On continue : 5/16 = 0, quelquechose. (0 puisque entier). On obtient donc unHex="50".  
Comment faire pour traiter cette dernière partie? Je dis que si unEntier <16 , alors je dois faire unHex=unHex+tabHex[unEntier-1] ?   Ca fonctionne pour ce cas mais pas pour les autres ^^
Merci d'avance !


Message édité par smxme le 11-04-2015 à 16:37:15

---------------
| i7 14700K | MSI Z790 Tomahawk WIFI | 2*32Go Corsair Vengeance 6000C30 | MSI 4090 GAMING X TRIO | DeepCool LT720 | NZXT H7 FLOW |
mood
Publicité
Posté le 11-04-2015 à 16:29:52  profilanswer
 

n°2255478
Je@nb
Kindly give dime
Posté le 11-04-2015 à 16:42:46  profilanswer
 

printf("%x",unEntier) et zou :o

n°2255480
smxme
Posté le 11-04-2015 à 16:58:49  profilanswer
 

Oui je sais bien, mais j'dois absolument le faire sans passer par une fonction déjà accessible.
J'dois le faire "manuellement".
Merci de ta réponse !


---------------
| i7 14700K | MSI Z790 Tomahawk WIFI | 2*32Go Corsair Vengeance 6000C30 | MSI 4090 GAMING X TRIO | DeepCool LT720 | NZXT H7 FLOW |
n°2255482
Devil'sTig​er
Posté le 11-04-2015 à 17:46:32  profilanswer
 

http://stackoverflow.com/questions [...] onversions
 
Voila, si tu veux le nombre final (485) et non pas juste chaque nombre un par un, garde un compteur du nombre de fois ou tu as divisé.
 
Et fait 4 * 10 ^ 2 + 8 * 10 ^ 1 + 5 * 10 ^ 0 et t'auras un integer avec 485 dedans comme il faut, correspondant au 1025 de la base 15.

n°2255483
smxme
Posté le 11-04-2015 à 18:06:50  profilanswer
 

Base 15 ?
Pourquoi base 15?
C'est de l'héxadécimal que je cherche à avoir.
(Désolé, j'suis "novice" en algo).


---------------
| i7 14700K | MSI Z790 Tomahawk WIFI | 2*32Go Corsair Vengeance 6000C30 | MSI 4090 GAMING X TRIO | DeepCool LT720 | NZXT H7 FLOW |
n°2255497
Je@nb
Kindly give dime
Posté le 11-04-2015 à 19:15:33  profilanswer
 

remplace 15 par 16 alors

n°2255512
smxme
Posté le 11-04-2015 à 20:52:44  profilanswer
 

Ouaip, j'vais continuer de réfléchir un peu.  
Merci beaucoup


---------------
| i7 14700K | MSI Z790 Tomahawk WIFI | 2*32Go Corsair Vengeance 6000C30 | MSI 4090 GAMING X TRIO | DeepCool LT720 | NZXT H7 FLOW |
n°2255524
Devil'sTig​er
Posté le 12-04-2015 à 06:42:55  profilanswer
 

smxme a écrit :

Base 15 ?
Pourquoi base 15?
C'est de l'héxadécimal que je cherche à avoir.
(Désolé, j'suis "novice" en algo).


J'ai une très grosse flemme, mais bon je suis de bonne humeur aujourd'hui :o:
 

Code :
  1. #include <vector>
  2. int printBase10(std::vector<int> *parts, int iter) {
  3.   int number = 0;
  4.   for (std::vector<int>::reverse_iterator it = parts->rbegin(); it != parts->rend(); ++it) {
  5.     number += *it * pow(10.0, iter);
  6.     iter--;
  7.   }
  8.   return number;
  9. };
  10. int convertNumberToBase(int number, int base) {
  11.   // Store modulo results
  12.   std::vector<int> parts;
  13.   // Store number of iterations
  14.   int iter = 0;
  15.   while(1) {
  16.     int mod = number % base;
  17.     int div = number / base;
  18.     parts.push_back(mod);
  19.     if(div <= 0) {
  20.       return printBase10(&parts, iter);
  21.     } else {
  22.       iter++;
  23.     }
  24.   }
  25. };


 
PS: je sais pas si vector est de ton niveau, si besoin tente de remplacer ca par -par exemple- un tableau de mille cases ou une merde du genre.
PS2: oué j'ai la flemme :o
PS3: techniquement iter sert a rien, puisque tu pourrais utiliser vector.size() qui te donnerai le nombre de cases utilisés, ce qui reviendrait au même que iter.
PS4: code pas testé, mais l'idée est là.
PS5: printBase10 sert a prendre les résultats, et à faire un nombre présentable en base 10, ce qui te permet d'afficher le nombre "base 16" sans te soucier de l'affichage (qui lui sera en base 10)
PS6: désolé :o j'avais pas vu que c'était pas du code mais de l'algo, bon ben prend l'idée et transforme ca en algorithmique ;)


Message édité par Devil'sTiger le 12-04-2015 à 06:45:25
n°2255535
smxme
Posté le 12-04-2015 à 20:05:06  profilanswer
 

Salut tout l'monde, j'vous fait un retour. J'me suis poser au calme avec une feuille, et voilà ce que j'ai (ca fonctionne) :  
 
string unHex;
char tabHex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}
int unEntier;
int reste;
 
      while (unEntier >16){
             
            reste = unEntier % 16;
            unEntier = unEntier / 16;
            unHex = tabHex[reste] + unHex;
      }
      unHex = tabHex[unEntier] + unHex;
      unEntier = unEntier/16;
cout << unHex << endl;
 
Voila, maintenant j'dois faire dans le sens inverse, et la j'galère a mort !
       
       
 


---------------
| i7 14700K | MSI Z790 Tomahawk WIFI | 2*32Go Corsair Vengeance 6000C30 | MSI 4090 GAMING X TRIO | DeepCool LT720 | NZXT H7 FLOW |

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Programme de Conversion base 10 vers 16 et inversement.

 

Sujets relatifs
Probleme amélioration programmeVBA EXCEL exportation de donnée vers une BD
EXCEL VBA Liaison Excel Base de donnée toute simplePreuve de programme
Error Time 424 - VBA - Export vers wordInsérer dans la base de données à partir d'un checkbox
[EXCEL] problème avec SendKeys pour envoyer un pipe "|" vers PuttyFaire base de données(prix) à partir site d'un web
Faire base de données à partir site d'un web publicExcel: copie depuis fichiers multiples vers un classeur de stats
Plus de sujets relatifs à : Programme de Conversion base 10 vers 16 et inversement.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR