Cod sursa(job #181093)

Utilizator radu_voroneanuVoroneanu Radu Stefan radu_voroneanu Data 17 aprilie 2008 21:05:19
Problema Evaluarea unei expresii Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.14 kb
var s:array[1..100000] of char;
    f,g:text;
    rez,i,n:longint;

function suma:longint; forward;
function produs:longint; forward;
function termen:longint; forward;

function suma:longint;
 var sum,aux,j:longint;
 begin
  sum:=produs;
  while (s[i] in ['+','-']) do begin
   inc(i); j:=i-1;
   aux:=produs;
   if s[j]='+' then
    sum:=sum+aux
   else
    sum:=sum-aux;
  end;
  suma:=sum;
 end;

function produs:longint;
 var prod,j,aux:longint;
 begin
  prod:=termen;
  while (s[i] in ['*','/']) do begin
   inc(i); j:=i-1;
   aux:=termen;
   if s[j]='*' then
    prod:=prod*aux
   else
    prod:=prod div aux;
  end;
  produs:=prod;
 end;

function termen:longint;
 var x:longint;
 begin
  x:=0;
  if s[i]='(' then begin
   inc(i);
   x:=suma;
   inc(i);
  end
  else
   while (s[i] in ['0'..'9']) do begin
    x:=x*10+ord(s[i])-ord('0');
    inc(i);
   end;
  termen:=x;
 end;

begin
 assign(f,'evaluare.in'); reset(f);
 assign(g,'evaluare.out'); rewrite(g);
 i:=0;
 while (not(eoln(f))) do begin
  inc(i);
  read(f,s[i]);
 end;
 i:=1;
 rez:=suma;
 writeln(g,rez);
 close(f); close(g);
end.