Cod sursa(job #1504959)

Utilizator ili226Vlad Ilie ili226 Data 18 octombrie 2015 16:37:31
Problema Evaluarea unei expresii Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.37 kb
const cifre:set of char=['0','1','2','3','4','5','6','7','8','9'];
var s:array[1..100000]of char;
    n,p,rez:longint;
    f:text;
function cifra(c:char):byte;
var cifra2:byte;
begin
case c of
  '0':cifra2:=0;
  '1':cifra2:=1;
  '2':cifra2:=2;
  '3':cifra2:=3;
  '4':cifra2:=4;
  '5':cifra2:=5;
  '6':cifra2:=6;
  '7':cifra2:=7;
  '8':cifra2:=8;
  '9':cifra2:=9;
 end;
cifra:=cifra2;
end;

function factor:longint;forward;
function termen:longint;forward;

function eval:longint;
var r:longint;
begin
r:=factor;
while (s[p]='+')or(s[p]='-')do
 if s[p]='+' then
  begin
   inc(p);
   r:=r+factor;
  end
	     else
  begin
   inc(p);
   r:=r-factor;
  end;	
eval:=r;
end;

function factor:longint;
var r:longint;
begin
r:=termen;
while (s[p]='*')or(s[p]='/')do
 if s[p]='*' then
  begin
   inc(p);
   r:=r*termen
  end
	     else
  begin
   inc(p);
   r:=r div termen
  end;
factor:=r
end;

function termen:longint;
var r:longint;
begin
r:=0;
if s[p]='(' then
 begin
  inc(p);
  r:=eval;
  inc(p)
 end
	    else
 begin
  while s[p] in cifre do
   begin r:=r*10+cifra(s[p]);inc(p); end;
 end;
termen:=r
end;

begin
assign(f,'evaluare.in');
reset(f);
n:=0;
while not(eoln(f)) do
 begin
  inc(n);
  read(f,s[n]);
 end;
close(f);
p:=1;
rez:=eval;
assign(f,'evaluare.out');
rewrite(f);
writeln(f,rez);
close(f);
end.