Cod sursa(job #301271)

Utilizator mimarcelMoldovan Marcel mimarcel Data 8 aprilie 2009 08:19:08
Problema Evaluarea unei expresii Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.36 kb
const max=100001;
      p:longint=0;
var e:array[1..max]of char;

function evaluare:longint;forward;


function cifra(c:char):boolean;
var o:byte;
begin
o:=ord(c);
if(o>=48)and(o<=57)then cifra:=true
                   else cifra:=false;
end;

function termen:longint;
begin
if e[p]='(' then
  begin
  inc(p);
  termen:=evaluare;
  inc(p);
  end
            else
  begin
  termen:=0;
  while cifra(e[p]) do
    begin
    termen:=termen*10+ord(e[p])-48;
    inc(p);
    end;
  end;
end;

function factor:longint;
var ok:boolean;
begin
ok:=false;
factor:=termen;
repeat
case e[p] of
  '*':begin
      inc(p);
      factor:=factor*termen;
      end;
  '/':begin
      inc(p);
      factor:=factor div termen;
      end;
  else ok:=true;
  end;
until ok;
end;

function evaluare:longint;
var ok:boolean;
begin
ok:=false;
evaluare:=factor;
repeat
case e[p] of
  '+':begin
      inc(p);
      evaluare:=evaluare+factor;
      end;
  '-':begin
      inc(p);
      evaluare:=evaluare-factor;
      end;
  else ok:=true;
  end;
until ok;
end;

begin
assign(input,'evaluare.in');
reset(input);
assign(output,'evaluare.out');
rewrite(output);
while not eoln do begin
                  inc(p);
                  read(e[p]);
                  end;
e[p+1]:=' ';
p:=1;
writeln(evaluare);
close(input);
close(output);
end.