Вход | Регистрация

  1  2   
1С:Предприятие :: 1С:Предприятие 8 общая

Как сделать красивый цикл?

Как сделать красивый цикл?
Я
   wowik
 
04.06.18 - 10:54
Есть массив с n элементами. Каждый элемент массива таблица значений.
Необходимо сложить первую строку таблицы значений первого элемента с первой строкой второго второго, с первой строкой третьего и т.д.    
Для массива с 3-мя элементами цикл выглядит так:              
    Для Каждого СтрокаТаблицы из МассивТЗ[0] Цикл
        Для Каждого СтрокаТаблицы1 из МассивТЗ[1] Цикл
            Для Каждого СтрокаТаблицы2 из МассивТЗ[2] Цикл                
                ВВ = СтрокаТаблицы.Сумма+ СтрокаТаблицы1.Сумма + СтрокаТаблицы2.Сумма;                
                Если ВВ = 5 Тогда
                                  Сообщить("123");    
                 КонецЕсли;
            КонецЦикла;         
        КонецЦикла;           
    КонецЦикла;       

Как сделать цикл для обхода массива с n элементами?
 
 
   DrShad
 
1 - 04.06.18 - 10:55
рекурсия
   wowik
 
2 - 04.06.18 - 10:56
(1) код можно для примера?  думал о рекурсии, не пойму как.
   DrShad
 
3 - 04.06.18 - 10:57
(2) гугл в помощь обход дерева значений
   Вафель
 
4 - 04.06.18 - 10:57
(2) Чтобы понять рекурсию нужно понять рекурсию
   wowik
 
5 - 04.06.18 - 10:59
хотелось бы получить стоящие ответы, напишите, если кто сталкивался.
   DrShad
 
6 - 04.06.18 - 11:00
(5) и что тебе еще не ответили?
   DrShad
 
7 - 04.06.18 - 11:01
+(6) если ты не понял ответ - это не означает, что тебе его не дали )))
   wowik
 
8 - 04.06.18 - 11:01
(6) ты вот приведи пример или кинь ссылку. К гуглу отправить все могут)
   DrShad
 
9 - 04.06.18 - 11:02
(8) не хами
   Вафель
 
10 - 04.06.18 - 11:02
(8) слишком простой вопрос. поэтому влом что-то искать
 
 Рекламное место пустует
   wowik
 
11 - 04.06.18 - 11:03
(9) (10) коллеги, не знаете, не пишите, не засоряйте тему.
   Вафель
 
12 - 04.06.18 - 11:04
(11) вот если бы ты написал: нашел алгоритм обхода дерева, но не получается то-то и то-то. Тогда другой вопрос
   PR
 
13 - 04.06.18 - 11:04
(11) Коллега, не умеешь работать с рекурсией, иди нахрен гугли рекурсию
Загуглишь, вернешься, доложишь об окончании изучения рекурсии
   PR
 
14 - 04.06.18 - 11:06
Половина постов в ветке — ответ на вопрос в (0)
Так нет, дайте готовый код, а то я не в курсах, что там еще за рекурсии ваши
   wowik
 
15 - 04.06.18 - 11:11
(3) - по этому совету нашел это v8: Обход дерева значений  Буду разбираться, спасибо.
   PR
 
16 - 04.06.18 - 11:12
Удивительное рядом. It's a magic!
   Cool_Profi
 
17 - 04.06.18 - 11:16
Никогда не думай о рекурсии, иначе уйдёшь в рекурсию и помрёшь по исчерпании памяти...
   DrShad
 
18 - 04.06.18 - 11:24
(17) главное выход из нее сделать не забыть и все будет хорошо
   Cool_Profi
 
19 - 04.06.18 - 11:25
(18) Главное - не забыть выйти из неё...
   igorPetrov
 
20 - 04.06.18 - 11:28
Не забудь выйти из нее
   wowik
 
21 - 04.06.18 - 11:30
(15) не, все равно не понятно. Нужны еще советы.
   hawksib
 
