Главная страница
    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.036 c
14-1088927233
Masloff
2004-07-04 11:47
2004.07.25
Где взять драйвера под Motorola c650?


14-1089093136
WondeRu
2004-07-06 09:52
2004.07.25
Шутка старая, но вводит меня в тупик


14-1089241546
Almaz
2004-07-08 03:05
2004.07.25
IDE среды под QNX 6.x


3-1088619879
Zlod3y
2004-06-30 22:24
2004.07.25
Окно ввода логина и пароля при подключении к алиасу в ODBC


14-1089123073
VEG
2004-07-06 18:11
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский