Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > Delphi
Перезагрузить страницу Построение дерева как реализовать
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
s-t-r-i-k-e-r s-t-r-i-k-e-r вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2008
По умолчанию Построение дерева как реализовать - 22.10.2008, 00:10

Здравствуйте.
Есть программа, которая строит дерево арифметич. выражения. Но в ней есть недочет: не учитывает скобок, точнее вообще их не понимает
Нужно, чтобы она учитывала приоритет операций исходя из скобок
Была идея переделать все так, чтобы выражение перестраивать в польскую запись, а потом по ней строить дерево
Но посоветовали делать рекурсией. В общем нужна помощь в доработке
Код:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

const
  max=3;
  parameters=['a','b','c','d','e','f','g'];
  signs=['+','-','*','/'];

type
   TreePtr = ^TreeNode;
   TreeNode = record
    info: char;
    left, right: TreePtr;
  end;

  TOutForm = class(TForm)
    StartExp: TEdit;
    Label1: TLabel;
    go: TButton;
    TreeOut: TTreeView;
    Label2: TLabel;
    Label3: TLabel;
    procedure goClick(Sender: TObject);
  private
    root: TreePtr;


    function Prioritet (sign: char): integer;
    function BuildTree (str: string): TreePtr;
    function ExpressionIsRight (str: string): boolean;
    procedure ShowTree;
    procedure ShowTreeNode (node: TreePtr; visnode: TTreeNode);
  end;
var
  OutForm: TOutForm;

implementation

{$R *.dfm}


function TOutForm.Prioritet (sign: char): integer;
begin
  case sign of
    '+','-': Prioritet:=0;
    '*','/': Prioritet:=1;
  end;
end;


function TOutForm.BuildTree (str: string): TreePtr;
var
  tmp: TreePtr;
  i: integer;
  priormin, imin: integer;
  leftstr, rightstr: string;
begin

  if length(str)=1 then begin
    New(tmp);
    tmp^.info:=str[1];
    tmp^.left:=nil;
    tmp^.right:=nil;
    Result:=tmp;
  end

  else begin

    i:=length(str);
    priormin:=max;
    imin:=i;
    while i>=1 do begin

      if ((str[i] in signs)and(Prioritet(str[i])<priormin)) then begin
        priormin:=Prioritet(str[i]);
        imin:=i;
      end;
      i:=i-1;
    end;

    New(tmp);
    tmp^.info:=str[imin];
    leftstr:=Copy(str,1,imin-1);
    rightstr:=Copy(str,imin+1,length(str)-imin);
    tmp^.left:=BuildTree(leftstr);
    tmp^.right:=BuildTree(rightstr);
    Result:=tmp;
  end;
end;


function TOutForm.ExpressionIsRight(str: string): boolean;
var
  i: integer;
begin
  Result:=true;
  for i:=2 to length(str) do
       if ((str[i] in signs)and(str[i-1] in signs))or
       ((str[i] in parameters)and(str[i-1] in parameters)) then
         Result:=FALSE;
end;


procedure TOutForm.goClick(Sender: TObject);
begin
  if StartExp.Text='' then begin
    MessageDlg('Выражение неправильно составлено!', mtError, [mbOK], 0);
    exit;
  end;
  if not ExpressionIsRight(StartExp.Text) then begin
    MessageDlg('Выражение неправильно составлено!', mtError, [mbOK], 0);
    exit;
  end;
  root := BuildTree(StartExp.Text);
  ShowTree;
end;



procedure TOutForm.ShowTree;
begin
  TreeOut.Items.Clear;
   ShowTreeNode (root, nil);
end;

procedure TOutForm.ShowTreeNode(node: TreePtr; visnode: TTreeNode);
begin
  if (node<>nil) then begin
    visnode := TreeOut.Items.AddChild(visnode, node^.info);
    ShowTreeNode(node^.left, visnode);
    ShowTreeNode(node^.right, visnode);
  end;
end;