22 - 04.06.18 - 11:34
"Необходимо сложить первую строку таблицы значений первого элемента с первой строкой второго второго, с первой строкой третьего и т.д.     "
И что в результате получается?
   DrShad
 
23 - 04.06.18 - 11:36
(21) давай по-порядку
что конкретно не понятно?
   Вафель
 
24 - 04.06.18 - 11:37
(23) он решил считерить.
ветку найду, а дальше код готовый буду просить )))
   PR
 
25 - 04.06.18 - 11:39
А потом такие приходят и 150 просят
   hawksib
 
26 - 04.06.18 - 11:40
(23) вы понимаете как задача стоит?

"Необходимо сложить первую строку таблицы значений первого элемента с первой строкой второго второго, с первой строкой третьего и т.д.     "

не пойму что у автора получиться должно, по коду вообще какой-то мрак написан, таблицу 1 сложит саму с собой столько раз, сколько строк в нулевой таблице, а таблицу 2 ещё намного раз больше
   PR
 
27 - 04.06.18 - 11:46
(26) Чувак хочет сделать полный перебор всех комбинаций значений строк нескольких ТЗ с целью поиска тех, в которых сумма этих значений = 5
Идиотская задача, да
   wowik
 
28 - 04.06.18 - 11:49
(27) все правильно!
   Вафель
 
29 - 04.06.18 - 11:50
(28) УУУУ. рано тебе еще такие задачки решать
   PR
 
30 - 04.06.18 - 11:56
(28) Скупая слеза прожгла борозду на изможденном лице

Чего тебе не хватает-то? Вроде уже все написали, что делать.
   Dotoshin
 
31 - 04.06.18 - 12:01
(25) А сколько вы даете за написание циклов? :)
   wowik
 
32 - 04.06.18 - 12:08
(30) нужно прям конкретный код написать.
   PR
 
33 - 04.06.18 - 12:08
(31) Я не понял твоего вопроса
С расценками можешь ознакомиться в двух ветках - вакансиях :))
 
 
   wowik
 
34 - 04.06.18 - 12:09
(23) все не понятно. было бы понятно, не писал бы на всеобщем форуме добродетелей)
   PR
 
35 - 04.06.18 - 12:09
(32) А, так ты бы сразу так и сказал
Ну так озвучь сумму вознаграждения, желающих набежит...
   Малыш Джон
 
36 - 04.06.18 - 12:12
Почему типовые не используешь?

ОбщийМодульФункцийКогдаНеЗнаешьАХочется.СложитьПервуюСтрокуТаблицыЗначенийПервогоЭлементаСПервойСтрокойВторогоВторогоСПервойСтрокойТретьегоИТД(Массив);
   Адинэснег
 
37 - 04.06.18 - 12:12
(2)
Учебник Информатика 9 класс Горячев Островский часть 2
   igorPetrov
 
38 - 04.06.18 - 12:12
(32) ха... ха...
   wowik
 
39 - 04.06.18 - 12:49
(35) 10 баксов инфостарта.
   wowik
 
40 - 04.06.18 - 12:51
(39) для PR 11, если сделает)
   Вафель
 
41 - 04.06.18 - 12:58
(40) откуда вообще задача взялась? курсовая чтоли?
   DrShad
 
42 - 04.06.18 - 13:02
(39) за такое вознаграждение я лучше бесплатно понаблюдаю за развитием событий
   Optan
 
43 - 04.06.18 - 13:06
(0) А вторые, третьи и т.д. строки ТЗ потом надо складывать?
   wowik
 
44 - 04.06.18 - 13:19
(42) не бесплатно, а за счет работодателя) все же сидят в рабочее время)
   wowik
 
45 - 04.06.18 - 13:20
(43) да, все элементы нужно обойти
   wowik
 
46 - 04.06.18 - 13:20
(41) наблюдайте бесплатно, как другие)
   DrShad
 
47 - 04.06.18 - 13:25
(44) не все работают на дядю
   Малыш Джон
 
48 - 04.06.18 - 13:26
...кому-то и тети достаются
   Tateossian
 
49 - 04.06.18 - 13:29
Я так понимаю, это просто агрегатная сумма по полю «Сумма» всех таблиц значений?
 
 Рекламное место пустует
   PR
 
