Forum programmation
 
AccueilPortailFAQRechercherS'enregistrerMembresGroupesConnexion

Partagez | 
 

 Convertion : Décimale-->Binaire,Héxadécimale et Octet

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Mer 14 Mar - 23:07




Voici un programme qui fait les convertions suivantes :





  • Décimale--->Binaire (base 2)
  • Décimale--->Héxadécimale (base 16)
  • Décimale--->Octet (base 8)


d'abord voici une fonction qui permet de convertir en base 2 :

Code:
function binaire(n:integer):string;
var i:integer;
    s,bin:string;
    r:integer;
    c:char;
begin
  bin:='';
  repeat
    r := n mod 2;
    n := n div 2;
 
    str(r,s);
    bin:=bin+s;
  until ( n = 0);

  for i:=1 to (length(bin) div 2) do
    begin
      c:=bin[i];
      bin[i]:=bin[length(bin)-i+1];
      bin[length(bin)-i+1]:=c;
    end;

  binaire:=bin;

end;

convertion en base 8 :

Code:
function octet(bin:string):string;
  var oct:string;
      i,v,v1,pe:integer;
      s:string;
  begin
    while (length(bin) mod 3)<>0 do
        insert('0',bin,1);

    oct:='';
    v:=0;
    for i:=0 to (length(bin) DIV 3)-1 do
        begin
          s:=copy(bin,i*3+1,3);
          val(s[1],v,pe);
          v:=v*4;
          val(s[2],v1,pe);
          v:=v+v1*2;
          val(s[3],v1,pe);
          v:=v+v1;
          str(v,s);
          oct:=oct+s;
        end;

      octet:=oct;
    end;

et en fin convertion en base 16 :

Code:
function hexadec(bin:string):string;
  var hexa:string;
      i,v,v1,pe:integer;
      s:string;
  begin
    while (length(bin) mod 4)<>0 do
        insert('0',bin,1);

    hexa:='';
    v:=0;
    for i:=0 to (length(bin) DIV 4)-1 do
        begin
          s:=copy(bin,i*4+1,4);
          val(s[1],v,pe);
          v:=v*8;
          val(s[2],v1,pe);
          v:=v+v1*4;
          val(s[3],v1,pe);
          v:=v+v1*2;
          val(s[4],v1,pe);
          v:=v+v1;
          case v of
            0..9:str(v,s);
            10:s:='A';
            11:s:='B';
            12:s:='C';
            13:s:='D';
            14:s:='E';
            15:s:='F';
          end;
          hexa:=hexa+s;
        end;

      hexadec:=hexa;
    end;



si vous trouvez une difféculté, je suis là pour vous aider Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Mer 14 Mar - 23:14

cheers exellent travail Chaker Idea
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Mer 14 Mar - 23:21

mtcs a écrit:
cheers exellent travail Chaker Idea


EmbarassedEmbarassedEmbarassed MERCI EmbarassedEmbarassedEmbarassed
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Scorshy
utilisateur régulier
utilisateur régulier
avatar

Nombre de messages : 78
Age : 28
Date d'inscription : 18/02/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Jeu 29 Mar - 17:36

Merci pour l'effort tu est sur le bon chemain
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
makram
modérateur
modérateur
avatar

Nombre de messages : 549
Age : 28
Date d'inscription : 29/12/2006

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Jeu 29 Mar - 18:34

mtcs a écrit:

cheers exellent travail Chaker Idea



merci:_è:
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Jeu 29 Mar - 19:37

Excellent travail chakerbh. merci...
J'ai deux remarques :
- La base huit c'est la base octale et non octet (octet désigne l'unité fondamentale de mesure de la capacité d'une mémoire)
- les paramètres des fonctions octet et hexadec sont des chaines de caractères (décimale ou binaire : bin = binaire).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Jeu 29 Mar - 19:40

makram a écrit:

merci:_è:


