Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Помогите рассчитать уровень ветки(вложенности?, ...) 1с7.7 бух dbf (http://forums.kuban.ru/f1040/pomogite_rasschitat-_uroven-_vetki_vlozhennosti_1s7_7_buh_dbf-3426100.html)

Lsr 12.12.2012 19:31

Помогите рассчитать уровень ветки(вложенности?, ...) 1с7.7 бух dbf
 
Помогите рассчитать уровень ветки(вложенности?, ...) 1с7.7 бух dbf
В математическом виде проблема выглядит она так:
Есть таблица значений, в которой хранятся некие пары чисел. Строки пронумерованы(это не важно)
Указываем любую строку в ТЗ и программа должна найти в этой таблице все строки, числа в которых
не выходят за диапазон чисел в указанной паре (это легко) и надо пронумеровать полученные строки
начиная с1 так, что бы в числах отражался уровень (вложенности, ветки ...).
Когда всё вложено как в матрешке реализовал. А когда в одной матрешке может быть несколько самостоятельных матрешек, что-то не соображу. Тут надо как-то через рекурсию, но в ней я слаб.
Например, программа выбрала строку 13. Просмотр начинаем сверху.
1) 1,5 2
2) 1,3 3
4) 6,9 2
7) 6,8 3
3) 7,8 4
6) 3,5 3
5) 4,5 4
8) 1,40
9) 8,35
10) 9,15
11) 9,18
12) 1,14
13) 1,9 1
14) 18,18
15) 2,14


обратите внимание, что 1)нельзя сортировать данную таблицу, что бы разместить как можно больше
строк из неё. 2) результат зависит от напрвления обхода таблицы, т.е. от того, что ляжет на второй уровень. Если второй уровень умостить значениями 1-2,2-3,3-4...8-9, то на такие основания можно положить только такие же (если все числа натуральные).Проекция любых
пар чисел на ось 1-9 не должны накладываться друг на друга. Если втречается более "широкая" пара, должно сформироваться сообщение о номере строке и паре, но обход должен быть продолжен до конца таблицы значений. (По размеру она не более 50 строк) На Инфостарт была информация, близкая
к моей проблеме( [url]http://infostart.ru/public/78285/[/url] , Как не «попасть на миллион», решая задачу разузлования, [url]http://infostart.ru/public/78032/[/url] ), уже несколько раз "вскипятил" мозг, но не могу применить полученную информацию к решению моей задачи. Так же есть что-то общее с "ханойской" башней, только количество башен заранее не известно. В общем, помоги кодом, если можете.

EarlyBird 12.12.2012 20:11

блин...
мне чуть мозг не разорвало, пока читал сабж...

Ткачик 12.12.2012 20:30

(0) Мисту уже починили, кыш отсюда!

VZ 12.12.2012 20:43

Не корректная задача. Пара 1-50 и 51-99 разорвет цепочку. Хоть сверху, хоть снизу.

VZ 12.12.2012 20:47

... и причем здесь "1С7.7", спрашивается? Да еще "бух"?? А уж "dbf"... Мы из дурдома? :D

Helen1986 12.12.2012 21:02

решается элементарно
заносим пары в ТЗ
добавляем N колонок где н максимальная вложенность +1
ячейки в колонках заполняем нужным образом сформированным "индексом"
формируем строку сортировки ТЗ
сортируем
вторым проходом выбрасываем ненужное
имеем ответ

VZ 12.12.2012 21:57

5-Helen1986 > Вообще-то, "максимальная вложенность" (и +1) будет равна количеству строк... Не смущает?
И ТС явно желает замутить какой-то отчет ;) Это, хорошо, конечно, вот только надо решить вопрос о корректности задачи.

roma n 12.12.2012 22:24

(0) Если я правильно понял задачу и (А1-А2) - выбранная пара алгоритм относительно простой вырисовывается (предполагается что пары упорядочены: a1<=a2)
1) удаляем все строки, для которых а1<А1 или a2>А2
2) первая из оставшихся строк b1 - b2 - формирует очередной уровень
3) "разделяем" таблицу на три (с сохранением порядка строк) а2<b1; а1>=b1 и a2<=b2; а1>b2. Первые строки из первого и последнего "обрезка" формируют тот же уровень, что и строка b1 - b2.
...
Дальше рекурсивно анализ каждой из 3 таблиц.

ЗЫ только вот непонятно, почему в (0) 3-5 формирует третий уровень после "занятия" тройки парой 1-3

ЗЗЫ (6) +100500 исходную задачу услышать всё же не помешало бы. Уж не из логистических ли часом? Слишком уж специфично звучит...

Helen1986 12.12.2012 23:34

(6) не спорю

Reaper 13.12.2012 01:11

Когда имеешь дело с 1С первую скрипку играет предметная область а не математика. Математику решают в маткаде.


Текущее время: 10:58. Часовой пояс GMT +3.