50 - 04.06.18 - 13:39
(40) Хех, знаешь, подлец, чем заинтересовать :))
Недавно хотел что-то скачать по интеграции Слэка с 1С, а там эти инфосраномани потребовали
Давай 50 вперед и кидай заготовку кода, сделаю, пришлю готовый вариант
   Мандалай
 
51 - 04.06.18 - 13:41
Вам че влом рекурсию написать человеку?
   Мандалай
 
52 - 04.06.18 - 13:42
(36)Не нашел такого, ткни пальцем
   PR
 
53 - 04.06.18 - 13:42
(51) Порви рубаху на груди, напиши сам
В качестве вишенки на торте напиши второй вариант  без рекурсии
Докажи нам всем
   DrShad
 
54 - 04.06.18 - 13:43
(51) рекурсию нужно понимать, а чтобы ее понять ее нельзя скопипастить - нужно самому написать
   PR
 
55 - 04.06.18 - 13:43
(52) Ты просто не там смотришь, найди уже по Ctfl + Shift + F что ли
   Мандалай
 
56 - 04.06.18 - 13:43
(0)Друх, может тебе того? В запрос все кинуть?
   Мандалай
 
57 - 04.06.18 - 13:45
(54)Уверяю тебя - можно :)
   Мандалай
 
58 - 04.06.18 - 13:47
(54)Alt + Ctfl + Shift + F4 помогло
   DrShad
 
59 - 04.06.18 - 13:47
(57) ну объясни ТСу что это за зверь такой - может поймет
   Мандалай
 
60 - 04.06.18 - 13:47
(58) к (55)
   VS-1976
 
61 - 04.06.18 - 13:48
Я что-то не понял рекурсировать никто не собирается, и автору придётся делать всё самому? :)
   Мандалай
 
62 - 04.06.18 - 13:48
(59)Не, ты меня не понял. Можно скопипастить рекурсию так, что она начнет работать, даже не до конца понимая как она работает :)
   PR
 
63 - 04.06.18 - 13:50
(62) А ты (21) прочитал?
   DrShad
 
64 - 04.06.18 - 13:50
(62) найти правильную рекурсию для копипаста еще сложнее, чем ее написать )))
   wowik
 
65 - 04.06.18 - 13:55
(56) а вы молодец! да, в запрос все кинул, через декартово произведение таблиц все работает, все ок. Но вот обычный вариант интересно тоже сделать/посмотреть.
   PR
 
66 - 04.06.18 - 13:56
(65) Обычный — это который с рекурсией?
А то декартово произведение так-то и без рекурсии написать можно
   wowik
 
67 - 04.06.18 - 13:57
(66) с рекурсией, другие варианты может есть.
   PR
 
68 - 04.06.18 - 13:58
(67) Еще раз, любую рекурсию можно реализовать без рекурсии
   VS-1976
 
69 - 04.06.18 - 13:58
(67) Можно и без запроса заделать методом Свернуть предварительно создав 1 таблицу
   DrShad
 
70 - 04.06.18 - 14:00
(65) тема была про красивый цикл
   antgrom
 
71 - 04.06.18 - 14:03
в этой теме "про цикл" почти в каждом сообщении - про рекурсию.
Сдаётся мне, что вся эта тема - это и есть цикл про рекурсию ...
   VS-1976
 
72 - 04.06.18 - 14:03
(67) Тут задача в 2 цикла решается
Для пКолонка = 0 По МассивТЗ[0].Количество() - 1 Цикл
  пСумма = 0;
  Для пТаблица = 0 По МассивТЗ.Количество() - 1 Цикл
    пСумма = пСумма + МассивТЗ[пТаблица][пКолонка];
   VS-1976
 
73 - 04.06.18 - 14:05
(72) Забыл про строки. Тоже примерно так же 3-й цикл
   Optan
 
74 - 04.06.18 - 14:07
(72) Суммы наверное отдельно для каждого номера строки надо хранить (IMHO)

СоответствиеДляСумм = Новый Соответствие;

