Pagini recente » Cod sursa (job #1123693) | Cod sursa (job #1318326) | Cod sursa (job #1166168) | Cod sursa (job #1875223) | Cod sursa (job #726080)
Cod sursa(job #726080)
var s:array[1..100000] of char;
f1,f2:text;
n:longint;
function f(s:string):longint;
var r:longint; c:integer;
begin
val(s,r,c);
f:=r;
end;
function eval(left,right:longint):longint;
var pp,p1,p2,p3,p4,i:longint; s2:string; b:boolean;
begin
pp:=0; p1:=0; p2:=0; p3:=0; p4:=0;
b:=true; i:=left;
while b and (i<=right) do
begin
if s[i]='(' then pp:=pp+1
else if s[i]=')' then pp:=pp-1
else if pp=0 then begin
if s[i]='+' then p1:=i;
if s[i]='-' then p2:=i;
if s[i]='*' then p3:=i;
if s[i]='/' then p4:=i;
end;
i:=i+1;
end;
if p1>p2 then eval:=eval(left, p1-1)+eval(p1+1, right)
else if p2>0 then eval:=eval(left, p2-1)-eval(p2+1, right)
else if p3>p4 then eval:=eval(left, p3-1)*eval(p3+1, right)
else if p4>0 then eval:=eval(left, p4-1) div eval(p4+1, right)
else if s[left]='(' then eval:=eval(left+1, right-1)
else
begin
s2:='';
for i:=left to right do
s2:=s2+s[i];
eval:=f(s2);
end;
end;
begin
assign(f1, 'evaluare.in');
reset(f1);
n:=0;
while not eoln(f1) do
begin
inc(n);
read(f1,s[n]);
end;
close(f1);
assign(f2, 'evaluare.out');
rewrite(f2);
write(f2, eval(1,n));
close(f2);
end.