Cod sursa(job #359346)

Utilizator philipPhilip philip Data 26 octombrie 2009 18:09:12
Problema Evaluarea unei expresii Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.34 kb
var a:array[1..100001] of char;
    s:string;
    i,n,k,r:longint;
    f:text;


procedure citire;
  begin
    assign(f,'evaluare.in');
    reset(f);
    while not eof(f) do begin
      read(f,s);
      for i:=1 to length(s) do begin
        n:=n+1;
        a[n]:=s[i];
      end;
    end;
    a[n+1]:=')';
    n:=n+1;
    close(f);
  end;


function aduna():longint;
forward;

function factor():longint;
  var r:longint;
  begin
    r:=0;
    if a[k]='(' then begin
      k:=k+1;
      r:=aduna();
      k:=k+1;
    end else while (ord(a[k])>47) and (ord(a[k])<58) do begin
      r:=r*10+ord(a[k])-48;
      k:=k+1;
    end;
    factor:=r;
  end;


function termen():longint;
  var r:longint;
  begin
    r:=factor();
    while (a[k]='*') or  (a[k]='/') do begin
      if a[k]='*' then begin
        k:=k+1;
        r:=r*factor();
      end else begin
        k:=k+1;
        r:=trunc(r/factor());
      end;
    end;
    termen:=r;
  end;


function aduna():longint;
  var r:longint;
  begin
    r:=termen();
    while (a[k]='+') or  (a[k]='-') do begin
      if a[k]='+' then begin
        k:=k+1;
        r:=r+termen();
      end else begin
        k:=k+1;
        r:=r-termen();
      end;
    end;
    aduna:=r;
  end;


begin
  citire;
  k:=1;
  write(aduna());
  readln;

end.