Для каждого элМассива Из МойМассивТЗшек Цикл
    Для каждого строкаТЗ Из элМассива Цикл
        НомерСтроки = элМассива.Индекс(строкаТЗ);
        ЗначениеСоответствия=СоответствиеДляСумм.Получить(НомерСтроки);
        Если ЗначениеСоответствия=Неопределено тогда
            СоответствиеДляСумм.Вставить(НомерСтроки,строкаТЗ.КолонкаСЦифиркой);    
        Иначе
            СоответствиеДляСумм.Вставить(НомерСтроки,ЗначениеСоответствия+строкаТЗ.КолонкаСЦифиркой);        
        КонецЕсли;
    КонецЦикла; 
КонецЦикла;


   VS-1976
 
75 - 04.06.18 - 14:07
Для пКолонка = 0 По МассивТЗ[0].Колонки.Количество() - 1 Цикл
  пСумма = 0;
  Для пСтрТаблица = 0 По МассивТЗ[0].Количество() - 1 Цикл
    Для пТаблица = 0 По МассивТЗ.Количество() - 1 Цикл
      пСумма = пСумма + МассивТЗ[пТаблица][пСтрТаблица][пКолонка];

Что-то подобное
   arsik
 
76 - 04.06.18 - 14:12
Может я чего то не понимаю, но не проще просто перебором вот так?
Сумма = 0;
Для Каждого МояТЗ из мойМассив Цикл
    Сумма = Сумма+МояТЗ[0].Сумма;
КонецЦикла;

   VS-1976
 
77 - 04.06.18 - 14:14
(76) У него в коде не только 0-я строка, а все складываются
   arsik
 
78 - 04.06.18 - 14:17
(77) Да с чего это? В (0) четко указано "первую строку таблицы значений первого элемента с первой строкой второго второго, с первой строкой третьего и т.д."
   Бычье сердце
 
79 - 04.06.18 - 14:18
Для инд=0 по МойМассив Цикл
 Сумма = МойМассив[инд]*(инд+1);
КонецЦикла;
   Бычье сердце
 
80 - 04.06.18 - 14:18
Для инд=0 по МойМассив.Количество()-1 Цикл
   Малыш Джон
 
81 - 04.06.18 - 14:19
(78) ну написано же "и т.д.") включай уже свой телепатор)
   Бычье сердце
 
82 - 04.06.18 - 14:19
Для инд=0 по МойМассив.Количество()-1 Цикл
 Сумма = Сумма +МойМассив[инд]*(инд+1);
КонецЦикла;
Вот так наверное
   arsik
 
83 - 04.06.18 - 14:22
+(78) Вот вариант для всех строк
мойМассив = Новый Массив;
моеСоответствие = Новый Соответствие;

для Сч = 0 по мойМассив[0].Количество()-1 Цикл
    моеСоответствие.Вставить(Сч,0);
КонецЦикла;

Для Каждого МояТЗ из мойМассив Цикл
    Для Элемент из моеСоответствие Цикл
        Элемент.Значение = Элемент.Значение+МояТЗ[Элемент.Ключ].Сумма;
    КонецЦикла;
КонецЦикла;

   arsik
 
84 - 04.06.18 - 14:29
+(83) Ошибка Правильнее так.
мойМассив = Новый Массив;
моеСоответствие = Новый Соответствие;

для Сч = 0 по мойМассив[0].Количество()-1 Цикл
    моеСоответствие.Вставить(Сч,0);
КонецЦикла;

Для Каждого МояТЗ из мойМассив Цикл
    Для Каждого Элемент из моеСоответствие Цикл
        Элемент.Значение = Элемент.Значение+МояТЗ[Элемент.Ключ].Сумма;
    КонецЦикла;
КонецЦикла;

   wowik
 
85 - 04.06.18 - 15:07
(84) что-то здесь не так. Нужно перебрать все строки всех элементов массива.
   VS-1976
 
86 - 04.06.18 - 15:11
(85) Строки различной длины? Если да то давай автор пиши уже наконец-то рекурсию :)
   arsik
 
