Cod sursa(job #1685790)

Utilizator laura.calimanLaura Caliman laura.caliman Data 11 aprilie 2016 21:02:16
Problema Evaluarea unei expresii Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.33 kb
var n,i:longint;
    s:array[1..100001] of char;
    f,g:text;
    
function str2int(st,dr:longint):longint;
var i,k:longint;
begin
  k:=0;
  for i:=st to dr do begin
    k:=k*10+ord(s[i])-48;
  end;
//  writeln(k);
  str2int:=k;
end;
    
function eval(st,dr:longint):longint;
var i,j,k:longint;
    b:boolean;
begin
  k:=0;
  b:=true;
  j:=0;
  for i:=dr downto st do begin
    if s[i]=')' then dec(k);
    if s[i]='(' then inc(k);
    if (k=0) and (s[i]='+') then begin
      eval:=eval(st,i-1)+eval(i+1,dr);
      b:=false;
      break;
    end;
    if (k=0) and (s[i]='-') then begin
      eval:=eval(st,i-1)-eval(i+1,dr);
      b:=false;
      break;
    end;
    if ((s[i]='*') or (s[i]='/')) and (k=0) then j:=i;
  end;
  if b and (j>0) then begin
    if s[j]='*' then eval:=eval(st,j-1)*eval(j+1,dr);
    if s[j]='/' then eval:=eval(st,j-1) div eval(j+1,dr);
    b:=false;
  end;
  if b and (s[st]='(') then begin
    eval:=eval(st+1,dr-1);
    b:=false;
  end;
  if b then eval:=str2int(st,dr);
end;
    
begin
  assign(f,'evaluare.in');
  assign(g,'evaluare.out');
  reset(f);
  rewrite(g);
  n:=0;
  while not eof(f) do begin
    inc(n);
    read(f,s[n]);
  end;
//  writeln(n);
//  read(s);
//  n:=length(s);
//  for i:=1 to n do write(s[i]);
//  writeln('l');
  write(g,eval(1,n-2));
end.