Имя: Пароль:
1C
1C 7.7
v7: Помогите рассчитать уровень вложенности
, ,
0 Lsr
 
10.12.12
19:10
В математическом виде задача выглядит так:
Есть таблица значений, в которой хранятся пары чисел. Строки по порядку пронумерованы(это не важно)
Указываем любую строку в ТЗ и программа должна найти в этой таблице все строки, числа в которых
не выходят за диапазон чисел в указанной паре (это легко) и надо пронумеровать полученные строки
начиная с1 так, что бы  числа отражали уровень вложенности.
Когда всё вложено как в матрешке - реализовал. А когда в одной матрешке может быть несколько самостоятельных матрешек, что-то не соображу. Тут надо как-то через рекурсию, но в ней я лох.
например программа выбрала строку  13

1) 1,5    2
2) 1,3    3
3) 7,8    4
4) 6,9    2
5) 4,5    4
6) 3,5    3
7) 6,8    3
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

Графически решение выглядит вот так
4                     |-----|            |-----|
3    |-----------|----------|      |-----------|            
2    |----------------------|      |-----------------|      
1    |-----|-----|-----|-----|-----|-----|-----|-----|-----
   1     2     3    4     5     6     7     8     9
1 Рэйв
 
10.12.12
19:11
Советую не ТЗ, а двухмерный массив. Попроще будет
2 Lsr
 
10.12.12
19:12
Перекосило малость "графику"
3 Lsr
 
10.12.12
19:15
Рэйв, ТЗ, массив- это частности. Я алгоритма не вижу!
4 Kreont
 
10.12.12
19:15
Я такое решал когда делал получение актуальных договоров и лицензий одновременно на нужную дату :)
Задача решается через такие понятия как "пересечение множеств".
5 Рэйв
 
10.12.12
19:19
(3)Само оптимально конечно сделать вьюшку на скуле, заполнить ее и прямым запросом выгрести все что хочешь:-)...Но что - то мне кажется или у тебя не скуль или тебя этот путь не устроит:-)
6 МихаилМ
 
10.12.12
19:20
смотрите алгоритм пространственных индексов
7 Lsr
 
10.12.12
19:26
Рэйв, ты ясновидящий
8 Рэйв
 
10.12.12
19:34
(7)Постараюсь воспринять это как комплимент:-))
9 Classic
 
10.12.12
19:50
Не совсем понятна задача. Что будет при таком наборе строк
1.   1   10
2.   1    4
3.   3    6
4.   5    9
5.   7   10
6.   7    9

Выбираем первую
10 Lsr
 
10.12.12
20:07
1.   1   10 1
2.   1    4 2
3.   3    6
4.   5    9 2
5.   7   10
6.   7    9 3

Выбираем первую
Хороший вопрос. Ответ зависит от того как будем обходить таблицу: Сверху вниз, или снизу вверх. Я проставил значения при обходе сверху вниз. 3-6 не вписывается в 1-4, 7-10 не вписывается в 5-9
11 Classic
 
10.12.12
21:33
(10)
"Как будем обходить таблицу" - это метод решения. От него ответ зависеть не должен :)
12 Classic
 
10.12.12
21:34
Давай уже нематематическую, а конкретную модель
13 Cthulhu
 
10.12.12
21:41
в общенм виде у этой задачи не одно решение, вообще-то...
14 Cthulhu
 
10.12.12
21:41
(13)+: в не-общем, впрочем, как правило - тоже.
15 Lsr
 
10.12.12
22:11
Реальную озвучить не могу. Но приведу детскую аналогию.
Пришел дед мороз с мешком рассыпавшихся подарков. И достал он из него ребенку поднос(уровень1). Зачем детю такой подарок?! Закрыл глаза дед мороз и решил организовать веселую игру, что бы правильно сложить подарки в мешке, а детям сказал, что они будут строить вавилонскую башню и поставил на поднос несколько оснований(уровень2). Дети брали что-то из мешка  передавали друг другу, примеряли на поднос и на имеющиеся основания. То, что вписывалось по размерам на поднос или любое из оснований - оставляли, а что не вписывалось-в мешок. Через пол часа веселой игры на подносе стояли 3 недостроенные башни с разной степенью готовности. Но все имевшиеся у мороза части были примеряны. В результате дед мороз подписал каждый слой построенных башен цифрой, схватил подарки и удрал. Вот и вся задача.
Теперь серьёзно. Я с ней уже мозг пару раз вскипятил. Поэтому не обижайтесь, если я немного шутю!
16 Злопчинский
 
