Évaluation d'une expression arithmétique
Bonjour à tous,
tout d'abord merci pour le temps que vous voulez bien me consacrer afin de lire mon message et je l'espère d'y répondre.
J'ai écrit un programme qui permet d'évaluer une expression arithmétique post-fixée a l'aide d'une pile d'entiers ; l'erreur 216 apparaît. Je vous poste mon code ci-dessous :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| program poste_fixee;
type pile=^noeud;
noeud=record
val:integer;
suiv:pile;
end;
procedure empiler(var e:integer;p:pile);
var k:pile;
begin
new (k);
k^.val:=e;
k^.suiv:=p;
p:=k;
dispose(k);
end;
function depiler(p:pile):integer;
var t:integer;
begin
t:=p^.val;
depiler:=t;
p:=p^.suiv;
end;
function conversion(var c:char):integer;
var t:char;
begin
t:=c;
if (t='0') then conversion:=0 else
if(t='1') then conversion:=1 else
if(t='2') then conversion:=2 else
if(t='3') then conversion:=3 else
if(t='4') then conversion:=4 else
if(t='5') then conversion:=5 else
if(t='6') then conversion:=6 else
if(t='7') then conversion:=7 else
if(t='8') then conversion:=8 else
conversion:=9
end;
procedure somme(p:pile);
var x,y,s:integer;
begin
x:=depiler(p);
y:=depiler(p);
s:=x+y;
empiler(s,p);
end;
procedure multiplication(p:pile);
var x,y,s:integer;
begin
x:=depiler(p);
y:=depiler(p);
s:=y*x;
empiler(s,p);
end;
procedure affiche_sommet(p:pile);
begin
writeln('le resultat de l operation est:',p^.val);
end;
function nbr_char(x:string):integer;
var i:integer;
begin
i:=0;
while (x[i]>chr(0)) do
begin
i:=i+1;
end;
nbr_char:=i-1;
end;
var c:string[20];n,i,k:integer;p:pile;
begin
write('entez l operation post_fixe svp:');
readln(c);
n:=nbr_char(c);
p:=nil;
for i:=1 to n do
begin
if (c[i] in ['0' ..'9'] then
begin
k:=conversion(c[i]);
empiler(k,p);
end
else if (c[i]='+') then somme(p)
else
multiplication(p);
end;
affiche_sommet(p);
readln;
end. |