Mon program pascal ne marche pas [Résolu]

Signaler
-
Messages postés
5
Date d'inscription
vendredi 6 mars 2015
Statut
Membre
Dernière intervention
20 août 2015
-
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.
A voir également:

2 réponses

Messages postés
15063
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
18 juin 2021
95
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...
;)

Messages postés
5
Date d'inscription
vendredi 6 mars 2015
Statut
Membre
Dernière intervention
20 août 2015

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.
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
13
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
Messages postés
5
Date d'inscription
vendredi 6 mars 2015
Statut
Membre
Dernière intervention
20 août 2015

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
Messages postés
263
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
28 avril 2021
13 >
Messages postés
5
Date d'inscription
vendredi 6 mars 2015
Statut
Membre
Dernière intervention
20 août 2015

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
@+
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
13 >
Messages postés
263
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
28 avril 2021

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
Messages postés
263
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
28 avril 2021
13 >
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019

Salut dubois77,
d'après ce que je comprend en survolant son code de puissance, je pense que ceci ne changera pas grand chose à son problème...que tu commences dans un sens ou dans l'autre, le résultat sera le même au final...le problème vient très probablement du fait que la variable "i" est défini comme variable dans le code imbriqué et la function et ne se met pas à jour correctement dans la function ce qui fausse le resultat de la puissance. A tester pour en avoir le résultat :p
@+
Messages postés
5
Date d'inscription
vendredi 6 mars 2015
Statut
Membre
Dernière intervention
20 août 2015
>
Messages postés
263
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
28 avril 2021

vraiment je vous remercie yan, dubois, buno.
Mon problème est resolu j'ai remplacé ma variable i par k dans ma fonction puis comme l'a dit yan et mon programme marche bien. Encore merci. je suis contant d'avoir des gens comme vous pour nous aider nous les débutants.