12.12.12
19:35
строишь тямы с определением вхождения невхождения временных отрезков..?
17 Михаил Козлов
 
12.12.12
20:55
Может быть такое соображение подойдет. Пусть есть некоторое множество отрезков Оi = (Ai, Bi). Частично упорядочим это множество: О1<О2 если О1 полностью внутри О2. Можно убедиться, что это частичный порядок.
Это частично упорядоченное множество можно представить в виде ориентированного графа без контуров, вершинами которого будут отрезки Оi, а дуга (О1,О2) есть, если О1<О2.
Тогда "башня" из примера в (15) - это путь в этом графе. Задача состоит в нахождении минимального числа путей, покрывающих граф. Если не ошибаюсь, для ее решения подходит алгоритм топологического упорядочивания Мака. Где-то у меня была и его реализация в 1С.
18 Злопчинский
 
12.12.12
20:59
(17) так-так-так... выкладывайте ужо
19 Михаил Козлов
 
12.12.12
21:07
(17) Делалось для определенной структуры данных, но можно под достаточно произвольное описание графа. Например, в виде пар (O1, О2). Если нужно, сделаю (это недолго + проверить). Напишите, мыло в профиле.
20 Lsr
 
12.12.12
22:39
Михаил Козлов, спасибо за информацию, но мой мозг почему-то не дружит с графами и рекурсией. В теории я знаю, что это такое, но применить на практике не могу - не вижу решений и всё. На Инфостарт была информация, близкая  к моей проблеме( http://infostart.ru/public/78285/ , Как не «попасть на миллион», решая задачу разузлования, http://infostart.ru/public/78032/ ), но я не смог её трансформировать к решению моей задачи. Надеюсь на Ваш код.
21 КонецЦикла
 
12.12.12
23:48
Что-то не вкурил про матрешки и уровень вложенности
А если либо на цифрах разложить либо графический пример поудачнее выложить?
22 Lsr
 
13.12.12
00:11
КонецЦикла, может я туплю, но что-то не вижу как прикрепить картинку к топику. Попробуй сделать так:
Взять в руки лист бумаги и карандаш. Начертите посреди листа линию длиной 9 см. Потом на втором уровне начертите первую пару (1-5см), потом вторую (1-3). Но это (1-5см)место уже занято. Поэтому рисуем в третьем уровне. Берем следующую пару из ТЗ. (6-9)-она вписывается на втором уровне над (1-9). Далее (6-8). На втором уровне место занято, но вписывается на третьем. Далее(7-8) на третьем уровне место занято, но вписывается на четвертом. Для пары(3-5)есть местечко над площадкой (1-5) рядом с (1-3). Ну и (4-5) может разместиться только над (3-5).
23 Lsr
 
13.12.12
00:13
Пардон, это должно быть в предыдущем посте вверху. Например, программа выбрала строку  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
24 Lsr
 
13.12.12
00:25
Из "графика" увидите, что проекции любых
отрезков (чисел) на ось  1-9 не должны накладываться друг на друга. Если втречается более "широкая" пара, должно сформироваться сообщение о номере строке и паре, но обход должен быть продолжен до конца таблицы значений. Может устроит и до "базовой" строки, но кто знает, что получится после такого анализа. В случае надобности я смогу ограничить прохождение по ТЗ либо "уровнем" либо нужной "шириной". Поэтому пока рассмативаем всю ТЗ.
25 Lsr
 
13.12.12
00:50
И два слова про матрешки. Вы видели когда-нибудь матрешку с двойней внутри, а с тройней? Я нет. Так вот сначала я реализовал алгоритм классической матрешки (мама, дочка), но в ходе анализа выяснилось, что могут быть ситуаци матрешка-мама а в ней двойня(3,4,5...)матрешек. Так еще каждая такая дочка может иметь свои двойни(3,4,5...). Эту ситуацию Вы видите, когда в одном уровне чертите "двойню" (1-5)и(6-9), следующая "двойня" на уровне 3 (1-3)и(3-5). Но в полученные матрешки Вы не можете поместить, скажем на уровне 4, матрешку (5-7), потому что на этом уровне она не является чьей-нибудь дочкой (нет признака вложенности) Боюсь, что данной информацией еще больше кого-нибудь запутаю. Поэтому лучше используйте для графичесого представления лист бумаги с отрезками. Более научно моя ситуация изображена в п.5.1 рис.4 здесь http://tvd-home.ru/recursion
26 Lsr
 
13.12.12
10:27
UP
27 Ёпрст
 
13.12.12
10:41
(23) выбрали первую строку, откуда смотреть ?
Или пофик, смотрим всё  сверху униз, за исключением выбранного?

а так, детская задача какая то..
28 Ёпрст
 
13.12.12
10:41
обычная рекурсия для каждой строки тз.
29 Ёпрст
 
13.12.12
10:41
может, можно и оптимизировать, если тз большая..
30 Lsr
 
13.12.12
11:22
Или пофик, смотрим всё  сверху униз, за исключением выбранного? Да
31 Lsr
 
13.12.12
20:36
Алгоритм без привязки к языку.
Есть 2 столбца А,Б. В базовой строке находятся два значения А и Б
В "Базовой" строке пишем в третий столбец 1
Выбрали следующую строку ТЗ
Если Аn<А или Бn>Б тогда пропустить//сравнили с 1-м уровнем
Если Аn>А и Бn<Б тогда//такую пару имеет смысл анализировать дальше
Если есть уровни, тогда определим какие.
начиная с максимального уровня надо определить есть ли свободный промежуток для искомой пары (Б-А)-(Бn-Аn)-...
Если итог больше чем "ширина" искомой пары, значит,возможно, есть свободное место и цифры из искомой пары надо сравнивать с цифрами каждой пары данного уровня. Если есть пересечение  Аn<А(n1) или Бn>Б(n1) или......Аn<А(nn) или Бn>Б(nn), то в текущем уровне места для данной пары нет. Но может и найтись.
Но! если под текущим уровнем уже есть уровень (кроме 1), надо сравнить текущую пару цифр с каждой парой цифр предыдущего уровня.
Если (Аn<А(n-1) или Бn>Б(n-1)) для каждой пары тогда //не помещаемся.
Если есть место в текущем уровне и не вылезли за нижний уровень, в третьем столбце пишем номер текущего уровня.
Если не проканало, пытаемя разместить пару на новом уровне и для этого сравниваемся с предыдущим
Если Аn>А(n-1) и Бn<Б(n-1) тогда присваиваем уровню следующий номер и записываем его в 3-м столбце текущей строки.
Вот что-то такое я организовал, но очень много Если и циклов. Где-то сделал ошибку, но обнаружить пока не могу. Предполагаю, что используя рекурсию, код можно значительно облагородить и сделать понятней. Поэтому и обратился за помощью, а то у меня как-то очень сумбурно получается. До третьего уровня мой код работает, а потом как бог на душу положит.
32 Ёпрст
 
13.12.12
21:16
не не так..
в начале сравниваем с основным диапазоном, если влазиет, ищем дырку на уровне ниже, если влазиет, заполняем её, т.е пищем уровень, если не влазиет - ищем в другом уровне и т.д
Если уровня нет и влазиет - присваиваем новый уровень
33 Lsr
 
13.12.12
23:13
Ёпрст4, абсолютно не согласен. У Вас прокол здесь "ищем дырку на уровне ниже, если влазиет, заполняем её". Во-первых, на уровне выше. Влазит-это необходимое условие, но надо, что бы не нависало над предыдущим уровнем. Это вкратце.
34 Ёпрст
 
14.12.12
08:45
(33) чегой то этого не увидел в условиях задачи.. Ну или по крайней мере в (22)
35 Ёпрст
 
14.12.12
08:46
тогда проще задать длину отрезка, отсортировать по этой колонке и уже потом только "собирать"
36 Ёпрст
 
14.12.12
08:46
твою матрешку.
37 фобка
 
14.12.12
16:02
ответил на другом форуме) мистяне выдыхают в серьезных вопросах, как это часто бывает)
38 Ёпрст
 
