Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2012, 14:34   #1
Jetbalance
Пользователь
 
Регистрация: 28.06.2012
Сообщений: 10
По умолчанию Программа на бинарные деревья

Здравствуйте. Не знаю, сможет ли кто-нибудь помочь с задачей...
Пожалуйста, если не сложно и есть время, набросайте код... (Вопрос жизни и смерти!)

Сама задача: Проверить монотонность убывания ширины уровня дерева.

Нужно написать на Паскале и Си. Из набросков у меня есть Паскаль. Но выкладывать моё "творчество" вряд ли стоит...

Последний раз редактировалось Jetbalance; 28.06.2012 в 15:01.
Jetbalance вне форума Ответить с цитированием
Старый 28.06.2012, 16:06   #2
Рико
Пользователь
 
Регистрация: 30.04.2012
Сообщений: 31
По умолчанию

помочь могу, не на халяву разумеется
ася- 391166346
почта- riko07@mail.ru
skype- riko0760
Рико вне форума Ответить с цитированием
Старый 28.06.2012, 16:21   #3
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от Jetbalance Посмотреть сообщение
Из набросков у меня есть Паскаль. Но выкладывать моё "творчество" вряд ли стоит...
быть может и наши наброски не следует...

кинь.. посмотрим... авось что то и получится... если лень... видимо смерть будет... иначе лишь за материальное вознаграждение ...
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 28.06.2012, 16:33   #4
Jetbalance
Пользователь
 
Регистрация: 28.06.2012
Сообщений: 10
По умолчанию

В общем, как-то мне удалось найти программу (см. ниже) на паскале, которая решает много лишнего. Собственно, что я смог сделать: дописать пару строчек.

PHP код:
program B_Tree;
type PTree = ^ TTree; {Tipukazatel na element dereva}
     
TTree record elinteger; {tip el-ta dereva}
                    
leftrightPTree; {ukazateli na lev i prav.sina}
             
end;

     { 
type el-tov steka informacija eto ukazatel na el-t derevapred uk-l na predidushel-}
     
PStek= ^TStek;
     
TStekrecord Inf:  PTree;
                   
predPStek;
             
end;


var  
Tree {ukazna koren dereva}, pprPTree;
     
elTreeinteger;

     
i,jinteger;
     
cchar;

 {===================
Stack ================================================}
 
procedure InitStek(var topPStek); { èíèöèàëèçàöèÿ ñòåêà }
 
begin top := nil;
 
end;

 {
proverka Steka na pustotytrue esli pusto }
 function 
PustStek(topPStek): boolean;
 
begin PustStek := top nil;
 
end;

 
procedure InStek(elPtree;  var topPStek ); { äîáàâëåíèå â ñòåê ýë-òà ñî çíà÷åíèåì el }
 
var pPStek ;
 
begin new(p); { âûäåëèëè ïàìÿòü ïîä íîâûé ýëåìåíò }
       
p^.inf := el;
       
p^.pred := top; { óêàçàòåëü íà ïðåäûäóùèé ýëåìåíò áåðåì èç óêàçàòåëÿ íà ïîñë ýëåìåíò ñòåêà }
       
top := p; { òåïåðü íîâûé ýëåìåíò ñòàë ïîñë. ýëåìåíòîì ñòåêà, íà íåãî è áóäåò óêàçûâàòü top}
  
end;

  
procedure OutStek(var elPTree;  var topPStek); {óáèðàåì èç íåïóñòîãî ñòåêà ïîñë ýëåìåíò}
  
var pPStek;
  
begin el := top^.inf; { çàïîìíèëè çíà÷åíèå ýë-òà }
        
p  := top;     { çàïîìíèëè ññûëêó íà ýë-ò}
        
top := top^.pred; {òåïåðü óæå ññûëàåìñÿ íà ïðåäïîñëåäíèé ýë-ò ñòåêà}
        
dispose(p);   {îñâîáîæäàåì ïàìÿòü, áûâøóþ ïîä óäàëÿåìûì ýë-òîì }
  
end ;


{===============
Be-derevo ===========================================}
 {
inicialisacija dereva }
 
procedure InitTree(var tree:PTree);
 
begin
   tree 
:= nil;
 
end;

 {
proverka dereva na pustotytrue esli pusto }
 function 
PustTree(tree:PTree): boolean;
 
begin PustTree := tree nil;
 
end;

 {-------------------------------------------------------------------}
 {
dobavlenie v derevo }
 
procedure AddInTree(elinteger; var tree:PTree);
 var 
pprtPTree;
 
begin new(t); t^.el := el; {sozdaem novii el-t dereva}
       
t^.left := nilt^.right := nil; {nov.el-t bydet listom dereva}
       
p:= treepr:=nil;
       {
ishem mesto privjazki }
       while 
p<>nil do
       
begin pr := p; {"predidushii" ukazatel}

             if 
p^.el el then p:=P^.left
             
else p:=p^.right;
       
end;
       if 
