Cod sursa(job #211336)

Utilizator FllorynMitu Florin Danut Flloryn Data 1 octombrie 2008 20:11:45
Problema Evaluarea unei expresii Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.7 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.