Pagini recente » Cod sursa (job #3219881) | Cod sursa (job #1975157) | Cod sursa (job #733923) | Cod sursa (job #1827579) | Cod sursa (job #227118)
Cod sursa(job #227118)
type lg=-1000000000..1000000000;
pnod=^nod;
nod=record
x:lg;
s,d:pnod;
end;
var f:text;
a:array[1..100000]of char;
b:array[1..100000]of lg;
i,la,lb,pr,n:lg;
p:pnod;
function eval(x:pnod):lg;
begin
if (x^.s<>nil) then
begin
case (x^.x mod 5) of
1: eval:=eval(x^.s)+eval(x^.d);
2: eval:=eval(x^.s)-eval(x^.d);
3: eval:=eval(x^.s)*eval(x^.d);
4: eval:=eval(x^.s)div eval(x^.d);
end;
end
else
eval:=x^.x;
end;
function carb(x1,x2:integer):pnod;
var min,p:lg;
x:pnod;
begin
if x1<>x2 then
begin
p:=x1+1;
min:=b[p];
for i:=x1 to x2 do
if (i mod 2=0)and(b[i]<min)then
begin
p:=i;
min:=b[p];
end;
new(x);
x^.x:=b[p];
x^.s:=carb(x1,p-1);
x^.d:=carb(p+1,x2);
end
else
begin
new(x);
x^.x:=b[x1];
x^.d:=nil;
x^.s:=nil;
end;
carb:=x;
end;
begin
assign(f,'evaluare.in');
reset(f);
la:=0;
while not eoln(f) do
begin
inc(la);
read(f,a[la]);
end;
n:=0;
lb:=0;
for i:=1 to la do
begin
if a[i]='(' then
pr:=pr+5;
if a[i]=')' then
pr:=pr-5;
if a[i]='+' then
begin
inc(lb);
b[lb]:=pr+1;
end;
if a[i]='-' then
begin
inc(lb);
b[lb]:=pr+2;
end;
if a[i]='*' then
begin
inc(lb);
b[lb]:=pr+3;
end;
if a[i]='/' then
begin
inc(lb);
b[lb]:=pr+4;
end;
if a[i] in['0'..'9'] then
begin
n:=n*10+ord(a[i])-48;
if not(a[i+1] in ['0'..'9']) then
begin
inc(lb);
b[lb]:=n;
n:=0;
end;
end;
end;
p:=carb(1,lb);
close(f);
assign(f,'evaluare.out');
rewrite(f);
write(f,eval(p));
close(f);
end.