Cod sursa(job #253586)

Utilizator TudorutzuMusoiu Tudor Tudorutzu Data 5 februarie 2009 23:38:01
Problema Evaluarea unei expresii Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.44 kb
const cifre=['0'..'9'];
var v:ansistring;
    i:longint;
function eval(var i:longint):longint;forward;
function fac(var i:longint):longint;
var r:longint;
begin
     r:=0;
     if v[i]='(' then
     begin
          inc(i);
          r:=eval(i);
          inc(i);
     end
                 else
     if v[i] in cifre then
          repeat
               r:=r*10+(ord(v[i])-ord('0'));
               inc(i)
          until not(v[i] in cifre);
     fac:=r;
end;
function ter(var i:longint):longint;
var r:longint;
begin
     r:=fac(i);
     while v[i]in['/','*'] do
     begin
          if v[i]='/' then
          begin
               inc(i);
               r:=r div fac(i);
          end;
          if v[i]='*' then
          begin
               inc(i);
               r:=r*fac(i);
          end;
     end;
     ter:=r;
end;
function eval(var i:longint):longint;
var r:longint;
begin
     r:=ter(i);
     while v[i] in ['-','+'] do
     begin
          if v[i]='-' then
          begin
               inc(i);
               r:=r-ter(i);
          end;
          if v[i]='+' then
          begin
               inc(i);
               r:=r+ter(i);
          end;
     end;
     eval:=r;
end;
procedure load;
var f,g:text;
begin
     assign(f,'evaluare.in'); reset(f);
     assign(g,'evaluare.out'); rewrite(g);
     readln(f,v);
     i:=1;
     writeln(g,eval(i));
     close(g);
end;
begin
     load;
end.