Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal] задача на деревья 
:(
    Опции темы
Mechanic
Дата 28.5.2006, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: нет
Всего: 7



Любая рекурсия давит на стек.
Уменьши количество нодов. И посмотри размер стека, можно чуть растянуть его.
Нажми в редакторе CTRL+O дважды - появится что-то типа
Цитата

{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}

Там попробуй изменить чуть в большую сторону.

Только это из Delphi. Если найду Pascal, то спробую там скомпилить и запустить, только скажи, что за версия Pascal'я у тебя. 
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
Mechanic
Дата 28.5.2006, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: нет
Всего: 7



Нашёл Pascal. Там ошибка была. Ноды создавались бесконечно. smile
Вот рабочий вариант
Код

{Borland TP 7.0 file}
{$A+,B-,D+,E-,F-,G+,I+,L+,N+,O-,P-,Q-,R-,S+,T-,V+,X+,Y+}
{$M 65500,0,655360}

Program Bin_Tree;


Type TTree=^TNode;
     TNode=record
       inf:integer;
       left,right:TTree;
     end;

{Finds maximum Inf value of entire tree}
procedure Search_Max(var T:TTree;var elem:integer);
begin
   if T<>nil
      then
       begin
         if T^.inf>elem
            then elem:=T^.inf;
        Search_Max(T^.right,elem);
        Search_Max(T^.left,elem);
       end;
end;

{Creates Node with Nodes nested childs}
procedure RandomFillTree(var Node: TTree; const Nodes: integer);
var Left, Right: integer;
begin
    {calc parts (Left, Right)}
    if Nodes = 0 then Exit;
    Left := Random(Nodes);
    Right := Nodes - Left-1;
    New(Node);
    Node^.inf := Round(Random(65535));

    {debug output "trace"}
    write('  nodes:',nodes,' Left:',Left,' Right:',Right,' Inf:',Node^.inf);

    Node^.Left := nil; Node^.Right := nil;
    RandomFillTree(Node^.Left, Left);
    RandomFillTree(Node^.Right, Right);
end;

const Total_Nodes = 100;

var T: TTree;
    Max: integer;

begin{main program}
    {Fill tree}
    RandomFillTree(T, Total_Nodes);
    {Search_Max}
    Search_Max(T, Max);
    {Out result}
    writeln;
    writeln('Max = ',Max);
end.
 
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0786 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.