Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите пожалуйста...
Форум программистов > Системное программирование > Delphi и Pascal > Delphi - FAQ
Maxxy
В общем у меня такая задача:

{Сформировать дерево Т и используя рекурсивную подпрограмму,определить число вхождений элемента Е в дерево Т}

А у меня выходит программа, которая определяет, входит ли элемент Е в дерево Т.

Помогите PLEASE переделать правильно задачу




Uses CRT;

Type inform = word;
ss = ^zveno;
zveno = record
inf : inform;
key : integer;
left, right: ss;
end;

Var E,N,I,Rn : Integer;
tr : ss;

Procedure vstavka(var p: ss; k: integer);
Begin
If p = nil then Begin
New(p);
p^.key:=k;
p^.left:=nil;
p^.right:=nil;
End Else Begin
If k < p^.key then vstavka(p^.left, k);
If k > p^.key then vstavka(p^.right, k);
End;
End;

Procedure print(var p: ss; h: integer);
Var i: integer;
Begin
If p <> nil then Begin
Print(p^.right, h + 1);
For i:=1 to h do write(' ');
Writeln(p^.key);
Print(p^.left, h + 1);
End
End;

Function poisk(p: ss; x: integer): boolean;
var b: boolean;
begin
b:=false;
while (p <> nil) and (b = false) do begin
if p^.key = x
then b:=true
else if p^.key < x
then p:=p^.right
else p:=p^.left;
end;
poisk:=b;
end;

Begin
Randomize;
ClrScr;
Write('Введите число потомков N: ');
ReadLn(N);

New(tr);
tr^.key:=Random(100);
tr^.left:=nil;
tr^.right:=nil;

I := 1;
While I <= N Do Begin
Rn := Random(100);
If Not(poisk (tr, Rn)) then Begin
vstavka(tr, Rn);
Inc(I);
End;
End;

print(tr,3);

Write('Введите искомое число E: ');
ReadLn(E);

If poisk (tr, E) Then WriteLn('Такой элемент есть')
Else WriteLn('Такого элемента нет');

ReadLn;
End.
DIR3ct0r
что нибудь вроде такого
function GetCount(p: ss; x: integer): integer;
begin
  Result:= 0;
  if Assigned(p) then
  begin
    if p^.key = x then Inc(Result);
    Result:= Result + GetCount(p^.Left, x);
    Result:= Result + GetCount(p^.Right, x);
  end;
end;
Maxxy
А что это за Assigned(p)?

Можно плиз по конкретней?
DIR3ct0r
p <> nil
Maxxy
Блин,ничего не получается! Помогите плиз!
DIR3ct0r
что не получается то, функция рабочая
Maxxy
В каком месте мне применить это?

function GetCount(p: ss; x: integer): integer;
begin
Result:= 0;
if Assigned(p) then
begin
if p^.key = x then Inc(Result);
Result:= Result + GetCount(p^.Left, x);
Result:= Result + GetCount(p^.Right, x);
end;
end;


И нужно ли вот это тогда?

Function poisk(p: ss; x: integer): boolean;
var b: boolean;
begin
b:=false;
while (p <> nil) and (b = false) do begin
if p^.key = x
then b:=true
else if p^.key < x
then p:=p^.right
else p:=p^.left;
end;
poisk:=b;
end;



Разъясните плииз!java script:emoticon(':(', 'smid_2')
smilie
DIR3ct0r
в контексте данной задачи не нужно, так как данная функция используется для исключения повторяющихся элементов....

Uses CRT;

Type inform = word;
ss = ^zveno;
zveno = record
inf : inform;
key : integer;
left, right: ss;
end;

Var E,N,I,Rn : Integer;
tr : ss;

Procedure vstavka(var p: ss; k: integer);
Begin
If p = nil then Begin
New(p);
p^.key:=k;
p^.left:=nil;
p^.right:=nil;
End Else Begin
If k < p^.key then vstavka(p^.left, k);
If k >= p^.key then vstavka(p^.right, k);
End;
End;

Procedure print(var p: ss; h: integer);
Var i: integer;
Begin
If p <> nil then Begin
Print(p^.right, h + 1);
For i:=1 to h do write(' ');
Writeln(p^.key);
Print(p^.left, h + 1);
End
End;

function GetCount(p: ss; x: integer): integer;
begin
Result:= 0;
if p <> nil then
begin
if p^.key = x then Inc(Result);
Result:= Result + GetCount(p^.Left, x);
Result:= Result + GetCount(p^.Right, x);
end;
end;

Begin
Randomize;
ClrScr;
Write('Введите число потомков N: ');
ReadLn(N);

New(tr);
tr^.key:=Random(100);
tr^.left:=nil;
tr^.right:=nil;

I := 1;
While I <= N Do Begin
Rn := Random(100);
vstavka(tr, Rn);
Inc(I);
End;

print(tr,3);

Write('Введите искомое число E: ');
ReadLn(E);


WriteLn('Кол-во встречающихся: ', GetCount(tr, E));

ReadLn;
End.
Maxxy
Огромное спасибо чувак!Ты рулишь!Thanks друг!java script:emoticon(':rolleyes:', 'smid_12')
smilie

Кстати,последний вопрос:Что такое "inc"?Как это называется и что делает?

Последний вопрос:Что такое inc?Как оно называется и что вообще делает?
Pasha
Цитата(Maxxy @ 7:06:2007, 16:42 )
Последний вопрос:Что такое inc?Как оно называется и что вообще делает?
*
Inc - Increment, увеличивает значение на 1
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.