|
Как сделать красивый цикл? | ☑ | ||
---|---|---|---|---|
0
wowik
04.06.18
✎
10:54
|
Есть массив с n элементами. Каждый элемент массива таблица значений.
Необходимо сложить первую строку таблицы значений первого элемента с первой строкой второго второго, с первой строкой третьего и т.д. Для массива с 3-мя элементами цикл выглядит так: Для Каждого СтрокаТаблицы из МассивТЗ[0] Цикл Для Каждого СтрокаТаблицы1 из МассивТЗ[1] Цикл Для Каждого СтрокаТаблицы2 из МассивТЗ[2] Цикл ВВ = СтрокаТаблицы.Сумма+ СтрокаТаблицы1.Сумма + СтрокаТаблицы2.Сумма; Если ВВ = 5 Тогда Сообщить("123"); КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; Как сделать цикл для обхода массива с n элементами? |
|||
72
VS-1976
04.06.18
✎
14:03
|
(67) Тут задача в 2 цикла решается
Для пКолонка = 0 По МассивТЗ[0].Количество() - 1 Цикл пСумма = 0; Для пТаблица = 0 По МассивТЗ.Количество() - 1 Цикл пСумма = пСумма + МассивТЗ[пТаблица][пКолонка]; |
|||
73
VS-1976
04.06.18
✎
14:05
|
(72) Забыл про строки. Тоже примерно так же 3-й цикл
|
|||
74
Optan
04.06.18
✎
14:07
|
(72) Суммы наверное отдельно для каждого номера строки надо хранить (IMHO)
|
|||
75
VS-1976
04.06.18
✎
14:07
|
Для пКолонка = 0 По МассивТЗ[0].Колонки.Количество() - 1 Цикл
пСумма = 0; Для пСтрТаблица = 0 По МассивТЗ[0].Количество() - 1 Цикл Для пТаблица = 0 По МассивТЗ.Количество() - 1 Цикл пСумма = пСумма + МассивТЗ[пТаблица][пСтрТаблица][пКолонка]; Что-то подобное |
|||
76
arsik
гуру
04.06.18
✎
14:12
|
Может я чего то не понимаю, но не проще просто перебором вот так?
Сумма = 0;
|
|||
77
VS-1976
04.06.18
✎
14:14
|
(76) У него в коде не только 0-я строка, а все складываются
|
|||
78
arsik
гуру
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); КонецЦикла; Вот так наверное |
|||
83
arsik
гуру
04.06.18
✎
14:22
|
+(78) Вот вариант для всех строк
мойМассив = Новый Массив;
|
|||
84
arsik
гуру
04.06.18
✎
14:29
|
+(83) Ошибка Правильнее так.
мойМассив = Новый Массив;
|
|||
85
wowik
04.06.18
✎
15:07
|
(84) что-то здесь не так. Нужно перебрать все строки всех элементов массива.
|
|||
86
VS-1976
04.06.18
✎
15:11
|
(85) Строки различной длины? Если да то давай автор пиши уже наконец-то рекурсию :)
|
|||
87
arsik
гуру
04.06.18
✎
15:19
|
(85) В таблицах количество строк одинаковое?
|
|||
88
arsik
гуру
04.06.18
✎
15:48
|
Добью. Если количество строк одинаковое во всех ТЗ то вот это быстрее будет.
мойМассив = Новый Массив;
|
|||
89
wowik
04.06.18
✎
16:08
|
(87) количество строк в ТЗ разное
|
|||
90
wowik
04.06.18
✎
16:08
|
(86) пиши) мог бы, написал уже)
|
|||
91
drumandbass
04.06.18
✎
16:23
|
судя по твоему примеру просто
Для Каждого СтрокаТаблицы2 из МассивТЗ[МассивТЗ.Количество()-1] Цикл КонецЦикла Но если пример не правилен и СтрокаТаблицы2 содержит массив тогда нужна рекурсия |
|||
92
drumandbass
04.06.18
✎
16:27
|
Вот пример
вызов Рекурсия(МассивТЗ); Процедура Рекурсия(МассивТЗ) Для каждого стр из МассивТЗ цикл Если ТипЗнч(Стр) = Тип("Массив") Тогда Рекурсия(Стр); Иначе Сообщить(Стр.Блаблабла); КонецЕсли; КонецЦикла КонецПроцедуры |
|||
93
arsik
гуру
04.06.18
✎
16:33
|
(89) Тогда так
С попыткой. Для Каждого МояТЗ из мойМассив Цикл
Без попытки. Для Каждого МояТЗ из мойМассив Цикл
|
|||
94
0xFFFFFF
04.06.18
✎
16:35
|
(0) Слить все в одну ТЗ, свернуть результат.
|
|||
95
arsik
гуру
04.06.18
✎
16:37
|
(94) Долго
|
|||
96
wowik
05.06.18
✎
09:14
|
(93) что-то тут все равно не то.
Не увидел где учитывается разное количество строк в таблицах. |
|||
97
wowik
05.06.18
✎
09:15
|
(94) это как?
|
|||
98
arsik
гуру
05.06.18
✎
09:35
|
(96) Ну как так то?
моиСуммы - массив. Количество элементов этого массива - максимальное количество во всех таблицах. В каждом элементе накапливается сумма по индексу строки. Индекс строки ТЗ = индеску элемента в массиве. |
|||
99
wowik
05.06.18
✎
09:38
|
(98) сейчас еще раз отладчиком гляну.
|
|||
100
arsik
гуру
05.06.18
✎
09:42
|
(99) Сотка.
Нашел ошибку Пока максИндексМассива>максИндексСтрок Цикл
заменить на Пока максИндексСтрок>максИндексМассива Цикл |
|||
101
wowik
05.06.18
✎
09:47
|
Элемент 1:
Строка 1: 1 Строка 2: 2 Элемент 2: Строка 1: 2 Строка 2: 4 получается в моиСуммы : 3 6 Перебирает не все. Или я не то смотрю? |
|||
102
МихаилМ
05.06.18
✎
09:49
|
если задание в (0)
я бы так сделал 1) пронумеровал строки вложенных тз. 2) обединил тз 3) свернул по номеру строки. далее искать требуемые суммы. |
|||
103
wowik
05.06.18
✎
09:52
|
(102) здесь получится, я так понял, суммы первых элементов, суммы вторых элементов и т.д. А где сумма первого и второго, второго и первого?
|
|||
104
Optan
05.06.18
✎
10:11
|
(103) В подробном! описании задания, которые ты от нас тщательно скрываешь
|
|||
105
wowik
05.06.18
✎
10:15
|
(104) задание в описании. надо перебрать все строки всех таблиц.
|
|||
106
arsik
гуру
05.06.18
✎
10:25
|
(105) Для...?
|
|||
107
wowik
05.06.18
✎
10:28
|
(106) как по мне, так описание в (0) исчерпывающее. Сделать также, но красиво. Зачем придумывать "для чего" , "и такие просят 150", "что-то скрываешь",... . Если кто знает, напишите.
|
|||
108
arsik
гуру
05.06.18
✎
10:31
|
(107) Ну на основании (0) (93) - это то что надо.
|
|||
109
wowik
05.06.18
✎
10:31
|
(108) см (101)
|
|||
110
arsik
гуру
05.06.18
✎
10:35
|
(109) Да все правильно. (93) это твой вариант.
|
|||
111
wowik
05.06.18
✎
10:40
|
(110) см (107)
|
|||
112
Мимохожий Однако
05.06.18
✎
10:55
|
(107) Не увиливай. Ответь на вопрос.
|
|||
113
wowik
06.06.18
✎
09:23
|
Ну давайте, кто сделает! Повышаю ставку. Пусть будет 20 баксов ифностарта за правильное и красивое решение. Использование оператора "Выполнить" запрещается, использование запросов тоже запрещается.
|
|||
114
DrShad
06.06.18
✎
09:25
|
(113) да никому не нужны твои копейки
|
|||
115
PR
06.06.18
✎
09:26
|
Позовите, когда дойдет хотя бы до 50 :))
|
|||
116
wowik
06.06.18
✎
09:28
|
(114) (115) а как же показать что вы реальные специалисты, просящие от 150??))
|
|||
117
wowik
06.06.18
✎
09:28
|
показали бы свою квалификацию)
|
|||
118
PR
06.06.18
✎
09:29
|
(116) Я ее каждый день показываю клиентам по 3500 в час
|
|||
119
wowik
06.06.18
✎
09:29
|
(118) ну вот за сколько примерно времени смогли бы сделать эту задачу?
|
|||
120
DrShad
06.06.18
✎
09:29
|
(117) ну для чего мне ее тебе показывать? у меня есть клиенты, которые видели квалификацию и которые довольны
|
|||
121
hhhh
06.06.18
✎
09:29
|
(117) ну есть же 1с-лансер туда и обращайся. Там за тысячу рублей 5 таких циклов тебе зафигачат. Чего ты чудишь?
|
|||
122
DrShad
06.06.18
✎
09:30
|
(119) пол часа с кофе, печеньками и перекуром
|
|||
123
wowik
06.06.18
✎
09:31
|
(122) хорошо. 3500/2 = 1750 - это сколько баксов инфостарта?
|
|||
124
catena
06.06.18
✎
09:33
|
Боже, шел третий день...
|
|||
125
wowik
06.06.18
✎
09:33
|
(124) тут третий. так задача уже недели 3 висит))
|
|||
126
wowik
06.06.18
✎
09:35
|
(121) придется туда пойти по ходу.
|
|||
127
hhhh
06.06.18
✎
09:36
|
(125) ну просто ты должен еще форуму за размещение вакансии. Это Волшебник чего-то отвлекся. Здесь вакансии и проекты платные. тут 1750 не обойдешься. Готов тысяч 30.
|
|||
128
Сти
06.06.18
✎
09:39
|
(107) Исчерпывающее? Да ну? )))
1) Как можно сложить строки таблиц значений? В стопку? В папку? В поленницу? Может быть значения каких-то колонок можно сложить, но никак не строки, в которых непонятно что. 2) "сложить первую строку таблицы значений первого элемента с первой строкой второго второго, с первой строкой третьего и т.д." То есть из описания: Первую строку первого с первой строкой второго. Первую строку второго с первой строкой третьего. Первую строку третьего с первой строкой четвертого". И нигде не говорится о переборе всех строк всех таблиц. 3) Куда помещать полученные суммы? Или просто сложить и забыть? Исчерпывающее, ага. |
|||
129
wowik
06.06.18
✎
09:41
|
(127) да тут не одна вакансия, а много)) бОльшую часть пишущих надо на замену.
|
|||
130
wowik
06.06.18
✎
09:43
|
(128) коллега ну из цикла же видно что перебираются все строки. Задача не для вас)
|
|||
131
Бертыш
06.06.18
✎
09:44
|
Господи, какое шоу оказывается прошло мимо меня
|
|||
132
wowik
06.06.18
✎
09:44
|
(131) шоу в разгаре)
|
|||
133
Сти
06.06.18
✎
09:45
|
(130) Из цикла видно, из описания нет. Создавать ТЗ и описания - задача не для вас )
|
|||
134
ERWINS
06.06.18
✎
09:46
|
(4)
Чтобы понять рекурсию нужно понять рекурсию => Давайте останемся конструктивными. |
|||
135
hhhh
06.06.18
✎
09:51
|
идем за попкорном тогда.
Обнаружено расхождение текстового описания и кода программы. |
|||
136
zak555
06.06.18
✎
09:53
|
(113) почему запрос запрещается?
|
|||
137
zak555
06.06.18
✎
09:58
|
или тут можно двумя циклами сделать
|
|||
138
catena
06.06.18
✎
09:59
|
(137)Почему именно двумя?
|
|||
139
zak555
06.06.18
✎
10:02
|
(138) чем меньше циклов, тем быстрее ? )
решение в 94 |
|||
140
catena
06.06.18
✎
10:06
|
(139)Я так поняла, ему нужен полный перебор всех строк
|
|||
141
hhhh
06.06.18
✎
10:06
|
(139) да он темнит, тут не поймешь. То говорит, что нужно сложить первую строку с первой, а вторую со второй, то говорит, что все строки. И уже 3 дня темнит на всех форумах.
|
|||
142
zak555
06.06.18
✎
10:08
|
(141) как я понял задачу --- нужно сложить все первые строки, все вторые, все третьи и т.д.
|
|||
143
wowik
06.06.18
✎
10:09
|
(136) запросом уже сделано давно, все работает, все ок.
|
|||
144
wowik
06.06.18
✎
10:09
|
(140) да!
|
|||
145
wowik
06.06.18
✎
10:10
|
(141) каких всех? я только на мисте спросил.
|
|||
146
catena
06.06.18
✎
10:10
|
(142)Ну, такая задача даже без рекурсии решается
|
|||
147
catena
06.06.18
✎
10:10
|
(144)А такая процедурой в 10 строк
|
|||
148
wowik
06.06.18
✎
10:12
|
(147) и? поделитесь решением?
|
|||
149
zak555
06.06.18
✎
10:12
|
(147) 7 должно быть
|
|||
150
catena
06.06.18
✎
10:13
|
(149)Значит моя дороже :)
|
|||
151
DrShad
06.06.18
✎
10:13
|
(144) ты уверен что понимаешь что такое полный перебор? )))
|
|||
152
zak555
06.06.18
✎
10:20
|
РезультирующаяТЗ = МассивТЗ[0].СкопироватьКолонки();
РезультирующаяТЗ.Колонки.Добавить("НумерСтроки"); Для Каждого ТекЭлемент Из МассивТЗ Цикл Для каждого ТекСтрока Из ТекЭлемент Цикл ЗаполнитьЗначенияСвойств(РезультирующаяТЗ.НоваяСтрока(), ТекСтрока); РезультирующаяТЗ.НумерСтроки = ТекСтрока.НомерСтроки; КонецЦикла; КонецЦикла; //Сворачиваем по колонке НумерСтроки |
|||
153
catena
06.06.18
✎
10:22
|
(152)Это номер с номером
|
|||
154
dezss
06.06.18
✎
10:23
|
(152) разные номер тоже надо складывать
|
|||
155
catena
06.06.18
✎
10:23
|
а ему надо
111111 111112 ... nnnnnn |
|||
156
catena
06.06.18
✎
10:24
|
При чем, неизвестно еще, одинаковое ли количество строк в этих ТЗ
|
|||
157
zak555
06.06.18
✎
10:24
|
(153) ?
|
|||
158
PR
06.06.18
✎
10:26
|
Он уже давно сказал, что хочет (27), что вы тут перетираете, пустоплеты? :))
|
|||
159
zak555
06.06.18
✎
10:29
|
(158) это уже другая задача ))
|
|||
160
wowik
06.06.18
✎
11:41
|
(151) еще как. а ты?
|
|||
161
wowik
06.06.18
✎
11:42
|
(158) +100
|
|||
162
Сти
06.06.18
✎
12:04
|
(147) Действительно 10. Вместе с вызовом процедуры.
|
|||
163
МихаилМ
06.06.18
✎
12:37
|
допустим будет 20 таблиц по 20 строк.
тупое полное перемножение даст 20 в 20-й степени комбинаций. поэтому участвовать в реализации подобной глупости нет смысла. нужно уточнение задачи. |
|||
164
wowik
06.06.18
✎
13:29
|
(163) да, правильно.
Повторю условие: задача изложена в (0), количество строк в ТЗ разное. Нужно перебрать все возможные варианты. |
|||
165
catena
06.06.18
✎
13:35
|
(164)Тебе зачем? Запрос работающий у тебя есть. Из спортивного интереса - так самостоятельно надо писать.
|
|||
166
Сти
06.06.18
✎
13:36
|
(164) за три дня не решил пятиминутную задачу? Стаж 8 лет... Или это тестирование форумчан? )
|
|||
167
PR
06.06.18
✎
14:17
|
(163) Допустим программист 1С во время поездки на работу сунул голову в открытый люк, а снизу ему прилетело ломом в жбан и программист выключился из участия в происходящем вокруг на месяц
Тупой прикид подсказывает, что фирма не может ждать его месяц, пока он выздоровеет и реализует поставленную перед ним задачу Поэтому участвовать в реализации подобной глупости нет смысла Нужно уточнение задачи |
|||
168
PR
06.06.18
✎
14:18
|
И эти люди автоматизируют страну
Мне тупо не по себе как-то |
|||
169
wowik
06.06.18
✎
14:59
|
(166) стаж более 20, коллега) на форуме просто 8).
|
|||
170
wowik
06.06.18
✎
15:00
|
(168) согласен. столько постов, а у многих нет даже понимания что нужно сделать.
|
|||
171
Сти
06.06.18
✎
15:13
|
(169) ну так тогда что, это тестирование форумчан? )
Ведь на самом деле задача (с уточнением, что нужно перебрать все возможные комбинации) решается рекурсивной процедурой в несколько строчек. И почти ничем не отличается от обычного обхода ДЗ, за исключением того, что нужно контролировать, где пора остановиться. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |