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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2010, 00:04   #1
patisson74
Пользователь
 
Регистрация: 11.11.2009
Сообщений: 17
По умолчанию Двоичные деревья (паскаль).

Сформировать дерево Е и определить число вхождений параметра Е в дерево Т.
Вот то, до чего я дошел.... Но что-то судя по всему не так... Программа не работает.....
Код:
program E_in_Tree;
uses crt;
type TTree=^Elem;      {Определяем тип дерева}
     Elem=record      {Определяем тип элементов дерева}
     Value:integer;
     Left:TTree;
     Rigth:TTree;
end;
var BegTree:TTree;   {Вершина дерева}
{Функция формирует новый элемент дерева}
function NewTree:TTree;
var Tree:TTree;
c:char;
{Заполняем значения элементов дерева}
begin
New(Tree);
writeln('Введите элемент дерева'); readln(Tree^.Value);
Tree^.Left:=Nil;
Tree^.Right:=Nil;
NewTree:=Tree;
{Заполняем ветви}
writeln('У элемента ',Tree^.Value,'есть левая ветвь? Y/N: '); readln(c);
if c='Y' then Tree^.Left:=NewTree;
writeln('У элемента ',Tree^.Value,'есть правая ветвь? Y/N: '); readln(c);
if c='Y' then Tree^.Right:=NewTree;
end;
 
function Kol_E(Tree:TTree):byte;
var Kol1,KolL,kolR:integer;
begin
if Tree.Value=E then Kol1:=1
else Kol1:=0;
if (Tree^.Left=Nil) then
KolL=Kol_E(Tree^.Left)
else KolL:=0;
if (Tree^.Rightt=Nil) then
KolR=Kol_E(Tree^.Right)
else KolL:=0;
Kol_E:=Kol1+KolL+KolR;
 
{Основная программа}
begin
writeln('Заполните дерево');
writeln('Количество параметра Е = ', Kol_E);
 
readln;
end.:(
Мученик - заочник
patisson74 вне форума Ответить с цитированием
Старый 07.04.2010, 07:22   #2
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

Конечно она у вас не работае, если у вас полно там опечаток
Цитата:
program E_in_Tree;
uses crt;
type TTree=^Elem; {Определяем тип дерева}
Elem=record {Определяем тип элементов дерева}
Value:integer;
Left:TTree;
Rigth:TTree;
end;
var BegTree:TTree; {Вершина дерева}
{Функция формирует новый элемент дерева}
function NewTree:TTree;
var Tree:TTree;
c:char;
{Заполняем значения элементов дерева}
begin
New(Tree);
writeln('Введите элемент дерева'); readln(Tree^.Value);
Tree^.Left:=Nil;
Tree^.Right:=Nil;
NewTree:=Tree;
{Заполняем ветви}
writeln('У элемента ',Tree^.Value,'есть левая ветвь? Y/N: '); readln(c);
if c='Y' then Tree^.Left:=NewTree;
writeln('У элемента ',Tree^.Value,'есть правая ветвь? Y/N: '); readln(c);
if c='Y' then Tree^.Right:=NewTree;
end;

function Kol_E(Tree:TTree):byte;
var Kol1,KolL,kolR:integer;
begin
if Tree.Value=E then Kol1:=1
else Kol1:=0;
if (Tree^.Left=Nil) then
KolL=Kol_E(Tree^.Left)
else KolL:=0;
if (Tree^.Rightt=Nil) then
KolR=Kol_E(Tree^.Right)
else KolL:=0;
Kol_E:=Kol1+KolL+KolR;

{Основная программа}
begin
writeln('Заполните дерево');
writeln('Количество параметра Е = ', Kol_E);

readln;
end.
и т.д.

Вот рабочий код. Когда-то писал.
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

TYPE BT=Real;
     U = ^BinTree;
     BinTree = Record
         Inf : BT;
         L,R : U;
END;

PROCEDURE Ins(Var T : U; X : BT);
Var vsp, A : U;
Begin
    New(A); A^.Inf := X; A^.L:=Nil; A^.R := Nil;
    If T=Nil Then T:=A
                Else Begin vsp := T;
                          While vsp <> Nil Do
                           If A^.Inf < vsp^.Inf
                           Then
	                            If vsp^.L=Nil Then Begin vsp^.L:=A; vsp:=A^.L End Else vsp:=vsp^.L
                           Else
	              If vsp^.R = Nil Then Begin vsp^.R := A; vsp:=A^.R End Else vsp := vsp^.R;
                       End
END;


PROCEDURE PrintTree(T:U);
Begin
 if T<>nil then
             begin
              PrintTree(T^.L);
              Writeln('  ', T^.inf:5:3);
              PrintTree(T^.R);
             end;
END;

PROCEDURE Vh_E(T:U; E:BT; var i:integer);
Begin
 if T<>nil then
             begin
              Vh_E(T^.L,E,i);
              if T^.inf=E then inc(i);
              Vh_E(T^.R,E,i);
             end;
END;


PROCEDURE InsDer(var T:U);
var i,n:integer;
    x:BT;
Begin
  Randomize;
  Write('kol-vo el-tov v dereve: ');
  readln(n);
  for i:=1 to n do
  begin
     write('elem.: '); readln(x);
    {x:=-10+Random(21); write(x:5:3,'   '); }
    Ins(T,x);
  end;
END;

var Der:U;
    E:BT;
    i:integer;

BEGIN
  { TODO -oUser -cConsole Main : Insert code here }
  InsDer(Der);
  writeln;
  PrintTree(Der);
  write('E= '); readln(E);
  i:=0;
  Vh_E(Der,E,i); writeln;
  writeln('Kol-vo el-tov E v dereve: ',i);
  readln;
END.
Жми на весы!!!

Последний раз редактировалось Chudo4258; 07.04.2010 в 07:28.
Chudo4258 вне форума Ответить с цитированием
Старый 16.11.2010, 23:46   #3
N1b1V
 
Регистрация: 06.11.2010
Сообщений: 3
По умолчанию Количество узлов в дереве

Доброе время суток!
Помогите пожалуйста с процедурой- подсчет количества узлов в дереве с одного до другого уровня.
N1b1V вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двоичные деревья Raz0r Помощь студентам 7 11.12.2011 10:32
Двоичные деревья в Паскале Paulo Помощь студентам 0 25.06.2009 23:31
Двоичные деревья. 3 задачки. Срочно rustam29 Фриланс 9 13.06.2009 18:02
Динамические структуры данных. Стеки. Очереди. Двоичные деревья. Paulo Помощь студентам 0 30.04.2009 06:12