14.12.12
18:02
Акуенно сложный вопрос..

Процедура ДобавитьСтрокуТаб(ТЗ,ДиапазонС,ДиапазонПо)
   Если ДиапазонПо<ДиапазонС Тогда
       к=ДиапазонС;
       ДиапазонС=ДиапазонПо;
       ДиапазонПо=к;
   КонецЕсли;
   ТЗ.НоваяСтрока();
   ТЗ.ДиапазонС = ДиапазонС;
   ТЗ.ДиапазонПо = ДиапазонПо;
   ТЗ.Размерчик = ДиапазонПо-ДиапазонС+1;
КонецПроцедуры
Функция ПолучитьТЗПоУровню(ТЗ,Уровень)
   Служ = СоздатьОбъект("ТаблицаЗначений");
   ТЗ.Выгрузить(Служ);
   Служ.НоваяКолонка("Служ");
   Служ.ВыбратьСтроки();
   Пока Служ.ПолучитьСтроку() = 1 Цикл
       Если Служ.Уровень = Уровень Тогда
           Служ.Служ = 1;
       КонецЕсли;
   КонецЦикла;
   Служ.Сортировать("Служ");
   сч="";
   Если Служ.НайтиЗначение(1,сч,"Служ")=1 Тогда
       Служ.Выгрузить(Служ,сч);
       Возврат Служ;
   Иначе
       Возврат Уровень;        
   КонецЕсли;