tree nil then tree := {pervii uzel dereva}
       else if 
pr^.el>el then pr^.left := t
            
else pr^.right := t;

 
end;
 {--------------------------------------------------------------------}
 { 
Prjamoi obxod (pechatdereva uzellevoe podderevopravoe podderevo rekursuja }
 
procedure PrintTree(treePTree);
 
begin write(tree^.el' ');
       if 
tree^.left<>nil then PrintTree(tree^.left);
       if 
tree^.right<>nil then PrintTree(tree^.right);
 
end;
 {------------------------------------------------------------------------}
 {
Udalenie dereva}
 
procedure ClearTree(var p:Ptree);
 
begin if p^.left <> nil then ClearTree(p^.left);
       if 
p^.right <>nil then ClearTree(p^.right);
       
dispose(p); p:=nil;
 
end;

 { 
obxod dereva po urovnjam s pechatju kol-va el-tov na kazdom urovne }
 
procedure ObxodPoUrovn(tree:Ptree);
 var 
elStekPTree;
     
top1top2PStek; { ukazna verchini vspomogstackov }
     
UrovenKolkinteger;
 
begin

     InitStek
(top1); InitStek(top2);

     
InStek(treetop1); {&#226;çÿòü êîðåíü, ïîëîæèòü â ñòåê1. }

     
Uroven := 0k:=0;

     
repeat {&#239;îâòîðèòü }

       
{ &#243;âåëè÷èòü óðîâåíü íà 1, îáíóëèòü êîë-âî ýë-òîâ íà ïåðåõîäå ê ñëåäóþùåìó óðîâíþ.}
       
Kol := 0;
       
Uroven := Uroven +1;

       
writeln('Elementi 'Uroven,' yrovnja:');


       while 
not PustStek(top1) do {&#239;îêà ñòåê1 íå ïóñò}
{ &#226;ûíóòü î÷åðåäíîé ýëåìåíò, óâåëè÷èòü êîë-âî íà î÷åðåäíîì óðîâíå, ïîëîæèòü åãî âî 2 ñòåê}
       
begin OutStek(elStektop1);
             
kol := kol 1;
             
write(elStek^.el,' ');
             
InStek(elStektop2);
       
end;
       
writeln;
       
writeln('Kol-vo elementov 'Uroven,' yrovnja:'kol); 

Последний раз редактировалось Jetbalance; 28.06.2012 в 16:36.
Jetbalance вне форума Ответить с цитированием
Старый 28.06.2012, 16:34   #5
Jetbalance
Пользователь
 
Регистрация: 28.06.2012
Сообщений: 10
По умолчанию

PHP код:
       if (kol>kthen k:=kol else   begin
                                     writeln 
('Монотонность нарушена');
                                     break;
                                     
end;

       while 
not PustStek(top2) do {&#239;îêà ñòåê2 íå ïóñò}
{ &#226;ûíóòü èç íåãî î÷åðåäíîé ýëåìåíò, ïîëîæèòü â ñòåê1 ïðàâîãî è ëåâîãî ñûíà ýòîãî ýë-òà.}
       
begin OutStek(elStektop2);

             if 
elStek^.right<>nil then
                    InStek
(elStek^.righttop1);

             if 
elStek^.left<>nil then
                    InStek
(elStek^.left,  top1);
       
end;

     
until PustStek(top1); {&#239;îêà ñòåê1 íå áóäåò ïóñò }
 
end;




 {===================
Osn programma ========================================}
begin
  InitTree
(tree);

  
writeln('Sozdanie dereva: ');
  
repeat
    write
('element dereva = ');
    
readln(elTree);
    
AddInTree(elTreetree);
    
write('Prodolzhit vvod (Y/N)?'); readln(c);
  
until ('N') or ('n');

  if 
not PustTree(treethen
  begin writeln
('Obxod dereva (prjamoi):');
        
PrintTree(tree);

        
writeln;
        
write('Nazmite ENTER...'); readln;

        
writeln('Podshet uzlov po urovnjam: ');
        
ObxodPoUrovn(tree);

        
ClearTree(tree);
  
end;
  
write('Nazmite ENTER...'); readln;
end

В программу я добавил:
PHP код:
if (kol>kthen k:=kol else   begin
                                     writeln 
('Монотонность нарушена');
                                     break;
                                     
end
В итоге, нагруженная лишним программа, решающая много лишнего. Сдаётся мне, есть способы полегче... Но что конкретно из неё удалять, я не могу понять, т.к. можно и лишнего снести...)

Если есть идеи по этому поводу, буду рад выслушать...
P.S.Извиняюсь, за некоторые комментарии в программе.
Jetbalance вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарные деревья в C# farshmaker C# (си шарп) 0 29.02.2012 22:30
бинарные деревья studentOne Помощь студентам 2 10.10.2009 16:45
Бинарные деревья Aleks_90 Помощь студентам 0 07.06.2009 15:06
Бинарные деревья Марсель059 Общие вопросы C/C++ 3 20.05.2009 21:47