Pagini recente » Cod sursa (job #1966213) | Cod sursa (job #3259341) | Cod sursa (job #185267) | Cod sursa (job #482266) | Cod sursa (job #543801)
Cod sursa(job #543801)
var a:array[1..1000000] of char;
n:longint;
f:text;
buf:array[1..1000] of char;
procedure citire;
var f:text;
begin
assign(f,'evaluare.in');
reset(f);
n:=0;
settextbuf(f,buf);
while not eoln(f) do
begin
inc(n);
read(f,a[n]);
end;
close(f);
end;
function a2r(left,right:longint):longint;
var i,j:longint;
begin
a2r:=0;
for i:=left to right do
a2r:=a2r*10 + ord(a[i])-ord('0');
end;
function eval(left,right:longint):longint;
var i,p1,p2,p3,p4,pp:longint;
begin
p1:=0;
p2:=0;
p3:=0;
p4:=0;
pp:=0;
for i:=left to right do
if a[i]='('then inc(pp)
else if a[i]=')'then dec(pp)
else if pp=0 then
case a[i] of
'+':p1:=i;
'-':p2:=i;
'*':p3:=i;
'/':p4:=i;
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 a[left]='(' then eval:=eval(left+1,right-1)
else eval:=a2r(left,right);
end;
begin
citire;
assign(f,'evaluare.out');
rewrite(f);
settextbuf(f,Buf);
write(f,eval(1,n));
close(f);
end.