КонецФункции    
//======================================================================
Функция ПоискУровня(ТЗ,НомерСтр,Уровень=1)
   Перем служ;
   ДиапазонС = ТЗ.ПолучитьЗначение(НомерСтр,"ДиапазонС");
   ДиапазонПО = ТЗ.ПолучитьЗначение(НомерСтр,"ДиапазонПО");
   Размерчик = ТЗ.ПолучитьЗначение(НомерСтр,"Размерчик");
   Служ = ПолучитьТЗПоУровню(ТЗ,Уровень);
   Если ТипЗначения(служ)= 1 Тогда
       Возврат Служ;
   КонецЕсли;    
   
   Попадает=0;
   Служ.Сортировать("ДиапазонС");
   Служ.ВыбратьСтроки();
   Пока Служ.ПолучитьСтроку() = 1 Цикл
       Если Уровень=1 Тогда
           Если Служ.Размерчик<Размерчик Тогда
               Возврат 0;
           Иначе
               Если (ДиапазонС>=Служ.ДиапазонС)И(ДиапазонПО<=Служ.ДиапазонПО) Тогда
                   Возврат ПоискУровня(ТЗ,НомерСтр,Уровень+1);
               Иначе
                   Возврат 0;
               КонецЕсли;
           КонецЕсли;
       Иначе
           Если ДиапазонПо<=Служ.ДиапазонС Тогда
               Возврат Уровень;
           ИначеЕсли ДиапазонС>=Служ.ДиапазонПо Тогда
               Попадает=1;
           Иначе
               Возврат ПоискУровня(ТЗ,НомерСтр,Уровень+1);
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   Если Попадает=1 Тогда
       Возврат Уровень;
   КонецЕсли;
   Возврат ПоискУровня(ТЗ,НомерСтр,Уровень+1);
КонецФункции // ПоискУровня

//*******************************************
Процедура Сформировать()
   
   ТЗ = СоздатьОбъект("ТаблицаЗначений");
   ТЗ.НоваяКолонка("ДиапазонС","Число");
   ТЗ.НоваяКолонка("ДиапазонПО","Число");
   ТЗ.НоваяКолонка("Уровень","Число");
   ТЗ.НоваяКолонка("Размерчик","Число");

   ДобавитьСтрокуТаб(ТЗ,1,5);
   ДобавитьСтрокуТаб(ТЗ,1,3);
   ДобавитьСтрокуТаб(ТЗ,6,9);
   ДобавитьСтрокуТаб(ТЗ,6,8);
   ДобавитьСтрокуТаб(ТЗ,7,8);
   ДобавитьСтрокуТаб(ТЗ,3,5);
   ДобавитьСтрокуТаб(ТЗ,4,5);
   ДобавитьСтрокуТаб(ТЗ,1,40);
   ДобавитьСтрокуТаб(ТЗ,8,35);
   ДобавитьСтрокуТаб(ТЗ,9,15);
   ДобавитьСтрокуТаб(ТЗ,9,18);
   ДобавитьСтрокуТаб(ТЗ,1,14);
   ДобавитьСтрокуТаб(ТЗ,1,9);
   ДобавитьСтрокуТаб(ТЗ,18,18);
   ДобавитьСтрокуТаб(ТЗ,2,14);    
   
   ТЗ.УстановитьЗначение(13,"Уровень",1);//типа выбрали 13 строку
   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку() = 1 Цикл
       Если ТЗ.Уровень=0 Тогда
           ТЗ.Уровень = ПоискУровня(ТЗ,ТЗ.НомерСтроки);
       КонецЕсли;
   КонецЦикла;
   ТЗ.ВыбратьСтроку();

