Cod sursa(job #733640)

Utilizator AreinIon Guzun Arein Data 12 aprilie 2012 17:58:33
Problema Evaluarea unei expresii Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.04 kb
var a:array[1..100000] of char;
    t:text; n,i:int64;

function s2r(aa,b:int64):int64;
var i,c:longint;    j:longint;
begin
c:=1;
j:=0;
for i:=1 to b-aa+1 do
begin
j:=j+(ord(a[aa-1+i])-ord('0'))*c;
c:=c*10;
end;
s2r:=j;
end;


function eval(left,right:int64):int64;
var p1,p2,p3,p4,pp,i :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:=s2r(left,right);

end;

begin
assign(t,'evaluare.in');
reset(t);
while not eoln(t) do
begin
inc(n);
read(t,a[n]);
end;
close(t);
assign(t,'evaluare.out');
rewrite(t);
write(t,eval(1,n));
close(t);
end.