end.
Ответить с цитированием
  (#2 (permalink)) Старый
s-t-r-i-k-e-r s-t-r-i-k-e-r вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2008
По умолчанию Построение дерева как реализовать - 22.10.2008, 00:10

Здравствуйте.
Есть программа, которая строит дерево арифметич. выражения. Но в ней есть недочет: не учитывает скобок, точнее вообще их не понимает
Нужно, чтобы она учитывала приоритет операций исходя из скобок
Была идея переделать все так, чтобы выражение перестраивать в польскую запись, а потом по ней строить дерево
Но посоветовали делать рекурсией. В общем нужна помощь в доработке
Код:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

const
  max=3;
  parameters=['a','b','c','d','e','f','g'];
  signs=['+','-','*','/'];

type
   TreePtr = ^TreeNode;
   TreeNode = record
    info: char;
    left, right: TreePtr;
  end;

  TOutForm = class(TForm)
    StartExp: TEdit;
    Label1: TLabel;
    go: TButton;
    TreeOut: TTreeView;
    Label2: TLabel;
    Label3: TLabel;
    procedure goClick(Sender: TObject);
  private
    root: TreePtr;


    function Prioritet (sign: char): integer;
    function BuildTree (str: string): TreePtr;
    function ExpressionIsRight (str: string): boolean;
    procedure ShowTree;
    procedure ShowTreeNode (node: TreePtr; visnode: TTreeNode);
  end;
var
  OutForm: TOutForm;

implementation

{$R *.dfm}


function TOutForm.Prioritet (sign: char): integer;
begin
  case sign of
    '+','-': Prioritet:=0;
    '*','/': Prioritet:=1;
  end;
end;


function TOutForm.BuildTree (str: string): TreePtr;
var
  tmp: TreePtr;
  i: integer;
  priormin, imin: integer;
  leftstr, rightstr: string;
begin

  if length(str)=1 then begin
    New(tmp);
    tmp^.info:=str[1];
    tmp^.left:=nil;
    tmp^.right:=nil;
    Result:=tmp;
  end

  else begin

    i:=length(str);
    priormin:=max;
    imin:=i;
    while i>=1 do begin

      if ((str[i] in signs)and(Prioritet(str[i])<priormin)) then begin
        priormin:=Prioritet(str[i]);
        imin:=i;
      end;
      i:=i-1;
    end;

    New(tmp);
    tmp^.info:=str[imin];
    leftstr:=Copy(str,1,imin-1);
    rightstr:=Copy(str,imin+1,length(str)-imin);
    tmp^.left:=BuildTree(leftstr);
    tmp^.right:=BuildTree(rightstr);
    Result:=tmp;
  end;
end;


function TOutForm.ExpressionIsRight(str: string): boolean;
var
  i: integer;
begin
  Result:=true;
  for i:=2 to length(str) do
       if ((str[i] in signs)and(str[i-1] in signs))or
       ((str[i] in parameters)and(str[i-1] in parameters)) then
         Result:=FALSE;
end;


procedure TOutForm.goClick(Sender: TObject);
begin
  if StartExp.Text='' then begin
    MessageDlg('Выражение неправильно составлено!', mtError, [mbOK], 0);
    exit;
  end;
  if not ExpressionIsRight(StartExp.Text) then begin
    MessageDlg('Выражение неправильно составлено!', mtError, [mbOK], 0);
    exit;
  end;
  root := BuildTree(StartExp.Text);
  ShowTree;
end;



procedure TOutForm.ShowTree;
begin
  TreeOut.Items.Clear;
   ShowTreeNode (root, nil);
end;

procedure TOutForm.ShowTreeNode(node: TreePtr; visnode: TTreeNode);
begin
  if (node<>nil) then begin
    visnode := TreeOut.Items.AddChild(visnode, node^.info);
    ShowTreeNode(node^.left, visnode);
    ShowTreeNode(node^.right, visnode);
  end;
end;

end.
Ответить с цитированием
  (#3 (permalink)) Старый
s-t-r-i-k-e-r s-t-r-i-k-e-r вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2008
По умолчанию 23.10.2008, 23:00

Неужели нет никаких идей??
Ответить с цитированием
  (#4 (permalink)) Старый
s-t-r-i-k-e-r s-t-r-i-k-e-r вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2008
По умолчанию 23.10.2008, 23:00

Неужели нет никаких идей??
Ответить с цитированием
  (#5 (permalink)) Старый
Alexiski Alexiski на форуме
Любитель давать советы
 
Сообщений: 4,252
Сказал(а) спасибо: 26
Поблагодарили 51 раз(а) в 51 сообщениях
Регистрация: 16.10.2005
По умолчанию 24.10.2008, 03:02

Так нужны идеи? Так надо было так и написать. А то писать в такую здоровую программу лень..

Идея реализуется в два этапа:

1) Во время поиска знака операции с максимальным приоритетом выкидываем все знаки между скобками.
Для этого заводим счетчик скобок, на каждой правой скобке увеличиваем на 1 (ведь идем справа налево), на каждой левой - уменьшаем на 1. Пока счетчик больше нуля, пропускаем все знаки. Если вдруг счетчик стал меньше нуля - ошибка, несбалансированные скобки.

2) Еще нужно поставить проверку на то, что знака операции не найдено. Тогда если первый и последний символ строки - скобки, просто отбрасываем эти скобки и повторяем поиск. Иначе то, что у нас получилось - конечный операнд, должно размещаться как лист дерева (а вовсе не по длине 1, как сейчас сделано)

Ну, еще можно проверку сбалансированности скобок вынести в проверку выражения.

Зачем только нужно было повыкидывать все комментарии - непонятно..
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Alexiski Alexiski на форуме
Любитель давать советы
 
Сообщений: 4,252
Сказал(а) спасибо: 26
Поблагодарили 51 раз(а) в 51 сообщениях
Регистрация: 16.10.2005
По умолчанию 24.10.2008, 03:02

Так нужны идеи? Так надо было так и написать. А то писать в такую здоровую программу лень..

Идея реализуется в два этапа:

1) Во время поиска знака операции с максимальным приоритетом выкидываем все знаки между скобками.
Для этого заводим счетчик скобок, на каждой правой скобке увеличиваем на 1 (ведь идем справа налево), на каждой левой - уменьшаем на 1. Пока счетчик больше нуля, пропускаем все знаки. Если вдруг счетчик стал меньше нуля - ошибка, несбалансированные скобки.

2) Еще нужно поставить проверку на то, что знака операции не найдено. Тогда если первый и последний символ строки - скобки, просто отбрасываем эти скобки и повторяем поиск. Иначе то, что у нас получилось - конечный операнд, должно размещаться как лист дерева (а вовсе не по длине 1, как сейчас сделано)

