Mon program pascal ne marche pas

Résolu
cdtdbord - Modifié par Cirec le 9/03/2015 à 13:06
cdtdbord Messages postés 5 Date d'inscription vendredi 6 mars 2015 Statut Membre Dernière intervention 20 août 2015 - 14 mars 2015 à 23:24
bonsoir à tous. j'ai un problème avec mon program, je veux qu'il me convertisse un binaire en decimal .
theoriquement quand je prends des binaires pr le tester il marche mais pratiquement non. j'ai besoin de votre aide pr voir ce qui ne va pas ds mon program. merci d'avance.
program puiss2; 
uses crt; 
const N=6; 
var e,nbit,deci,i,j:integer;
 var tbit:array[0..N] of integer;   
function puis(c:longint;d:longint):longint; 
begin  
e:=1;  i:=1;  
while (i<=d) do     
begin        
 e:=e*c;      
   i:=i+1;    
 end;    
 puis:=e; 
end;  
 BEGIN
 clrscr; 
 writeln('Entrez le nombre de bit:'); 
 read(nbit);  
for i:=0 to (nbit-1) do    
begin    
   writeln('bit ',i+1,': ');      
 readln(tbit[i]);   
 end;
 deci:=0;
 i:=nbit-1;    
  for j:=0 to (nbit-1) do    
begin    
 deci:=deci+tbit[j]*puis(2,i);    
 i:=i-1;    
end; 
for i:=0 to nbit-1 do 
begin   
  write(tbit[i]);
end; 
write(' en decimal est: ',deci); 
repeat until keypressed; END.

2 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
9 mars 2015 à 09:22
Bonjour,

Quelques conseils:

- utilises la colorisation syntaxique pour gagner en lisibilité. [Plus d'infos ici http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code]
- si tu ne nous dis pas où est le problème, ça va être un peu compliquer de t'aider

theoriquement quand je prends des binaires pr le tester il marche mais pratiquement non

Sans commentaire...
;)

0
cdtdbord Messages postés 5 Date d'inscription vendredi 6 mars 2015 Statut Membre Dernière intervention 20 août 2015
11 mars 2015 à 22:43
merci Buno en fait je voulais dire par exemple si je prends le binaire 111
le nombre de bit est 3.
en theorie voici ce que sa donne:
dans ma deuxième boucle:
i=2, j=0, deci=0+1*2^2=4
i pass à 1 et j passe à 1, deci=4+1*2^1=6
i passa à 0 et j à 2, deci=6+1*2^0=7
voici ce que la théorie donne.
quand je donne 111 à mon programme il me donne 12 comme resultat ce qui n'est pas vrai.
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
9 mars 2015 à 17:24
Salut
voici quelques modifications qui pourront peut être résoudre ton problème (j'ai indenté ton code pour plus de compréhension)
à priori il devrait fonctionner

program puiss2;
uses crt;
const N=6;
var nbit,i,j:integer; deci:longint; //**//
var tbit:array[0..N] of integer;
//-----------------------------------------
function puis(c:longint;d:longint):longint;
var e:longint; i:integer; //**//
begin
e := 1;
i := 1;
while (i<=d) do
begin
e := e * c;
i := i + 1;
end;
puis := e; //**// ou result := e;
end;
//------------------------------------------
BEGIN
clrscr;
writeln('Entrez le nombre de bits : ');
read(nbit);
if nbit + 1 > N then exit; //**// erreur le tableau ne comporte que N+1 cases
for i:=0 to (nbit-1) do
begin
writeln('bit ',i+1,' : '); //**// c'est du poids fort au poids faible
readln(tbit[i]);
end;
//**// le bit i=0 est le bit de poids fort
deci := 0;
i := nbit - 1;
for j:=0 to nbit - 1 do
begin
deci := deci + ( tbit[j] * puis(2,i) );
//**// parenthèse pas obligatoires mais précise le calcul fait
i := i - 1;
end;
for i:=0 to nbit-1 do
begin
write(tbit[i]);
end;
write(' en decimal est: ',deci);
repeat until keypressed;
END.


bien sur il y a plus simple :

function BinaireToDecimal(const binaire: string): extended;
var
i,n : integer;
begin
result := 0;
n := length(binaire);
for i := 1 to n do
begin
if Binaire[i] = '1' then
result := result + power(2, n-i);
end;//for
end;

la fonction power nécessite de mettre "Math" dans les uses
0
cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 14
10 mars 2015 à 08:05
Salut dubois77,
Petite modification pour se passer de "power" et améliorer les perfs ;-)
function BinaireToDecimal(const binaire: string): integer;
var
i,n,m : integer;
begin
result := 0;
n := length(binaire);
m := 1;
for i := n downto 1 do
begin
if Binaire[i] = '1' then
result := result + m;
m := m + m;
end;
end;
@+
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14 > cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022
10 mars 2015 à 18:04
Salut yan
Effectivement (j'ai testé !) çà marche
0
cdtdbord Messages postés 5 Date d'inscription vendredi 6 mars 2015 Statut Membre Dernière intervention 20 août 2015
11 mars 2015 à 22:54
merci dubois,en fait on m'a demandé de faire dabord la fonction qui calcule la puissance x^y et de l'utiliser pour convertir un binaire en decimal. par exemple quand je met 111 dans mon programme il me dit:
111 en decimal est 12 ce qui est faux
c'est pour sa je n' merci Buno en fait je voulais dire par exemple si je prends le binaire 111
le nombre de bit est 3.
en theorie voici ce que sa donne:
dans ma deuxième boucle:
i=2, j=0, deci=0+1*2^2=4
i pass à 1 et j passe à 1, deci=4+1*2^1=6
i passa à 0 et j à 2, deci=6+1*2^0=7
voici ce que la théorie donne.
quand je donne 111 à mon programme il me donne 12 comme resultat ce qui n'est pas vrai. ai pas voulu utiliser pow.j'ai apporté les modifications que vous avez apporté mais il ne marche tjr pas
0
cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 14 > cdtdbord Messages postés 5 Date d'inscription vendredi 6 mars 2015 Statut Membre Dernière intervention 20 août 2015
12 mars 2015 à 10:00
Salut,
dans ton code console je dirai que la variable "i" utilisé dans la function "puis" et dans le code console pose problème remplace dans la function "puis" "i" par "k" ( par exemple ) en ajoutant k dans les variable et test pour voir.., mais une variable qui se promène partout c'est pas bien bon :p
@+
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14 > cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022
12 mars 2015 à 12:23
je pense aussi qu'il faut mettre :
for j:=nbit - 1 downto 0
car on commence de cette façon par le bit de poids faible
0
Rejoignez-nous