de rien Makram.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Jeu 29 Mar - 19:54

Code:
(* conversion de la base 10 à la base 2 *)
function DecToBin(a : integer):string;
var s : string;
begin
  s := '';
  while (a <> 0) do begin
    s := chr(48 + a and 1) + s;
    a := a shr 1; (* diviser a par deux *)
  end; 
  DecToBin := s; 
end;

(* conversion de la base 10 à la base 8 *)
function DecToOct(a : integer):string;
var s : string;
begin
  s := '';
  while (a <> 0) do begin
    s := chr(48 + a and 7) + s;
    a := a shr 3; (* diviser a par huit *)
  end; 
  DecToOct := s; 
end;

(* conversion de la base 10 à la base 16 *)
function DecToHex(a : integer):string;
var s : string;
const h : string[16] = '0123456789ABCDEF';
begin
  s := '';
  while (a <> 0) do begin
    s := h[a and 15 + 1] + s;
    a := a shr 4; (* diviser a par seize *)
  end; 
  DecToHex := s; 
end;
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Jeu 29 Mar - 20:06

Merci pour l'effort Manianis.
Les paramétres sont (bin=binaire) donc ta remarque est bonne, là j'ai fait la convertion de la base 2 à la base 8 et à la base 16.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Jeu 29 Mar - 20:09

Mais j'ai pas compris quelque chose : c'est quoi "shr" ??
D'aprés ton commentaire les deux codes suivant seraient équivalent :
Code:
a:=a shr 1;
Code:
a:=a div 2;
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
benha21
utilisateur professionnel
utilisateur professionnel
avatar

Nombre de messages : 349
Age : 31
Date d'inscription : 28/01/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Ven 30 Mar - 3:18

L'opérateur shr travaille sur des bits; a shr b enlève b bits du poids le plus faible.
exemples :

  • 110101 shr 1 = 11010
  • 110101 shr 3 = 110
  • 24 shr 2 = 11000 shr 2 = 24 div 2² = 110 = 6

Donc pour résumer a shr b ~ a div 2b
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://benha21.skyblog.com
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Ven 30 Mar - 8:49

benha21 a écrit:
L'opérateur shr travaille sur des bits; a shr b enlève b bits du poids le plus faible.
exemples :

  • 110101 shr 1 = 11010
  • 110101 shr 3 = 110
  • 24 shr 2 = 11000 shr 2 = 24 div 2² = 110 = 6

Donc pour résumer a shr b ~ a div 2b
Oui en effet c'est cela merci benha21.
a shr b effectue un décalage (shr = shift to right) de a à droite de b bits ce qui equivaut à diviser autant de fois par deux.
Exemples :
100 shr 1 = 100 div 2 = 50
100 shr 2 = (100 div 2) div 2 = 25
100 shr 3 = ((100 div 2) div 2) div 2 = 12
Pour les microprocesseurs intel le décalage à droite(shr)/à gauche (shl) est plus rapide que l'opération de division (div).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Ven 30 Mar - 9:09

J'ai essayé de t'imiter chakerbh. voici une autre réécriture de la conversion Binaire (base 2) en Octal (base 8).
Code:
function BinToOct(bin : string):string;
var i, v : integer;
    oct : string;
begin
    i:=length(bin);
    oct := '';
    while (i >= 1) do begin
      v := ord(bin[i]) - 48;
        i := i - 1;
        if (i >= 1) then begin
            v := v + (ord(bin[i]) - 48) * 2;
            i := i - 1;
        end;
        if (i >= 1) then begin
            v := v + (ord(bin[i]) - 48) * 4;
            i := i - 1;
        end;
        oct := chr(v + 48) + oct;
    end;
    BinToOct := oct;
end;

Rq !!! Ce code n'est pas testé s'il y'a une erreur veuillez me la signaler SVP.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Ven 30 Mar - 11:33

Oui ce code marche bien, mais il manque un point virgule que je vais ajouter.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Ven 30 Mar - 11:34

