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
15266
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 juin 2022
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
267
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
20 mai 2022
13
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
267
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
20 mai 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
267
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
20 mai 2022
13 > 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
267
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
20 mai 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