Program pascal

jumpy07A2668 -  
Archi-dessin Messages postés 281 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
j'ai un pb encore sur la programmation
en effet je voudrais ecrire un programme qui convertie un nombre binaire lue dans un tableau et affiche le resultat en base 10;
et un autre qui le(le binaire lue) complemente à 2
Configuration: Windows XP
Internet Explorer 6.0

4 réponses

  1. Archi-dessin Messages postés 281 Date d'inscription   Statut Membre Dernière intervention   25
     
    salut,
    fait vous même le départ avec les erreurs je vous aide à réaliser
    0
    1. jumpy07A2668
       
      program complement;
      uses crt;
      type
      nombreBinaire=array[1..10] of integer;
      var
      i,j:integer;
      nbBin:nombreBinaire;
      procedure complement1(var nbBin:nombreBinaire);
      var
      j:integer;
      begin
      for j:=1 to 10 do
      if nbBin[j]=0 then
      begin
      nbBin[j]:=nbBin[j]+1;
      write(nbBin[j]:2);
      end
      else
      if nbBin[j]=1 then
      begin
      nbBin[j]:=nbBin[j]-1;
      write(nbBin[j]:2);
      end;
      end;
      procedure complement2(var nbBin:nombreBinaire);
      var
      j:integer;
      begin
      for j:=10 downto 2 do
      if nbBin[j]=0 then
      begin
      write(nbBin[j]:2);
      end
      else
      if nbBin[j]=1 then
      nbBin[j]:=1;
      while j<=1 do
      complement1(nbBin);
      write(nbBin[j]:2);
      end;
      begin
      clrscr;
      writeln('entrez une suite de 0 et 1');
      for j:=1 to 10 do
      read(nbBin[j]);
      writeln('le complement à 1 est: ');
      complement1(nbBin);
      writeln;
      writeln('le complement à 2 est: ');
      complement2(nbBin);
      repeat
      until keypressed;
      end.
      Voilà le deuxieme
      program conversion124;
      uses crt;
      const
      N=10;
      type
      nombreBinaire=array[1..N] of integer;
      function puissance2(i:integer):integer;
      var
      nbre:integer;
      begin
      nbre:=i;
      for i:=1 to 10 do
      nbre:=2*nbre;
      end;
      function conversionBin(var nbBin:nombrebinaire):integer;
      var
      i,nbre,j:integer;
      begin
      nbre:=0;
      for i:=0 to 9 do
      for j:=10 downto 1 do
      nbre:=nbre+nbBin[j]*puissance2(i);
      i:=i+1;
      j:=j-1;
      conversionBin:=nbre;
      end;
      var
      nbre,i:integer;
      nbBin:nombrebinaire;
      begin
      clrscr;
      write('entrez un nombre binaire ((suite de 0 et 1)):');
      for i:=1 to 10 do
      readln(nbbin[i]);
      conversionBin(nbbin);
      writeln('la conversion decimale est:',nbre);
      repeat
      until keypressed;
      end.
      0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    En ce qui concerne ton premier problème (conversion inaire->décimale) voici quelques rectificatifs...
    Je l'ai testé sur un exemple et il donne le bon résultat
    program conversion124; uses crt;
    
    const N=10;
    
    type nombreBinaire=array[1..N] of integer;
    
    function puissance2(n:integer):integer;
    var i:integer;
    begin
         result:=1;
         for i:=1 to n do
             result:=2*result;
    end;
    
    function conversionBin(var nbBin:nombrebinaire):integer;
    var i:integer;
    begin
         result:=0;
         for i:=0 to N-1 do
             result:=result+nbBin[N-i]*puissance2(i);
    end;
    
    var i:integer;
        nbBin:nombrebinaire;
    begin
         clrscr;
         writeln('entrez un nombre binaire (suite de ',N,' chiffres 0 ou 1) :');
         for i:=1 to 10 do
             readln(nbbin[i]);
         writeln('la conversion decimale est : ',conversionBin(nbbin));
    
    repeat until keypressed;
    end. 
    Quelques remarques au passage :

    On pourrait directement inclure le calcul de puissance2 dans la boucle de conversionBin
    On pourrait envisager un type nombreBinaire=string[N] ce qui simplifierai l'écriture de nbBin pour l'utilisateur et ne nécessiterai que quelques modifications mineures du code...

    En ce qui concerne ton deuxième problème je ne comprends pas trop quel résultat tu veux obtenir, et ton code ne m'a pas guère plus aidé à le comprendre, j'espère que Archi-Dessin sera plus inspiré...
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Une version un peu plus "optimisée" :
      function BinToDec(var Bin:string):integer;
      var i,n,p:integer;
      begin
           n:=length(Bin);
           result:=0;
           p:=1;
           for i:=1 to n do
               begin
                    if Bin[n-i+1]<>'0' then result:=result+p;
                    p:=2*p;
               end;
      end;
      --
      La confiance n'exclut pas le contrôle 
      0
  3. Archi-dessin Messages postés 281 Date d'inscription   Statut Membre Dernière intervention   25
     
    salut,
    pour le moument je vais prendre des notes de votre programme pour analyse puis dans un prochain contact je vous propose les anomalies et la résolution
    0
  4. Archi-dessin Messages postés 281 Date d'inscription   Statut Membre Dernière intervention   25
     
    salut,
    le premier programme ne répond pas à votre question donc il est hors sujet
    ilm répond à une question qui est très avancé
    en plus je necrois pas que vous avez fait les deux programmes c à d copie coller ?????????????
    0