Помогите пожалуйста...

  • Автор темы Maxxy
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

Maxxy

#1
В общем у меня такая задача:

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

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

Помогите 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.
 
D

DIR3ct0r

#2
что нибудь вроде такого
Код:
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;
 
M

Maxxy

#3
А что это за Assigned(p)?

Можно плиз по конкретней?
 
M

Maxxy

#7
В каком месте мне применить это?

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
 
D

DIR3ct0r

#8
в контексте данной задачи не нужно, так как данная функция используется для исключения повторяющихся элементов....

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.
 
M

Maxxy

#9
Огромное спасибо чувак!Ты рулишь!Thanks друг!java script:emoticon(':lol:', 'smid_12')
smilie

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

Последний вопрос:Что такое inc?Как оно называется и что вообще делает?
 
P

Pasha

#10
<!--QuoteBegin-Maxxy+7:06:2007, 16:42 -->
<span class="vbquote">(Maxxy @ 7:06:2007, 16:42 )</span><!--QuoteEBegin-->Последний вопрос:Что такое inc?Как оно называется и что вообще делает?
[snapback]68524" rel="nofollow" target="_blank[/snapback]​
[/quote]Inc - Increment, увеличивает значение на 1
 
C

camakob

#11
Здравствуйте !
Мне попалась в лабораторной как раз эта задача, преподаватель вернул с замечанием, что программа не полностью освобождает динамическую память. Подскажите, где и что нужно добавить для освобождения динамической памяти?
 
Статус
Закрыто для дальнейших ответов.