Ecriture de procédure et fontion en pascal

bild Messages postés 60 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,
je voudrais écrire la procédure decompbin(nbre:integer; var nbrebin:nombrebinaire); qui qui décompose 1 décimal en binaire . on me demande de fais cela tableau mais je parviens à le faire seulement sans tableau et je voudrai que vous m'aider à le faire avec les tableaux

procedure decompbin(nbre:integer; var nbrebin:nombrebinaire);

var
N,Q,R:nombrebinaire;
BEGIN
readln(N);
repeat
Q:=N div 2 ;
R:=N mod 2;
writeln(R);
N:=Q;
until Q=0;
END.
Configuration: Windows XP
Firefox 2.0.0.16

3 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Le code peut être amélioré, (j'essaierai de le faire à la suite) mais pour te compléter voici :
    const Nmax=31; // 2^31 limite du type integer !
    
    type Binaire=array[1..Nmax] of byte;
    
    procedure DecToBin(Dec:integer;var Bin:Binaire);
    var i,Q,R:integer;
        s:string;
    begin
         s:='';
         for i:=1 to Nmax do Bin[i]:=0;
         repeat
               Q:=Dec div 2 ;
               R:=Dec mod 2;
               if R=0 then s:=s+'0'
                      else s:=s+'1';
               Dec:=Q;
         until Q=0;
         for i:=1 to length(s) do
             if s[i]='1' then Bin[Nmax-i+1]:=1;
    end;
    
    var Bin:Binaire;
        i:integer;
    begin
    DecToBin(13,Bin);
    for i:=1 to Nmax do write(Bin[i]);
    writeln; write('Fin du programme. Appuyer sur Entree'); readln;
    end.
    --
    La confiance n'exclut pas le contrôle 
    1
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Version optimisée (la différence est flagrante)
      const Nmax=31; // 2^31 limite du type integer !
      
      type Binaire=array[1..Nmax] of byte;
      
      procedure DecToBin(Dec:integer;var Bin:Binaire);
      var i:integer;
      begin
           for i:=Nmax downto 1 do
               begin
                 Bin[i]:=Dec mod 2;
                 Dec:=Dec div 2;
               end;
      end;
      --
      La confiance n'exclut pas le contrôle 
      0
  2. bild Messages postés 60 Statut Membre
     
    merci la procedure decompbin

    pour les fontion decalage j'ai cherche ceux -ci

    a gauche

    fonction decalageg(var nbbin: nbrebinaire):integer;
    const N=10;
    var nbbin:nbrebinaire
    i:integer;
    BEGIN
    i:=N;
    nbin[pos N]:=nbin[pos N-1];
    nbin[pos 1]:=0;i;=i+1];
    end;
    end;

    A DROITE
    fonction decalD(var nbbin:nbrebinaire):integer;
    N=10;
    var
    nbbin:nbrebinaire;
    i:integer;
    BEGIN
    i:=1;
    nbbin[pos 2]:=nbbin[pos 3];
    nbbin[pos N ]:=0;
    end;
    end;
    0
  3. KX Messages postés 19031 Statut Modérateur 3 020
     
    Je ne suis pas sûr d'avoir compris quel était le but des fonctions de décalage...
    S'agissait-il des opérations de multiplication et division par 2 ?
    const Nmax=31; // 2^31 limite du type integer !
    
    type Binaire=array[1..Nmax] of byte;
    
    function DecaleGauche(var Bin:Binaire):byte;
    var i:integer;
    begin
         result:=Bin[1];
         for i:=1 to Nmax-1 do
             Bin[i]:=Bin[i+1];
         Bin[Nmax]:=0;
    end;
    
    function DecaleDroite(var Bin:Binaire):byte;
    var i:integer;
    begin
         result:=Bin[Nmax];
         for i:=Nmax downto 2 do
             Bin[i]:=Bin[i-1];
         Bin[1]:=0;
    end;
    0