Et merci à vous deux pour l'explication.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Ven 30 Mar - 18:04

chakerbh je propose la liste des conversions suiavntes :

Code:
(* conversion de la base 10 à la base 2 *)
function DecToBin(a : integer):string;
var s : string;
begin
  s := '';
  while (a <> 0) do begin
    s := chr(48 + a and 1) + s;
    a := a shr 1; (* diviser a par deux *)
  end; 
  DecToBin := s; 
end;

(* conversion de la base 2 à la base 10 *)
function BinToDec(bin : string):integer;
var i, v : integer;
begin
  v := 0;
  for i:=1 to length(bin) do begin
    v := v shl 1 + Ord(bin[i]) - 48;
  end; 
  BinToDec := v; 
end;

(* conversion de la base 10 à la base 8 *)
function DecToOct(a : integer):string;
var s : string;
begin
  s := '';
  while (a <> 0) do begin
    s := chr(48 + a and 7) + s;
    a := a shr 3; (* diviser a par huit *)
  end; 
  DecToOct := s; 
end;

(* conversion de la base 8 à la base 10 *)
function OctToDec(oct : string):integer;
var i, v : integer;
begin
  v := 0;
  for i:=1 to length(oct) do begin
    v := v shl 3 + Ord(oct[i]) - 48;
  end; 
  OctToDec := v; 
end;

(* conversion de la base 10 à la base 16 *)
function DecToHex(a : integer):string;
var s : string;
const h : string[16] = '0123456789ABCDEF';
begin
  s := '';
  while (a <> 0) do begin
    s := h[a and 15 + 1] + s;
    a := a shr 4; (* diviser a par seize *)
  end; 
  DecToHex := s; 
end;

(* conversion de la base 16 à la base 10 *)
function HexToDec(hex : string):integer;
var i, v, v1 : integer;
begin
  v := 0;
  for i:=1 to length(hex) do begin
    if (hex[i] <= '9') then 
      v1 := Ord(hex[i]) - 48
    else
      (* ord('A') = 65 ; ord('0') = 48 ; A(16) = 10(10) ==> 65 - (48 + 7) = 10 *)
      v1 := Ord(hex[i]) - (48 + 7);
    v := v shl 4 + v1;
  end; 
  HexToDec := v; 
end;

(* conversion de la base 2 à la base 8 *)
function BinToOct(bin : string):string;
var i, v : integer;
    oct : string;
begin
    i:=length(bin);
    oct := '';
    while (i >= 1) do begin
      v := ord(bin[i]) - 48;
        i := i - 1;
        if (i >= 1) then begin
            v := v + (ord(bin[i]) - 48) * 2;
            i := i - 1;
        end;
        if (i >= 1) then begin
            v := v + (ord(bin[i]) - 48) * 4;
            i := i - 1;
        end;
        oct := chr(v + 48) + oct;
    end;
    BinToOct := oct;
end;

(* conversion de la base 8 à la base 2*)
function OctToBin(oct : string):string;
var bin : string;
    i, j, v : integer;
begin
  bin := '';
  for i:=1 to length(oct) do begin
    v := ord(oct[i]) - 48;
    bin := bin +
            chr(48 + (v and 4) shr 2) +
            chr(48 + (v and 2) shr 1) +
            chr(48 + v and 1);
  end;
  while (length(bin) > 1) and (bin[1] = '0') do Delete(bin, 1, 1);
  OctToBin := bin;
end;


(* conversion de la base 2 à la base 16 *)
function BinToHex(bin : string):string;
const h : string = '0123456789ABCDEF';
var i, v, c : integer;
    hex : string;
begin
    i:=length(bin);
    c:=1; v:=0;
    hex := '';
    while (i >= 1) do begin
      v := v + c * (ord(bin[i]) - 48);
         
      if (c = 8) or (i = 1) then begin
        hex := h[v+1] + hex;
        v := 0; c:=1;
      end else c := c * 2;
      i := i - 1;
    end;
    BinToHex := hex;
