|
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) Вот я и писал, что здорово, что воткнули. Отключить оно то проще будет. Мне не надо - я отключил. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |