Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Вниз

Деревья и рекурсия   Найти похожие ветки 

 
ydv   (2004-07-12 11:37) [0]

Есть такая задачка.
Дана таблица вида:
codeup     name       codethis
0      | Авто       | 10
0      | Мото       | 20
10     | Жигули     | 40
20     | Ява        | 50
40     | модель 2106| 60
50     | модель 350 | 70
40     | модель 2109| 80

в результате некоторой обработки получается дерево вида:
-Авто
   -Жигули
        -модель 2106
        -модель 2109
-Мото
   -Ява
        -модель 350

Стоит задача выбрать все элементы, относящиеся, например, к ветке Авто. Понимаю, что надо применять рекурсию. А вот как - не знаю.


 
MBo ©   (2004-07-12 11:59) [1]

логика:

procedure SelectChilds(Item:TTreeItem);
для каждого Child do begin
 выбрать его;
 SelectChilds(Child);
end;


 
ydv   (2004-07-12 12:22) [2]

Дело в том, что это не VCL-дерево (TTreeView), а просто таблица, которую можно представить в виде дерева для наглядности.


 
Sheng ©   (2004-07-12 12:25) [3]

Напиши, каким образом представлены данные после обработки (пример кода - описание массива)


 
ydv   (2004-07-12 12:33) [4]

а никаким, просто есть таблица и всё, которую можно в виде дерева представить, а можно и не представлять. Главная задача - выбирать все подчиненные элементы до самого последненго уровня и заполнять другую таблицу.


 
MBo ©   (2004-07-12 12:34) [5]

>Дело в том, что это не VCL-дерево (TTreeView), а просто таблица
Ничего в принципе не изменится - вместо типа TTreeItem твой будет, а детишки у тебя - раз имеется дерево - значит, как-то организованы.


 
Sheng ©   (2004-07-12 12:45) [6]

codeup     name       codethis  selected
0      | Авто       | 10       | no
0      | Мото       | 20       | no
10     | Жигули     | 40       | no
20     | Ява        | 50       | no
40     | модель 2106| 60       | no
50     | модель 350 | 70       | no
40     | модель 2109| 80       | no

procedure Sel(Num: Integer);
var
 i: Integer;
begin
 for i:=1 to Length(Массив) do
  if Массив[1,i]=Num then  // проверяем принадлежность
    begin
      Массив[4,i]:=True;   // помечаем как выбранный
      Sel(Массив[3,i]);    // вызываем со сл. типом
    end;
end;

вызов: Sel(10);

теоретически, должно работать


 
ydv   (2004-07-12 13:09) [7]

Ок. Попробую.


 
Sheng ©   (2004-07-12 13:34) [8]

Да, и ещё в условии надо поставить проверку, если элемент не выделен.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.031 c
3-1088573748
Ratiborr
2004-06-30 09:35
2004.07.25
На сколько облегчает DLL


1-1089762117
Алексей
2004-07-14 03:41
2004.07.25
Необходимо вычислять довольно сложные математические выражения.


14-1089107031
REA
2004-07-06 13:43
2004.07.25
Stop bits


1-1089280529
StasN
2004-07-08 13:55
2004.07.25
Как спрятать DBComboBox список?


14-1088741904
arbin
2004-07-02 08:18
2004.07.25
Ночной дозор





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский