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

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

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

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

    DIR3ct0r Гость

    что нибудь вроде такого
    Код (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 Гость

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

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

    DIR3ct0r Гость

  5. Maxxy

    Maxxy Гость

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

    DIR3ct0r Гость

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

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

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

    Maxxy Гость

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

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

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

    Pasha Гость

    <!--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 Гость

    Здравствуйте !
    Мне попалась в лабораторной как раз эта задача, преподаватель вернул с замечанием, что программа не полностью освобождает динамическую память. Подскажите, где и что нужно добавить для освобождения динамической памяти?
     
Загрузка...
Похожие Темы - Помогите пожалуйста
  1. limbra
    Ответов:
    3
    Просмотров:
    46
  2. uxbmw3w
    Ответов:
    0
    Просмотров:
    66
  3. GREED
    Ответов:
    1
    Просмотров:
    536
  4. Рая
    Ответов:
    3
    Просмотров:
    789
  5. sonia2000
    Ответов:
    0
    Просмотров:
    960
Статус темы:
Закрыта.

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