Pagini recente » Cod sursa (job #491198) | Cod sursa (job #3260060) | Cod sursa (job #382328) | Cod sursa (job #2450612) | Cod sursa (job #145590)
Cod sursa(job #145590)
var fi,fo:text;
s:ansistring;
vf,ct:longint;
v:array[1..100000]of char;
f:array[1..100000]of string[10];
rez:array[1..100000]of longint;
procedure push(vl:char);
begin
inc(vf);
v[vf]:=vl;
end;
procedure pop(var vl:char);
begin
vl:=v[vf];
dec(vf);
end;
procedure solve;
var i,n1,n2:longint;
begin
vf:=0;
if s[1]='-' then
begin
inc(vf); val(f[1],rez[1]);
rez[1]:=-rez[1];
end;
for i:=2 to ct do
if f[i][1] in ['0'..'9'] then
begin
inc(vf); val(f[i],rez[vf]);
end
else
begin
if f[i]='+' then rez[vf-1]:=rez[vf]+rez[vf-1]
else
if f[i]='-' then rez[vf-1]:=rez[vf-1]-rez[vf]
else
if f[i]='/' then rez[vf-1]:=rez[vf-1] div rez[vf]
else
if f[i]='*' then rez[vf-1]:=rez[vf-1]*rez[vf];
dec(vf);
end;
writeln(fo,rez[1]);
end;
procedure eval;
var i,lung,p:longint;
nr:string;
vv:char;
begin
lung:=length(s);
nr:='';
p:=1;
if s[1]='-' then p:=2;
for i:=p to lung do
begin
if s[i] in ['0'..'9'] then nr:=nr+s[i];
if s[i]='(' then push(s[i]);
if s[i]=')' then
begin
inc(ct); f[ct]:=nr; nr:='';
while v[vf]<>'(' do
begin
pop(vv); inc(ct); f[ct]:=vv;
end;
pop(vv);
end;
if s[i] in ['+','-'] then
begin
if nr<>'' then
begin
inc(ct); f[ct]:=nr; nr:='';
end;
while (vf<>0)and(v[vf]<>'(') do
begin
pop(vv); inc(ct); f[ct]:=vv;
end;
push(s[i]);
end;
if s[i] in ['*','/'] then
begin
if nr<>'' then
begin
inc(ct); f[ct]:=nr; nr:='';
end;
while (vf<>0)and((v[vf]='*')or(v[vf]='/')) do
begin
pop(vv); inc(ct); f[ct]:=vv;
end;
push(s[i]);
end;
end;
inc(ct); f[ct]:=nr;
while vf<>0 do
begin
pop(vv); inc(ct); f[ct]:=vv;
end;
solve;
end;
begin
assign(fi,'evaluare.in'); reset(fi);
assign(fo,'evaluare.out'); rewrite(fo);
readln(fi,s);
vf:=0; ct:=0;
eval;
close(fi);
close(fo);
end.