Ну, еще можно проверку сбалансированности скобок вынести в проверку выражения.

Зачем только нужно было повыкидывать все комментарии - непонятно..
Ответить с цитированием
  (#7 (permalink)) Старый
s-t-r-i-k-e-r s-t-r-i-k-e-r вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2008
По умолчанию 25.10.2008, 14:21

Программа то сама маленькая, там проверки всякие, да вывод...
Ключевая процедура вот, нужно её усовершенствовать
Код:
function TOutForm.BuildTree (str: string): TreePtr;
var
  tmp: TreePtr;
  i: integer;
  priormin, imin: integer;
  leftstr, rightstr: string;
begin

  if length(str)=1 then begin
    New(tmp);
    tmp^.info:=str[1];
    tmp^.left:=nil;
    tmp^.right:=nil;
    Result:=tmp;
  end

  else begin

    i:=length(str);
    priormin:=max;
    imin:=i;
    while i>=1 do begin

      if ((str[i] in signs)and(Prioritet(str[i])<priormin)) then begin
        priormin:=Prioritet(str[i]);
        imin:=i;
      end;
      i:=i-1;
    end;

    New(tmp);
    tmp^.info:=str[imin];
    leftstr:=Copy(str,1,imin-1);
    rightstr:=Copy(str,imin+1,length(str)-imin);
    tmp^.left:=BuildTree(leftstr);
    tmp^.right:=BuildTree(rightstr);
    Result:=tmp;
  end;
end;
Alexiski, можешь помочь хоть немного с кодом?
Ответить с цитированием
  (#8 (permalink)) Старый
s-t-r-i-k-e-r s-t-r-i-k-e-r вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2008
По умолчанию 25.10.2008, 14:21

Программа то сама маленькая, там проверки всякие, да вывод...
Ключевая процедура вот, нужно её усовершенствовать
Код:
function TOutForm.BuildTree (str: string): TreePtr;
var
  tmp: TreePtr;
  i: integer;
  priormin, imin: integer;
  leftstr, rightstr: string;
begin

  if length(str)=1 then begin
    New(tmp);
    tmp^.info:=str[1];
    tmp^.left:=nil;
    tmp^.right:=nil;
    Result:=tmp;
  end

  else begin

    i:=length(str);
    priormin:=max;
    imin:=i;
    while i>=1 do begin

      if ((str[i] in signs)and(Prioritet(str[i])<priormin)) then begin
        priormin:=Prioritet(str[i]);
        imin:=i;
      end;
      i:=i-1;
    end;

    New(tmp);
    tmp^.info:=str[imin];
    leftstr:=Copy(str,1,imin-1);
    rightstr:=Copy(str,imin+1,length(str)-imin);
    tmp^.left:=BuildTree(leftstr);
    tmp^.right:=BuildTree(rightstr);
    Result:=tmp;
  end;
end;
Alexiski, можешь помочь хоть немного с кодом?
Ответить с цитированием
  (#9 (permalink)) Старый
Alexiski Alexiski на форуме
Любитель давать советы
 
Сообщений: 4,252
Сказал(а) спасибо: 26
Поблагодарили 51 раз(а) в 51 сообщениях
Регистрация: 16.10.2005
По умолчанию 26.10.2008, 01:48

Цитата:
Alexiski, можешь помочь хоть немного с кодом?
Немножко - могу. А делать все..

Код:
function TOutForm.BuildTree (str: string): TreePtr;
var
  tmp: TreePtr;
  i: integer;
  {Здесь добавить счетчик скобок}
  priormin, imin: integer; {Здесь добавить счетчик скобок}
  leftstr, rightstr: string;
begin

{----------------
  Этот кусочек вообще не нужен. Он только все запутывает - почему-то он считает, что операнд - это 1 символ..
  if length(str)=1 then begin
    New(tmp);
    tmp^.info:=str[1];
    tmp^.left:=nil;
    tmp^.right:=nil;
    Result:=tmp;
  end

  else begin
------------------}
    i:=length(str);
    priormin:=max;
    imin:=i;
    {Здесь счетчик скобок в ноль}
    while i>=1 do begin
      {Здесь на ')' - инкремент счетчика, на  '(' - декремент}
      if {...} then {...}
      else if {...} then {...}
      {Здесь добавить еще одно условие - что счетчик равен 0}
      else if ((str[i] in signs) and (Prioritet(str[i])<priormin) and {...}) then begin
        priormin:=Prioritet(str[i]);
        imin:=i;
      end;
      i:=i-1;
    end;

  {Вот тут проверить - а нашли ли мы хоть один знак? Например, по приоритету}
  if priormin = max then begin
    {Проверить, вдруг первый и последний символ -скобки}
    if {...} then
      Result := BuildTree(Copy(str, 2, length(str)-2))
    else begin
      {Cоздаем новый лист с этим операндом - как в закомментированном коде}
      {...}
    end
  end
  else begin {С этого места - никаких изменений}
    New(tmp);
    tmp^.info:=str[imin];
    leftstr:=Copy(str,1,imin-1);
    rightstr:=Copy(str,imin+1,length(str)-imin);
    tmp^.left:=BuildTree(leftstr);
    tmp^.right:=BuildTree(rightstr);
    Result:=tmp;
  end;
end;
Ответить с цитированием
  (#10 (permalink)) Старый
Alexiski Alexiski на форуме
Любитель давать советы
 
Сообщений: 4,252
Сказал(а) спасибо: 26
Поблагодарили 51 раз(а) в 51 сообщениях
Регистрация: 16.10.2005
По умолчанию 26.10.2008, 01:48

Цитата:
Alexiski, можешь помочь хоть немного с кодом?
Немножко - могу. А делать все..

Код:
function TOutForm.BuildTree (str: string): TreePtr;
var
  tmp: TreePtr;
  i: integer;
  {Здесь добавить счетчик скобок}
  priormin, imin: integer; {Здесь добавить счетчик скобок}
  leftstr, rightstr: string;
begin

{----------------
  Этот кусочек вообще не нужен. Он только все запутывает - почему-то он считает, что операнд - это 1 символ..
  if length(str)=1 then begin
    New(tmp);
    tmp^.info:=str[1];
    tmp^.left:=nil;
    tmp^.right:=nil;
    Result:=tmp;
  end

  else begin
------------------}
    i:=length(str);
    priormin:=max;
    imin:=i;
    {Здесь счетчик скобок в ноль}
    while i>=1 do begin
      {Здесь на ')' - инкремент счетчика, на  '(' - декремент}
      if {...} then {...}
      else if {...} then {...}
      {Здесь добавить еще одно условие - что счетчик равен 0}
      else if ((str[i] in signs) and (Prioritet(str[i])<priormin) and {...}) then begin
        priormin:=Prioritet(str[i]);
        imin:=i;
      end;
      i:=i-1;
    end;

  {Вот тут проверить - а нашли ли мы хоть один знак? Например, по приоритету}
  if priormin = max then begin
    {Проверить, вдруг первый и последний символ -скобки}
    if {...} then
      Result := BuildTree(Copy(str, 2, length(str)-2))
    else begin
      {Cоздаем новый лист с этим операндом - как в закомментированном коде}
      {...}
    end
  end
  else begin {С этого места - никаких изменений}
    New(tmp);
    tmp^.info:=str[imin];
    leftstr:=Copy(str,1,imin-1);
    rightstr:=Copy(str,imin+1,length(str)-imin);
    tmp^.left:=BuildTree(leftstr);
    tmp^.right:=BuildTree(rightstr);
    Result:=tmp;
  end;
end;
Ответить с цитированием
  (#11 (permalink)) Старый
s-t-r-i-k-e-r s-t-r-i-k-e-r вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2008
По умолчанию 26.10.2008, 13:09

Спасибо, попробую
Ответить с цитированием
  (#12 (permalink)) Старый
s-t-r-i-k-e-r s-t-r-i-k-e-r вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2008
По умолчанию 26.10.2008, 13:09

Спасибо, попробую
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
s-t-r-i-k-e-r s-t-r-i-k-e-r вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2008
По умолчанию 30.10.2008, 03:14

Что-то я тут всего нагородил, запутался
Никак не мог сделать условие, что 1ый и последний знак - скобки, решил пока без него, и ...
Хотя бы те, что есть условия правильно? в str нужно смотреть? Где я цикл не там закрыл, открыл?

Код:
function TOutForm.BuildTree (str: string): TreePtr;
var
  tmp: TreePtr;
  i: integer;
  priormin, imin, counter: integer;
  leftstr, rightstr: string;
begin

  {if length(str)=1 then begin
    New(tmp);
    tmp^.info:=str[1];
    tmp^.left:=nil;
    tmp^.right:=nil;
    Result:=tmp;
  end

  else begin    }

    i:=length(str);
    priormin:=max;
    imin:=i;
    counter:=0;
    while i>=1 do begin
     if str[i]=')' then inc(counter)
       else if str[i]='(' then dec(counter);

      if ((str[i] in signs)and(Prioritet(str[i])<priormin) and (counter=0)) then begin
        priormin:=Prioritet(str[i]);
        imin:=i;
      end;
      i:=i-1;
    end;

     
  if priormin = max then begin



    New(tmp);
    tmp^.info:=str[imin];
    leftstr:=Copy(str,1,imin-1);
    rightstr:=Copy(str,imin+1,length(str)-imin);
    tmp^.left:=BuildTree(leftstr);
    tmp^.right:=BuildTree(rightstr);
    Result:=tmp;
  end  else begin
    New(tmp);
    tmp^.info:=str[1];
    tmp^.left:=nil;
    tmp^.right:=nil;
    Result:=tmp;
      end;
end;
Ответить с цитированием
  (#14 (permalink)) Старый
Alexiski Alexiski на форуме
Любитель давать советы
 
Сообщений: 4,252
Сказал(а) спасибо: 26
Поблагодарили 51 раз(а) в 51 сообщениях
Регистрация: 16.10.2005
По умолчанию 30.10.2008, 06:31

В последнем if c точностью до наоборот перепутаны ветки:
если priormin остался max, значит, нет знаков. Это оконечный операнд, лист. Размещаем узел с двумя nil
иначе разбираем на левую-правую часть и делаем рекурсию.

Условие на скобки будет выглядеть так:
Код:
  if priormin = max then begin
    {Проверить, вдруг первый и последний символ -скобки}
    if (str[1] = '(') and (str[length(str)] = ')') then
      Result := BuildTree(Copy(str, 2, length(str)-2))
    else begin
      {Cоздаем новый лист с этим операндом - как в закомментированном коде}
      New(tmp);
      tmp^.info:=str[1];
      tmp^.left:=nil;
      tmp^.right:=nil;
      Result:=tmp;
    end
  end
  else begin {С этого места - никаких изменений}
Ответить с цитированием
  (#15 (permalink)) Старый
s-t-r-i-k-e-r s-t-r-i-k-e-r вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.10.2008
По умолчанию 30.10.2008, 16:18

Спасибо большое, вроде бы всё работает. Теперь придумываю оч. сложный пример для тестирования, интересно собъется/нет ...
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить функцию для вывода бинарного дерева на экран в виде дерева imported_Vinni Lisp 22 20.06.2011 22:34
Дерево в виде дерева как реализовать RoGeR77 Lisp 13 02.12.2010 08:30
Построение бинарного дерева krowka Вопросы начинающих программистов 1 19.02.2010 16:23
Реализовать метод удаления узла с указанными данными из бинарного дерева поиска Boby Bousher Вопросы начинающих программистов 3 26.10.2009 11:37
Построение прямой y=ax+b. toshkaexe C++ Builder 6 08.02.2007 20:22
Построение бинарного дерева blur Pascal 10 14.05.2006 20:55
Построение дерева разбора по входному тексту --- HELP toma4o Prolog 3 21.12.2004 12:15
Построение гистограмм как реализовать Anonymous Алгоритмы 12 08.05.2003 15:13
Кодирование символов и построение дерева Anonymous Алгоритмы 1 07.05.2003 19:08
Построение дерева 2 S.Yu.Gubanov Алгоритмы 3 09.12.2002 15:43
Построение дерева с чего начать Garik Алгоритмы 10 11.11.2002 00:53



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов