Cod sursa(job #493296)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 17 octombrie 2010 18:40:05
Problema Evaluarea unei expresii Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.38 kb
program evaluare_expr;
const MAX=100001;
type sir=array[1..MAX] of char;
var s:sir; f,g:text;  n,p:0..MAX;
procedure citire;
begin
n:=0;
While not seekeoln(f) do
 begin
 inc(n);
 Read(f,s[n]);
 end;
end;
function factori:longint; forward;
function expresii:longint; forward;
function termeni:longint; {adunare / scadere}
var r:longint;
begin
r:=factori;
While (s[p]='+')or(s[p]='-') do
begin
If s[p]='+' then
          begin
          inc(p);
          r:=r+factori;
          end;
If s[p]='-' then
          begin
          inc(p);
          r:=r-factori;
          end;
end;
termeni:=r;
end;
function factori:longint; {inmultire / impartire }
var r:longint;
begin
r:=expresii;
While (s[p]='*')or(s[p]='/') do
begin
If s[p]='*' then
          begin
          inc(p);
          r:=r*expresii;
          end;
If s[p]='/' then
          begin
          inc(p);
          r:=r div expresii;
          end;
end;
factori:=r;
end;
function expresii:longint;
var r:longint;
begin
r:=0;
If s[p]='(' then
          begin
          inc(p);
          r:=termeni;
          inc(p);
          end
    else
 While (s[p]>='0')and(s[p]<='9') do
  begin
  r:=10*r+ord(s[p])-48;
  inc(p);
  end;
expresii:=r;
end;
begin
Assign(f,'evaluare.in'); Reset(f);
Assign(g,'evaluare.out');Rewrite(g);
citire; Close(f);
p:=1;
Write(g,termeni);
Close(g);
end.