помогите,пожалуйста.
есть такое задание:
во входном файле задана инфиксная форма арифметического выражения , содержащая односимвольные имена (большие латинские буквы) арифметических операндов , символы операций +,-,*,/ без унарных операций. разработать процедуру преобразования инфиксной формы в префиксную, используя деревья.
после многочисленных и продолжительных раздумий удалось наклепать вот это:
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.
,но ,к сожалению, ОНО не работает как надо.
подскажите, пожалуйста, в чем там ошибка и как ее исправить.
заранее благодарна.