Pagini recente » Cod sursa (job #3199344) | Cod sursa (job #3211530) | Cod sursa (job #3183429) | Cod sursa (job #3174487) | Cod sursa (job #377254)
Cod sursa(job #377254)
type fa=^elem;
elem=record
x:string;
bal,jobb:fa;
end;
adat=record
o:string;
p:longint;
end;
var v:array[1..100000] of adat;
ve:array[1..100000] of longint;
f:text;
s:string;
a:char;
k,p,db:longint;
gyoker:fa;
procedure betesz(var ho:longint;mit:string;prior:longint);
begin
inc(ho);
v[ho].o:=mit;
v[ho].p:=prior;
end;
procedure kiir(ho:longint);
var p:longint;
begin
for p:=1 to ho do write(v[p].o,' ');
writeln;
for p:=1 to ho do write(v[p].p,' ');
end;
procedure keres(var old:fa;el,ve:longint);
var min,i,h:longint;
begin
min:=maxlongint;
for i:=el to ve do
if v[i].p<min then
begin
min:=v[i].p;
h:=i;
end;
new(old);
old^.x:=v[h].o;
old^.bal:=nil;
old^.jobb:=nil;
if el<>ve then begin
keres(old^.bal,el,h-1);
keres(old^.jobb,h+1,ve);
end;
end;
procedure kiertekel(gy:fa);
var kod:integer;
begin
if gy<>nil then begin
kiertekel(gy^.bal);
kiertekel(gy^.jobb);
if gy^.x='+' then begin ve[k-1]:=ve[k-1]+ve[k]; dec(k); end else
if gy^.x='-' then begin ve[k-1]:=ve[k-1]-ve[k]; dec(k); end else
if gy^.x='*' then begin ve[k-1]:=ve[k-1]*ve[k]; dec(k); end else
if gy^.x='/' then begin ve[k-1]:=ve[k-1] div ve[k]; dec(k); end else
begin
inc(k);
val(gy^.x,ve[k],kod);
end;
end;
end;
procedure kiirfapos(gy:fa);
begin
if gy<>nil then begin
kiirfapos(gy^.bal);
kiirfapos(gy^.jobb);
write(gy^.x,' ');
end;
end;
begin
assign(f,'evaluare.in');
reset(f);
k:=0;
s:='';
p:=0;
db:=0;
read(f,a);
while not eoln(f) do begin
if a='(' then begin
inc(p,10);
read(f,a);
end;
if a=')' then begin
dec(p,10);
read(f,a);
end;
if a in ['0'..'9'] then begin
s:=a;
read(f,a);
while a in ['0'..'9'] do begin
s:=s+a;
read(f,a);
end;
betesz(db,s,p+15);
s:='';
end;
if a in ['+','-'] then begin
betesz(db,a,p+3);
read(f,a);
end;
if a in ['*','/'] then begin
betesz(db,a,p+5);
read(f,a);
end;
end;
close(f);
gyoker:=nil;
keres(gyoker,1,db);
writeln;
writeln;
kiir(db);
writeln;
writeln;
kiirfapos(gyoker);
kiertekel(gyoker);
writeln;
writeln;
writeln(ve[1]);
kiertekel(gyoker);
assign(f,'evaluare.out');
rewrite(f);
writeln(f,ve[1]);
close(f);
end.