Полная версия этой страницы:
Помогите пожалуйста...
В общем у меня такая задача:
{Сформировать дерево Т и используя рекурсивную подпрограмму,определить число вхождений элемента Е в дерево Т}
А у меня выходит программа, которая определяет, входит ли элемент Е в дерево Т.
Помогите 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
7:06:2007, 05:46
что нибудь вроде такого
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;
А что это за Assigned(p)?
Можно плиз по конкретней?
DIR3ct0r
7:06:2007, 07:10
p <> nil
Блин,ничего не получается! Помогите плиз!
DIR3ct0r
7:06:2007, 09:34
что не получается то, функция рабочая
В каком месте мне применить это?
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
7:06:2007, 11:45
в контексте данной задачи не нужно, так как данная функция используется для исключения повторяющихся элементов....
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.
Огромное спасибо чувак!Ты рулишь!Thanks друг!java script:emoticon(':rolleyes:', 'smid_12')
smilie
Кстати,последний вопрос:Что такое "inc"?Как это называется и что делает?
Последний вопрос:Что такое inc?Как оно называется и что вообще делает?
Цитата(Maxxy @ 7:06:2007, 16:42 )
Последний вопрос:Что такое inc?Как оно называется и что вообще делает?
Inc - Increment, увеличивает значение на 1
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.