Cod sursa(job #589128)

Utilizator gicu_01porcescu gicu gicu_01 Data 11 mai 2011 00:44:04
Problema Evaluarea unei expresii Scor 60
Compilator fpc Status done
Runda Arhiva educationala Marime 1.32 kb
type vector=array[1..100000]of char;
var s:vector; n:longint;
    buf:vector; t:text;

procedure init;
var f:text;
begin
 assign(f,'evaluare.in');
 reset(f);
 settextbuf(f,buf);
 n:=0;
 while not eof(f) do
  begin
   while not eoln(f) do
    begin inc(n); read(f,s[n]); end;
   readln(f);
  end;
 close(f);
end;

function rup(s:vector;left,right:longint):longint;
var i:longint; k:int64;
begin
 k:=0;
 for i:=left to right do
  k:=k*10+ord(s[i])-ord('0');
 rup:=k;
end;

function eval(s:vector;left,right:longint):longint;
var i,p1,p2,p3,p4,k:longint;
begin
 p1:=0;p2:=0;p3:=0;p4:=0;k:=0;
 for i:=left to right do
  if s[i]='(' then inc(k) else
   if s[i]=')' then dec(k) else
    if k=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;
 if (p1>p2)and(p1>0) then eval:=eval(s,left,p1-1)+eval(s,p1+1,right) else
 if p2>0 then eval:=eval(s,left,p2-1)-eval(s,p2+1,right) else
 if (p3>p4)and(p3>0) then eval:=eval(s,left,p3-1)*eval(s,p3+1,right) else
 if p4>0 then eval:=eval(s,left,p4-1) div eval(s,p4+1,right) else
 if s[left]='(' then eval:=eval(s,left+1,right-1) else
 eval:=rup(s,left,right);
end;

begin
 init;
 assign(t,'evaluare.out');
 rewrite(t);
 writeln(t,eval(s,1,n));
 close(t);
end.