деревья.... помогите, а то вылечу((( (pascal)

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
deedoc
Сообщения: 5
Зарегистрирован: 12 янв 2008, 16:33

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.
хочу добавить, что я не особо тупой, поэтому буду рад даже словесной подсказке... вот. заранее благодарен всем, кто хоть обратит внимание на эту проблему
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

13 янв 2008, 21:37

если в узле знак, а в двух его листьях - цифры - сворачиваешь все это поддерево в один лист. Типа так:
if node='+' then node=leaf1+leaf2
else if node='-' then node=leaf1-leaf2 и т.д
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
deedoc
Сообщения: 5
Зарегистрирован: 12 янв 2008, 16:33

13 янв 2008, 21:46

хорошая идея))
Ответить