Страница 1 из 1

построение дерева

Добавлено: 20 май 2007, 01:21
cipa
помогите,пожалуйста.

есть такое задание:
во входном файле задана инфиксная форма арифметического выражения , содержащая односимвольные имена (большие латинские буквы) арифметических операндов , символы операций +,-,*,/ без унарных операций. разработать процедуру преобразования инфиксной формы в префиксную, используя деревья.


после многочисленных и продолжительных раздумий удалось наклепать вот это:

program my10;
type
next=^elem;
elem=record
e1:char;
sled:next
end;

tree=^uzel;
uzel=record
elem:char;
rt,lt:tree
end;



var
uk,uks:next;
f:text;
q,p:tree;



Procedure putree(var p,q:tree;var tek:next);

begin
if tek<>nil then begin
if q<>nil then
begin
new(p);
p^.lt:=q;
end
else
begin
new (q);
q^.elem:=tek^.e1;
new(p);
p^.lt:=q;
end;
tek:=tek^.sled;
if tek=nil then exit;

new (q);
q^.elem:=tek^.e1;
p:= q;

tek:=tek^.sled;

if tek=nil then exit;

new(q);

q^.elem:=tek^.e1;
p^.rt:=q;

new(q);
q:=p;
tek:=tek^.sled;
putree(p,q,tek);
end;
end;


Procedure getree(var ukt1:tree);
begin
if ukt1<>nil then
begin
getree(ukt1^.rt);
write(ukt1^.elem);
getree(ukt1^.lt);

end;
end;

BEGIN
assign(f,'dan10.inp');
reset(f);
assign(output,'res10.out');
rewrite(output);


new(uk);
uks:=uk;
read(f,uk^.e1);
uk^.sled:=nil;

while not eoln(f) do
begin

new(uk^.sled);
uk:=uk^.sled;
read (f,uk^.e1);
uk^.sled:=nil;

end;

uk:=uks;

new(q);
q:=nil;
new(p);



putree(p,q,uk);
getree(q);

close(f);
close(output);
END.



,но ,к сожалению, ОНО не работает как надо.
подскажите, пожалуйста, в чем там ошибка и как ее исправить.

заранее благодарна.