end;

(* conversion de la base 2 à la base 16 *)
function HexToBin(hex : string):string;
var i, v : integer;
    bin : string;
begin
    bin := '';
  for i:=1 to length(hex) do begin
    v := ord(hex[i]) - 48;
    if (v > 9) then v := v - 7;
    bin := bin +
            chr(48 + (v and 8) shr 3) +
            chr(48 + (v and 4) shr 2) +
            chr(48 + (v and 2) shr 1) +
            chr(48 + v and 1);
  end;
  while (length(bin) > 1) and (bin[1] = '0') do Delete(bin, 1, 1);
  HexToBin := bin;
end;

(* conversion de la base 8 à la base 16 *)
function OctToHex(oct : string):string;
begin
  OctToHex := DecToHex(OctToDec(oct));
end;

(* conversion de la base 16 à la base 8 *)
function HexToOct(hex : string):string;
begin
  HexToOct := DecToOct(HexToDec(hex));
end;

Rq !! Attention : Peut-être que certains demanderons pourquoi il s'amuse à donner une autre solution alors que chakerbh l'a déjà fait. D'autres dirons que je suis entrains de me vanter.
Mais, je le fait pour montrer à tous les programmeurs débutants (surtout aux débutants) qu'il n'existe pas une solution unique en programmation.
J'ai beaucoup de fois vu des élèves fournir une solution différente de celle de leurs enseignants et avoir une mauvaise note malgré que leur solution est aussi bonne... la solution est fournie ci-dessus...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Ven 30 Mar - 18:43

Merci pour l'effort Manianis.

Maintenant je me rappel pour quoi j'ai mis le paramétre bin dans les fonctions hexadec et octale, en fait je crois qu'il est mieu d'utiliser une base intermédiaire (par exemple binaire) ainsi pour la convertion entre les base 2, 8, 10 et 16 (dans toutes les directions) on aura seulement besoin de 6 fonctions:

  • BinToDec
  • BinToHex
  • BinToOct
  • DecToBin
  • HexToBin
  • OctToBin
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Ven 30 Mar - 20:07

Oui c'est vrai chakerbh je suis d'accord avec toi. Mais comme je suis comme toi càd on aime optimiser alors j'ai fait cet attelage de fonction.

Encodage
Base 10 --------> Base X (X différent de 10)

Décodage
Base X ---------> Base 10 (X différent de 10)

Transcodage
Base X ------> Base 10 --------> Base Y (X,Y différents de 10)

En informatique, dans les langages évolués il est plus simple d'utiliser la base 10. Si on souhaite optimiser ou on souhaite écrire en langage machine on passe par la base 2.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Ven 30 Mar - 20:52

Merci pour la précition.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
benha21
utilisateur professionnel
utilisateur professionnel
avatar

Nombre de messages : 349
Age : 31
Date d'inscription : 28/01/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Sam 31 Mar - 14:43

chakerbh a écrit:
Et merci à vous deux pour l'explication.

De rien coz.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://benha21.skyblog.com
ho1907
Nouveau
Nouveau


Nombre de messages : 29
Date d'inscription : 22/10/2007

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Mer 13 Fév - 14:05

merci infiniment & jazaka ALLAH kol 5ir
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
zayotsu
Nouveau
Nouveau


Nombre de messages : 1
Age : 27
Date d'inscription : 29/02/2008

MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   Ven 29 Fév - 19:11

merci pour tous vous m'avez fait un trés grand service
cheers
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Convertion : Décimale-->Binaire,Héxadécimale et Octet   

Revenir en haut Aller en bas
 
Convertion : Décimale-->Binaire,Héxadécimale et Octet
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum programmation :: Programmation :: Delphi & Pascal :: Pascal :: Cours-
Sauter vers: