deedoc » 12 янв 2008, 16:49
необходимо описать рекурсивнуу процедуру или функцию, которая вычисляет значение дерева формулы Т...
пока сделал формирование дерева (key:char), в котором листья - "цифры" (char, но перевести в реальные цифры ьруда не составит), а остальные узлы - "знаки"... также сделал вывод дерева на экран в виде дерева... помогите плс, а нето капздец...
Код: Выделить всё
uses crt;
type ref=^el;
el=record
key:char;
l,r:ref;
end;
var n:integer; root:ref; c,i:char; l,r:ref; key:char;
function tree(n:integer):ref;
var newnode:ref; nl,nr:integer;
begin if n=0 then tree:=nil else begin nl:=n div 2;
nr:=n-nl-1;
if (nl<>0) and (nr<>0) then begin
write('znak:');
readln(c);
end
else begin
write('cifra:');
readln(c);
end;
new(newnode); with newnode^ do begin
key:=c;
l:=tree(nl);
r:=tree(nr);
end; tree:=newnode; end; end;
procedure ptree(t:ref; h:integer);
var i:integer;
begin if t<>nil then with t^ do begin ptree(l,h+1);
for i:=1 to h do write(' ');
writeln(key);
ptree(r,h+1); end;
end;
BEGIN readln(n);
root:=tree(n);
ptree(root,0);
readln
end.
хочу добавить, что я не особо тупой, поэтому буду рад даже словесной подсказке... вот. заранее благодарен всем, кто хоть обратит внимание на эту проблему
необходимо описать рекурсивнуу процедуру или функцию, которая вычисляет значение дерева формулы Т...
пока сделал формирование дерева (key:char), в котором листья - "цифры" (char, но перевести в реальные цифры ьруда не составит), а остальные узлы - "знаки"... также сделал вывод дерева на экран в виде дерева... помогите плс, а нето капздец...
[code]uses crt;
type ref=^el;
el=record
key:char;
l,r:ref;
end;
var n:integer; root:ref; c,i:char; l,r:ref; key:char;
function tree(n:integer):ref;
var newnode:ref; nl,nr:integer;
begin if n=0 then tree:=nil else begin nl:=n div 2;
nr:=n-nl-1;
if (nl<>0) and (nr<>0) then begin
write('znak:');
readln(c);
end
else begin
write('cifra:');
readln(c);
end;
new(newnode); with newnode^ do begin
key:=c;
l:=tree(nl);
r:=tree(nr);
end; tree:=newnode; end; end;
procedure ptree(t:ref; h:integer);
var i:integer;
begin if t<>nil then with t^ do begin ptree(l,h+1);
for i:=1 to h do write(' ');
writeln(key);
ptree(r,h+1); end;
end;
BEGIN readln(n);
root:=tree(n);
ptree(root,0);
readln
end.
[/code]
хочу добавить, что я не особо тупой, поэтому буду рад даже словесной подсказке... вот. заранее благодарен всем, кто хоть обратит внимание на эту проблему