Cod sursa(job #720243)

Utilizator ZancrowAugustin Zancrow Data 22 martie 2012 14:55:54
Problema Evaluarea unei expresii Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.05 kb
var h,f:text;
    s:string;
    ch:char;

function s2i(s:string):integer;
var r:integer; c:integer;
begin
  val(s,r,c);
  s2i:=r;
end;

function eval(left, right:integer):integer;
var p1,p2,p3,p4,i,pp:integer;
begin
  p1:=0;p2:=0;p3:=0;p4:=0; pp:=0;
  for i:=left to right do
  if s[i]='(' then inc(pp)
  else if s[i]=')' then dec(pp)
  else if pp=0 then
     case s[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 s[left]='(' then eval:=eval(left+1, right-1)
  else eval:=s2i(copy(s,left, right-left+1));
end;

begin
  assign(f,'evaluare.in');
   reset(f);
   while not eof(f) do begin
   readln(f,ch);
   s:=s+ch;
   end;
   assign(h,'evaluare.out');
   rewrite(h);
  writeln(h,eval(1, length(s)));
  close(f);
  close(h);
  readln;
end.