КонецПроцедуры
39 Lsr
 
14.12.12
18:10
спасибо. вечером дома посмотрю.
40 KRV
 
14.12.12
18:15
Ёпрст4 молодец... но намутил)))
41 Lsr
 
15.12.12
02:08
Уважаемые Ёпрст4 и Фобка.
Проверил Ваши программы. За попытку спасибо, но обе работают ошибочно.
Таблицу я давал упрощенную для пояснения "графической" части. Но она может быть совсем другой.
Примените в своих программах вот такую таблицу
   ДобавитьСтрокуТаб(ТЗ,1,5);
   ДобавитьСтрокуТаб(ТЗ,6,8);
   ДобавитьСтрокуТаб(ТЗ,1,2);
   ДобавитьСтрокуТаб(ТЗ,6,9);
   
   ДобавитьСтрокуТаб(ТЗ,7,8);
   ДобавитьСтрокуТаб(ТЗ,3,5);
   ДобавитьСтрокуТаб(ТЗ,4,5);
   ДобавитьСтрокуТаб(ТЗ,1,40);
   ДобавитьСтрокуТаб(ТЗ,8,35);
   ДобавитьСтрокуТаб(ТЗ,9,15);
   ДобавитьСтрокуТаб(ТЗ,9,18);
   ДобавитьСтрокуТаб(ТЗ,1,14);
   ДобавитьСтрокуТаб(ТЗ,1,9);
   ДобавитьСтрокуТаб(ТЗ,18,18);
   ДобавитьСтрокуТаб(ТЗ,2,14);    
И Вы увидите, как (6-9) будет помещена над (6-8), а должна быть исключена.
Ваши реализации не соответствует алгоритму, потому, что Вы проводите сравнение
с "базовым" диапазоном и в текущем диапазоне, а надо еще и с предыдущим.
42 Ёпрст
 
15.12.12
17:35
(41) молодец, а еще через пару десятков постов будут более новые правила и условия ?
Задачу может стоило бы по человечьи описать ?
А так, ну воткни условие на проверку уровня, делов то..
Школьные задачи тоскливо решать.
43 Ёпрст
 
15.12.12
17:36
я всего лишь привёл решение для вопроса в (0) а где там чего "нависать" не должно в условиях задачи - ни слова.
44 Ёпрст
 
15.12.12
18:45
Процедура ДобавитьСтрокуТаб(ТЗ,ДиапазонС,ДиапазонПо)
   Если ДиапазонПо<ДиапазонС Тогда
       к=ДиапазонС;
       ДиапазонС=ДиапазонПо;
       ДиапазонПо=к;
   КонецЕсли;
   ТЗ.НоваяСтрока();
   ТЗ.ДиапазонС = ДиапазонС;
   ТЗ.ДиапазонПо = ДиапазонПо;
   ТЗ.Размерчик = ДиапазонПо-ДиапазонС+1;
КонецПроцедуры
Функция ПолучитьТЗПоУровню(ТЗ,Уровень)
   Служ = СоздатьОбъект("ТаблицаЗначений");
   ТЗ.Выгрузить(Служ);
   Служ.НоваяКолонка("Служ");
   Служ.ВыбратьСтроки();
   Пока Служ.ПолучитьСтроку() = 1 Цикл
       Если Служ.Уровень = Уровень Тогда
           Служ.Служ = 1;
       КонецЕсли;
   КонецЦикла;
   Служ.Сортировать("Служ");
   сч="";
   Если Служ.НайтиЗначение(1,сч,"Служ")=1 Тогда
       Служ.Выгрузить(Служ,сч);
       Возврат Служ;
   Иначе
       Возврат Уровень;        
   КонецЕсли;
КонецФункции    
//======================================================================