87 - 04.06.18 - 15:19
(85) В таблицах количество строк одинаковое?
   arsik
 
88 - 04.06.18 - 15:48
Добью. Если количество строк одинаковое во всех ТЗ то вот это быстрее будет.
мойМассив = Новый Массив;
моиСуммы = Новый Массив;

максИндексСтрок = мойМассив[0].Количество()-1;
для Сч = 0 по максИндексСтрок Цикл
    моиСуммы.Добавить(0);
КонецЦикла;

Для Каждого МояТЗ из мойМассив Цикл
    Для Сч = 0 по максИндексСтрок Цикл
        моиСуммы[Сч] = моиСуммы[Сч] + МояТЗ[Сч].Сумма;
    КонецЦикла;
КонецЦикла;

   wowik
 
89 - 04.06.18 - 16:08
(87) количество строк в ТЗ разное
   wowik
 
90 - 04.06.18 - 16:08
(86) пиши)  мог бы, написал уже)
   drumandbass
 
91 - 04.06.18 - 16:23
судя по твоему примеру просто 

Для Каждого СтрокаТаблицы2 из МассивТЗ[МассивТЗ.Количество()-1] Цикл  
КонецЦикла 

Но если пример не правилен и СтрокаТаблицы2  содержит массив тогда нужна рекурсия
   drumandbass
 
92 - 04.06.18 - 16:27
Вот пример 

вызов 
Рекурсия(МассивТЗ);

Процедура Рекурсия(МассивТЗ) 

Для каждого стр из МассивТЗ цикл 
Если ТипЗнч(Стр) = Тип("Массив") Тогда 
Рекурсия(Стр);
Иначе 
Сообщить(Стр.Блаблабла);
КонецЕсли;

КонецЦикла 


КонецПроцедуры
   arsik
 
93 - 04.06.18 - 16:33
(89) Тогда так
С попыткой.
Для Каждого МояТЗ из мойМассив Цикл
    максИндексСтрок = МояТЗ.Количество()-1;
    Для Сч = 0 по максИндексСтрок Цикл
        Попытка
            моиСуммы[Сч] = моиСуммы[Сч] + МояТЗ[Сч].Сумма;
        Исключение
            моиСуммы.Добавить(0);
            моиСуммы[Сч] = моиСуммы[Сч] + МояТЗ[Сч].Сумма;
        КонецПопытки;
    КонецЦикла;
КонецЦикла;


Без попытки.
Для Каждого МояТЗ из мойМассив Цикл
    максИндексСтрок = МояТЗ.Количество()-1;
    максИндексМассива = моиСуммы.Количество()-1;
    Пока максИндексМассива>максИндексСтрок Цикл
        моиСуммы.Добавить(0);
        максИндексМассива = максИндексМассива+1;
    КонецЦикла;
    
    Для Сч = 0 по максИндексСтрок Цикл
        моиСуммы[Сч] = моиСуммы[Сч] + МояТЗ[Сч].Сумма;
    КонецЦикла;
КонецЦикла;

   0xFFFFFF
 
94 - 04.06.18 - 16:35
(0) Слить все в одну ТЗ, свернуть результат.
   arsik
 
95 - 04.06.18 - 16:37
(94) Долго
   wowik
 
96 - 05.06.18 - 09:14
(93) что-то тут все равно не то.
Не увидел где учитывается разное количество строк в таблицах.
   wowik
 
97 - 05.06.18 - 09:15
(94) это как?
   arsik
 
98 - 05.06.18 - 09:35
(96) Ну как так то?
моиСуммы - массив. Количество элементов этого массива -  максимальное количество во всех таблицах. В каждом элементе накапливается сумма по индексу строки. Индекс строки ТЗ = индеску элемента в массиве.
   wowik
 
99 - 05.06.18 - 09:38
(98) сейчас еще раз отладчиком гляну.
   arsik
 
100 - 05.06.18 - 09:42
(99) Сотка.
Нашел ошибку
Пока максИндексМассива>максИндексСтрок Цикл

заменить на
Пока максИндексСтрок>максИндексМассива Цикл

  1  2   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует