Cod sursa(job #1549861)

Utilizator laura.calimanLaura Caliman laura.caliman Data 12 decembrie 2015 20:10:03
Problema Evaluarea unei expresii Scor 50
Compilator fpc Status done
Runda Arhiva educationala Marime 1.17 kb
var s:string;
    i,j,k:longint;
    
function str2int(a,b:longint):longint;
var i,n:longint;
begin
  n:=0;
  for i:=a to b do
    n:=n*10 + ord(s[i])-ord('0');
  str2int:=n;
end;
    
function eval(st,dr:longint):longint;
var i,j,p:longint;
    b:boolean;
begin
  b:=true;
  j:=0;
  for i:=dr downto st do begin
    if (s[i]='(') then inc(p);
    if (s[i]=')') then dec(p);
    if b and (s[i]='+') and (p=0) then begin
      b:=false;
      eval:=eval(st,i-1)+eval(i+1,dr);
      break;
    end;
    if b and (s[i]='-') and (p=0) then begin
      b:=false;
      eval:=eval(st,i-1)-eval(i+1,dr);
      break;
    end;
    if b and ((s[i]='*') or (s[i]='/')) and (p=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(input,'evaluare.in');
  assign(output,'evaluare.out');
  reset(input);
  rewrite(output);
  read(s);
  writeln(eval(1,length(s)));
end.