Функция ПоискУровня(ТЗ,НомерСтр,Уровень=1)
   Перем служ;
   ДиапазонС = ТЗ.ПолучитьЗначение(НомерСтр,"ДиапазонС");
   ДиапазонПО = ТЗ.ПолучитьЗначение(НомерСтр,"ДиапазонПО");
   Размерчик = ТЗ.ПолучитьЗначение(НомерСтр,"Размерчик");
   Служ = ПолучитьТЗПоУровню(ТЗ,Уровень);
   Если ТипЗначения(служ)= 1 Тогда
       Возврат Служ;
   КонецЕсли;    
   
   Попадает=0;
   Служ.Сортировать("ДиапазонС");
   Служ.ВыбратьСтроки();
   Пока Служ.ПолучитьСтроку() = 1 Цикл
       Если Уровень=1 Тогда
           Если Служ.Размерчик<Размерчик Тогда
               Возврат 0;
           Иначе
               Если (ДиапазонС>=Служ.ДиапазонС)И(ДиапазонПО<=Служ.ДиапазонПО) Тогда
                   Возврат ПоискУровня(ТЗ,НомерСтр,Уровень+1);
               Иначе
                   Возврат 0;
               КонецЕсли;
           КонецЕсли;
       Иначе
           Если ДиапазонПо<=Служ.ДиапазонС Тогда
               Возврат Уровень;
           ИначеЕсли ДиапазонС>=Служ.ДиапазонПо Тогда
               Попадает=1;
           Иначе
               Если Размерчик<служ.Размерчик Тогда
                   Возврат ПоискУровня(ТЗ,НомерСтр,Уровень+1);
               Иначе
                   Возврат 0;
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   Если Попадает=1 Тогда
       Возврат Уровень;
   КонецЕсли;
   Возврат ПоискУровня(ТЗ,НомерСтр,Уровень+1);
КонецФункции // ПоискУровня


//*******************************************

Процедура Сформировать()
   
   ТЗ = СоздатьОбъект("ТаблицаЗначений");
   ТЗ.НоваяКолонка("ДиапазонС","Число");
   ТЗ.НоваяКолонка("ДиапазонПО","Число");
   ТЗ.НоваяКолонка("Уровень","Число");
   ТЗ.НоваяКолонка("Размерчик","Число");
   
   ДобавитьСтрокуТаб(ТЗ,1,5);
   ДобавитьСтрокуТаб(ТЗ,6,8);
   ДобавитьСтрокуТаб(ТЗ,1,2);
   ДобавитьСтрокуТаб(ТЗ,6,9);
   
   ДобавитьСтрокуТаб(ТЗ,7,8);
   ДобавитьСтрокуТаб(ТЗ,3,5);
   ДобавитьСтрокуТаб(ТЗ,4,5);
   ДобавитьСтрокуТаб(ТЗ,1,40);
   ДобавитьСтрокуТаб(ТЗ,8,35);
   ДобавитьСтрокуТаб(ТЗ,9,15);
   ДобавитьСтрокуТаб(ТЗ,9,18);
   ДобавитьСтрокуТаб(ТЗ,1,14);
   ДобавитьСтрокуТаб(ТЗ,1,9);
   ДобавитьСтрокуТаб(ТЗ,18,18);
   ДобавитьСтрокуТаб(ТЗ,2,14);    
   
   
   
   

   //ДобавитьСтрокуТаб(ТЗ,1,5);
   //ДобавитьСтрокуТаб(ТЗ,1,3);
   //ДобавитьСтрокуТаб(ТЗ,6,9);
   //ДобавитьСтрокуТаб(ТЗ,6,8);
   //ДобавитьСтрокуТаб(ТЗ,7,8);
   //ДобавитьСтрокуТаб(ТЗ,3,5);
   //ДобавитьСтрокуТаб(ТЗ,4,5);
   //ДобавитьСтрокуТаб(ТЗ,1,40);
   //ДобавитьСтрокуТаб(ТЗ,8,35);
   //ДобавитьСтрокуТаб(ТЗ,9,15);
   //ДобавитьСтрокуТаб(ТЗ,9,18);
   //ДобавитьСтрокуТаб(ТЗ,1,14);
   //ДобавитьСтрокуТаб(ТЗ,1,9);
   //ДобавитьСтрокуТаб(ТЗ,18,18);
   //ДобавитьСтрокуТаб(ТЗ,2,14);    
   
   ТЗ.УстановитьЗначение(13,"Уровень",1);//типа выбрали 13 строку

   ТЗ.ВыбратьСтроки();
   Пока ТЗ.ПолучитьСтроку() = 1 Цикл
       Если ТЗ.Уровень=0 Тогда
           ТЗ.Уровень = ПоискУровня(ТЗ,ТЗ.НомерСтроки);
       КонецЕсли;
   КонецЦикла;
   ТЗ.ВыбратьСтроку();

КонецПроцедуры

