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

Тема в разделе "Delphi - FAQ", создана пользователем Maxxy, 6 июн 2007.

Статус темы:
Закрыта.
  1. Maxxy

    Maxxy Гость

    Репутация:
    0
    В общем у меня такая задача:

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

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

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

    DIR3ct0r Гость

    Репутация:
    0
    что нибудь вроде такого
    Код (Text):
    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;
     
  3. Maxxy

    Maxxy Гость

    Репутация:
    0
    А что это за Assigned(p)?

    Можно плиз по конкретней?
     
  4. DIR3ct0r

    DIR3ct0r Гость

    Репутация:
    0
  5. Maxxy

    Maxxy Гость

    Репутация:
    0
    Блин,ничего не получается! Помогите плиз!
     
  6. DIR3ct0r

    DIR3ct0r Гость

    Репутация:
    0
    что не получается то, функция рабочая
     
  7. Maxxy

    Maxxy Гость

    Репутация:
    0
    В каком месте мне применить это?

    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
     
  8. DIR3ct0r

    DIR3ct0r Гость

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

    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.
     
  9. Maxxy

    Maxxy Гость

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

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

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

    Pasha Гость

    Репутация:
    0
    <!--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
     
  11. camakob

    camakob Гость

    Репутация:
    0
    Здравствуйте !
    Мне попалась в лабораторной как раз эта задача, преподаватель вернул с замечанием, что программа не полностью освобождает динамическую память. Подскажите, где и что нужно добавить для освобождения динамической памяти?
     
Загрузка...
Похожие Темы - Помогите пожалуйста
  1. Rina
    Ответов:
    0
    Просмотров:
    131
  2. Sniff
    Ответов:
    1
    Просмотров:
    154
  3. komodikus
    Ответов:
    11
    Просмотров:
    487
  4. limbra
    Ответов:
    3
    Просмотров:
    286
  5. uxbmw3w
    Ответов:
    0
    Просмотров:
    477
Статус темы:
Закрыта.

Поделиться этой страницей