Pagini recente » Cod sursa (job #530355) | Cod sursa (job #2407996) | Cod sursa (job #2791104) | Cod sursa (job #257182) | Cod sursa (job #544837)
Cod sursa(job #544837)
program alex;
var f:text;
s,fp:ansistring;
st:array[0..100000]of char;
x,st1:array[0..100000]of longint;
k,j,i,d,y:longint;
er:integer;
t:ansistring;
procedure adauga;
var t1:string;
nr:longint;
begin
d:=d+1;
str(d,t1);
val(t,nr);
fp:=fp+'x'+t1;
x[d]:=nr;
end;
begin
assign(f,'evaluare.in');reset(f);
readln(f,s);
close(f);
insert('(',s,1);
s:=s+')';
fp:='';
t:='';
d:=0;
for i:=1 to length(s) do
if s[i]='(' then begin
if t<>'' then adauga;
t:='';
k:=k+1;
st[k]:='(';
end
else if s[i]=')' then begin
if t<>'' then adauga;
t:='';
j:=k;
while st[k]<>'(' do
begin
fp:=fp+st[k];
k:=k-1;
end;
k:=k-1;
end
else if(s[i]='*')or(s[i]='/')then begin
if t<>'' then adauga;
t:='';
while(st[k]='*')or(st[k]='/')do
begin
fp:=fp+st[k];
k:=k-1;
end;
k:=k+1;
st[k]:=s[i];
end
else if(s[i]='+')or(s[i]='-')then begin
if t<>'' then adauga;
t:='';
while(st[k]='*')or(st[k]='/')or(st[k]='+')or(st[k]='-')do
begin
fp:=fp+st[k];
k:=k-1;
end;
k:=k+1;
st[k]:=s[i];
end
else t:=t+s[i];
k:=0;
i:=0;
repeat
i:=i+1;
case fp[i] of
'+':begin
st1[k-1]:=st1[k-1]+st1[k];
st1[k]:=0;
k:=k-1;
end;
'-':begin
st1[k-1]:=st1[k-1]-st1[k];
st1[k]:=0;
k:=k-1;
end;
'/':begin
st1[k-1]:=st1[k-1] div st1[k];
st1[k]:=0;
k:=k-1;
end;
'*':begin
st1[k-1]:=st1[k-1]*st1[k];
st1[k]:=0;
k:=k-1;
end;
'x':begin
j:=i+1;
t:='';
while(fp[j]>='0')and(fp[j]<='9')do
begin
t:=t+fp[j];
j:=j+1;
end;
i:=j-1;
val(t,y,er);
k:=k+1;
st1[k]:=x[y];
end;
end;
until(i>=length(fp));
assign(f,'evaluare.out');rewrite(f);
writeln(f,st1[1]);
close(f);
end.