Ecriture de procédure et fontion en pascal

Fermé
bild Messages postés 52 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 12 janvier 2017 - 26 juil. 2008 à 18:35
KX Messages postés 16740 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 mai 2024 - 27 juil. 2008 à 20:02
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.
A voir également:

3 réponses

KX Messages postés 16740 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 mai 2024 3 016
26 juil. 2008 à 20:27
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
KX Messages postés 16740 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 mai 2024 3 016
26 juil. 2008 à 20:40
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
bild Messages postés 52 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 12 janvier 2017
27 juil. 2008 à 17:27
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
KX Messages postés 16740 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 mai 2024 3 016
27 juil. 2008 à 20:02
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