Так что ли тебе надо ?
И это, картинки нормальные давай, хотя бы выложенные на http://ipicture.ru/
45 Lsr
 
15.12.12
19:17
Ёпрст4, сейчас проверю. Позже отпишусь.
46 KRV
 
15.12.12
19:53
(44) перестань маяться...  темы видел у ТС?
47 Lsr
 
15.12.12
20:21
Ёпрст4, ПОЗДРАВЛЯЮ!!!!! Работает!!!! И Ваш код раза в три короче моего. К тому же Вы предусмотрели ракировку, если цифры в строке стоят не по возрастанию. Мне это не надо, но факт приятный.
Проверил до 14-го уровня. Еще раз СПАСИБО и УСПЕХОВ. Ваше слово не разошлось с делом. Это очень приятно.

KRV, спасибо за Ваш интерес к моей персоне и ...что не маялись.
48 фобка
 
15.12.12
22:50
Ёпрст4 деранул кусок без копирайта) код лаконичный вроде в пон затестирую
49 Lsr
 
16.12.12
17:05
Интегрировал код в реальный проект. Работает неправильно из-за того, что Ёпрст4, конвертировал отрицательные отрезки в положительные. Эту фичу кода надо иметь ввиду тому, кто решит им воспользоваться.
50 Злопчинский
 
16.12.12
17:23
хм.. это как может быть "отрицательный отрехок"..? они у тебя вектора что ли?
51 ILM
 
гуру
16.12.12
18:50
(0) А можно с самого начала и попроще))) А то голова не варит к вечеру. Можно даже так:
1) Дано
2) Условия и правила
3) Цель и результат

P.S. Сам люблю с ТГ поработать, может мне в расписаниях заказов пригодится.
52 Злопчинский
 
16.12.12
20:25
(51) про PS - вот и я о том же мыслю
53 Lsr
 
16.12.12
20:28
(50) В первом посте я рисовал отрезки, что бы "на польцах" объяснить суть. Если 5-1=4, но если 1-5=-4. Т.е. важен порядок следования цифр. Поэтому и написал отрицательный отрезок. Хотя надо было взять в кавычки.
(51) Извините, я тоже уже изрядно устал, да и нет смысла повторяться. Дана таблица значений, а дальше почитайте мои посты в следующем порядке 23,22,24,31,33. Если хотите "поразмять мозги" могу задание усложнить.
(52) Извините, я не знаю, что такое ТГ.
54 Ёпрст
 
17.12.12
10:57
(53) это просто была защита "от дурака" в коде, вы же решения для таких случаев нигде не приводили.
55 Lsr
 
17.12.12
16:13
(54) "это просто была защита "от дурака" в коде,"
Извините, но я не понял, что Вы подразумеваете под данной фразой, да ещё и со ссылкой на 53 пост.
"вы же решения для таких случаев нигде не приводили". Ну естесственно. Если бы я имел красивое решение, я не обращался бы за помощью на форум. Но пару моментов, коль Вы подняли этот вопрос, я уточню. 1)Решение "на костылях" у меня было. 2)Есть посты в которых я указал ссылки на решение задач аналогичного класса через рекурсию. 3)В общих чертах (см пост 31)я написал "линейный" алгоритм решения задачи.
И я так же указал, что в рекурсии я лох. Мне кажется, что в Вашей фразе, Ёпрст4, есть некое недовольство. Если я Вас чем-то обидел, то не нарочно и прошу меня извинить. Ваш код просто блеск! А то что у любой программы есть какие-то ограничения, тонкости, фичи, так это общеизвестный факт. Еще раз огромное Вам спасибо и творческих успехов!
56 Ёпрст
 
17.12.12
17:15
(55) да ё.. нигде в примерах нет того, что отрезок задаётся наеборот , как [1000,-20] например. вот в код и воткнул защито от дурака.
57 Ёпрст
 
17.12.12
17:16
а так, такие задачки обычно в школе на уроках информатики дают..
58 Ёпрст
 
17.12.12
17:16
как и всякие там "ханойские" башенки
59 Lsr
 
18.12.12
04:28
(57) Когда я учился в институте, компьютер занимал всю комнату. Может тогда я решал подобные задачи на фортране или PL1, да за ненадобностью позабыл. Кто моложе-тот умнее в плане программирования.
(56) Вот я и писал, что здорово, что воткнули. Отключить оно то проще будет. Мне не надо - я отключил.
Независимо от того, куда вы едете — это в гору и против ветра!