[Résolut]Conversion d'un base 10 en base 16

Conversion d'un base 10 en base 16 [Résolut] - Algo - Programmation

Marsh Posté le 12-08-2009 à 13:23:08    

Bonjour,
 
je cherche l'algo qui me permettrait de convertir un base 10 en base 16, thx.


Message édité par The matrix le 12-08-2009 à 20:33:43

---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
Reply

Marsh Posté le 12-08-2009 à 13:23:08   

Reply

Marsh Posté le 12-08-2009 à 13:52:02    

Avec Ada, j'ai fait ceci ...
 

Code :
  1. procedure Test is
  2.  
  3.   function Hex_Image(Num : Integer) return String is
  4.      Image : String(1..9);
  5.      Last  : Positive := 9;
  6.      Number : Integer := num;
  7.      type Hexa_Digit is
  8.        ('0', '1', '2', '3', '4', '5', '6', '7',
  9.         '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
  10.  
  11.      Rest : Integer;
  12.   begin
  13.      while number > 16 loop
  14.         image(Last) := Character'Value(Hexa_Digit'image(Hexa_Digit'val((Number rem 16))));
  15.         Number := Number - (Number rem 16);
  16.         Last := Last - 1;
  17.  
  18.      end loop;
  19.      image(Last) := Character'Value(Hexa_Digit'image(Hexa_Digit'val(Number)));
  20.      return Image(Last..Image'length);
  21.   end Hex_Image;
  22.  
  23.  
  24. begin
  25.   Put(Hex_Image(Num => 100));
  26. end Test;


 
J'ai un Constraint_Error levé ligne 17 à l'execution.


Message édité par The matrix le 12-08-2009 à 13:52:38

---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
Reply

Marsh Posté le 12-08-2009 à 14:17:12    

Voici le code corrigé...
 

Code :
  1. function Hex_Image(Num : Integer) return String is
  2.      Image : String(1..9);
  3.      Last  : Positive := 9;
  4.      Number : Integer := num;
  5.      type Hexa_Digit is
  6.        ('0', '1', '2', '3', '4', '5', '6', '7',
  7.         '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
  8.  
  9.      Rest : Integer;
  10.   begin
  11.      while (Number rem 16) /= 0 loop
  12.  
  13.         Rest := (Number rem 16);
  14.         image(Last) := Character'Value(Hexa_Digit'image(Hexa_Digit'val((rest))));
  15.         number := Number - rest;
  16.  
  17.         Last := Last - 1;
  18.  
  19.      end loop;
  20.      image(Last) := Character'Value(Hexa_Digit'image(Hexa_Digit'val(Number/16)));
  21.      return Image(Last..Image'length);
  22.   end Hex_Image;


 
Merci !


---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
Reply

Marsh Posté le 12-08-2009 à 14:20:58    

Tu fais par division successive par 16, en traduisant le reste en base 16 (=> 1 chiffre). Et tu renverses le tout:
 


30041983/16
1877623.93750000000000000000
1877623*16
30041968
30041983-30041968
[b]15[/b]
 
1877623/16
117351.43750000000000000000
1877623-117351*16
[b]7[/b]
 
117351/16
7334.43750000000000000000
117351-7334*16
[b]7[/b]
 
7334/16
458.37500000000000000000
7334-458*16
[b]6[/b]
 
458/16
28.62500000000000000000
458-28*16
[b]10[/b]
 
28/16
1.75000000000000000000
28-1*16
[b]12[/b]
 
[b]1[/b]


 
Et voilà, tu relis de bas en haut:

printf %x 30041983
1ca677f


 
 

Reply

Marsh Posté le 12-08-2009 à 14:24:23    

Merci Taz !  
 
Je savais plus, j'étais un peu pommé. Merci.


---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
Reply

Marsh Posté le 12-08-2009 à 15:22:24    

Petite rectification du code ci-dessus ...
 

Code :
  1. function Hex_Image(Num : Integer) return String is
  2.      Image : String(1..9);
  3.      Last  : Positive := 9;
  4.      Number : Integer := num;
  5.      type Hexa_Digit is
  6.        ('0', '1', '2', '3', '4', '5', '6', '7',
  7.         '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
  8.  
  9.      Rest : Integer;
  10.   begin
  11.      loop
  12.  
  13.         Rest := (Number rem 16);
  14.         image(Last) := Character'Value(Hexa_Digit'image(Hexa_Digit'val((Rest))));
  15.         number := Number - rest;
  16.  
  17.         Last := Last - 1;
  18.         exit when (Number rem 16) = 0;
  19.      end loop;
  20.      image(Last) := Character'Value(Hexa_Digit'image(Hexa_Digit'val(Number/16)));
  21.      return Image(Last..Image'length);
  22.   end Hex_Image;


Message édité par The matrix le 12-08-2009 à 15:22:38

---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
Reply

Sujets relatifs:

Leave a Replay

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