![]() |
|
Напишите тест и функцию, которая может складывать произвольное количество чисел. 🠗 (Волшебник 07.02.2025 08:41) |
☑ | ||
---|---|---|---|---|
0
Локатор96
naïve
06.02.25
✎
15:56
|
Я начинающий 1с ник, хочу устроиться на работу и мне дали задание так что вот код
Функция ДобавитьЭлементыВМассив(Массив, Элементы)Экспорт Для Каждого Элемент из Элементы Цикл МойМассив.Добавить(Элемент); КонецЦикла; МойМассив = Новый Массив(); Результат = 0; Для Каждого Элемент из МойМассив Цикл Результат = Результат + Элемент; КонецЦикла; Возврат Результат; КонецФункции Вопрос такой: почему выходит ошибка параметра что их слишком много если я их перевожу в массив. Или можно как то без массива обойтись? |
|||
1
Волшебник
06.02.25
✎
15:54
|
Это же ВАМ задание, так что возьмите себя в руки и сделайте. Если не можете, значит Вы недостойны и идите в курьеры
|
|||
2
Волшебник
06.02.25
✎
15:55
|
(0) У Вас "МойМассив" в первом цикле не определён, так что программа выдаёт другую ошибку, а не ту, что Вы сообщили.
Вы врёте. Вы тупой бот. |
|||
3
mikecool
06.02.25
✎
15:56
|
ИИ начал запрос к себе транслировать на мисту?
|
|||
4
Локатор96
naïve
06.02.25
✎
16:01
|
а вообще логика правильна? (1)
|
|||
5
Kongo2019
06.02.25
✎
16:29
|
(4)
МойМассив = Новый Массив(); Результат = 0; Для Каждого Элемент из МойМассив Цикл Результат = Результат + Элемент; КонецЦикла; Возврат Результат; Этот кусок правильный, остальное пока нет. Это ж где такие тесты дают? |
|||
6
PLUT
06.02.25
✎
22:14
|
(5) во франчайзи наверное. Раньше с доставки дисков ИТС начинали карьеру "войти в айти"
|
|||
7
Ненавижу 1С
гуру
06.02.25
✎
16:09
|
в linq это просто!
numbers.Sum() |
|||
8
Локатор96
naïve
06.02.25
✎
16:09
|
почему мой код всем отвратителен, он на инопланетянском написан
|
|||
9
PLUT
06.02.25
✎
16:12
|
||||
10
AAA
06.02.25
✎
16:15
|
Если бы этот тест хоть какое-то мизерное значение имел для работы в обсуждаемой области
|
|||
11
PLUT
06.02.25
✎
16:19
|
вот еще
Функция подсчета суммы массива - Есть ли быстрый способ получить итог (сумму) данных массива? - Загрузи в ТЗ, сверни. |
|||
12
PLUT
06.02.25
✎
16:24
|
(10) ИдиотенТест
- Я покажу вам свои руки. Это 10 пальцев. Сколько пальцев на 10 руках? |
|||
13
Волшебник
06.02.25
✎
16:25
|
(8) Потому что у Вас нет чувства прекрасного. Вы бездушная железяка.
|
|||
14
maxab72
06.02.25
✎
16:31
|
Вспомнил анекдот.
- Сколько будет дважды два? (математик): 4 (программист): 3.99999999999999999999 (бухгалтер): 79 - Почему 79?!!! - 50 мне, 25 вам, и 4 на баланс... |
|||
15
PLUT
06.02.25
✎
16:33
|
(14)
- Изя, сколько будет дважды два? - а мы покупаем или продаём? израильская СУБД отвечает запросом за запрос |
|||
16
Локатор96
naïve
06.02.25
✎
16:37
|
У вас же у всех есть большой опыт. Можете пожалуйста объяснить
|
|||
17
Бычье сердце
06.02.25
✎
16:38
|
(16)
Напишите текст ошибки |
|||
18
Локатор96
naïve
06.02.25
✎
16:40
|
Слишком много фактических параметров
|
|||
19
maxab72
06.02.25
✎
16:42
|
(18) и на какую строку ругается?
|
|||
20
Ненавижу 1С
гуру
06.02.25
✎
23:22
|
(16)
1. метод (функция/процедура) должен делать только одну вещь - например считать сумму элементов массива 2. метод должен зависеть иметь параметрами только те, которые по настоящему ему необходимы, то есть в нашем случае - массив ну и вот: Функция СуммаМассива(Массив) Результат = 0; Для каждого Эл из Массив Цикл Результат = результат+Эл; КонецЦикла; Возврат Результат; КонецФункции |
|||
21
Волшебник
06.02.25
✎
16:43
|
(20) нет проверки на тип("Число")
|
|||
22
PLUT
06.02.25
✎
16:48
|
(18)
ПКМ (правая кнопка мыши) -> Копировать в 1С из окна сообщений копируете текст ашипки и ПКМ (правая кнопка мыши) -> Вставить (Paste) в окно "Добавить сообщение" (на форуме) и жмёте кнопку [Отправить] |
|||
23
Franchiser
гуру
06.02.25
✎
16:47
|
(18) убери 1 параметр
ДобавитьЭлементыВМассив(Массив) Экспорт Где ты вызываешь эту функцию количество параметров должно совпадать |
|||
24
Ненавижу 1С
гуру
06.02.25
✎
16:46
|
(21) нет проверок и на тип Массив. Никто в 1С типы не проверяет, если подразумевается конкретный тип.
|
|||
25
Локатор96
naïve
06.02.25
✎
20:46
|
&НаКлиенте Процедура ПриНачалеРаботыСистемы() Результат = ЛогикаБизнесПроцесса.ДобавитьЭлементыВМассив(1, 2, 3); Сообщить(Результат); КонецПроцедуры Я когда запускаю отладку там пишет ошибку слишком много фактических параметров |
|||
26
Franchiser
гуру
06.02.25
✎
16:54
|
(3) ты передал 3 параметра,в функции описано только 2. Так передавать нельзя.
|
|||
27
Волшебник
06.02.25
✎
16:55
|
(25) решение в (20) и передавать надо массив
|
|||
28
mikecool
06.02.25
✎
16:56
|
это случайно не ветка проверки Обратный тест Тьюринга ?
|
|||
29
Волшебник
06.02.25
✎
20:45
|
Вот вам задачка. Как правильно называется следующая функция?
Функция ф(п) Возврат Вычислить("("+СтрЗаменить(п, " ", ")+(")+")"); КонецФункции |
|||
30
Asmody
06.02.25
✎
17:22
|
(0)
В этом коде есть несколько критических ошибок: Логическая ошибка в порядке операций: МойМассив = Новый Массив(); // Пересоздание массива ПОСЛЕ добавления элементов Нужно инициализировать массив ДО добавления элементов. Неиспользуемый параметр: Функция принимает параметр Массив, но нигде его не использует. Ошибка области видимости: Переменная МойМассив используется до ее объявления. Некорректная логика работы: Судя по названию функции, она должна добавлять элементы в массив, но при этом пытается вернуть сумму элементов. |
|||
31
Гена
гуру
06.02.25
✎
17:25
|
У меня на калькуляторе есть кнопки <M+>, <MR> и <MC>
|
|||
32
Garykom
гуру
06.02.25
✎
17:26
|
(0) >Напишите тест и функцию, которая может складывать произвольное количество чисел.
В 1С не поддерживаются функции с произвольным числом параметров |
|||
33
Asmody
06.02.25
✎
17:28
|
(32) там же не написано, что произвольное количество параметров.
произвольное количество чисел можно вполне прочитать из файла, например |
|||
34
Garykom
гуру
06.02.25
✎
17:29
|
(33) Об этом должно быть в задании?
|
|||
35
Franchiser
гуру
06.02.25
✎
17:30
|
(32) Только встроенные функции в платформу макс() и Мин() поддерживают такое, надо попросить добавить еще сумм()
|
|||
36
maxab72
06.02.25
✎
17:36
|
(35) загоните все в таблицу значений и сделайте итог по колонке.
|
|||
37
Волшебник
06.02.25
✎
18:48
|
Что-то нет ответов на (29)...
|
|||
38
Ненавижу 1С
гуру
06.02.25
✎
20:18
|
(37) там хвоста не хватает. Не "скомпилируется"
|
|||
39
Ненавижу 1С
гуру
06.02.25
✎
20:20
|
(38) а нет. С телефона не увидел.
|
|||
40
Ненавижу 1С
гуру
06.02.25
✎
20:21
|
(29) похоже на удаление всех пробелов
|
|||
41
Ненавижу 1С
гуру
06.02.25
✎
20:24
|
(40) конкатенация строк или суммирование чисел отделённых пробелами
|
|||
42
Волшебник
06.02.25
✎
20:45
|
(41) Всё верно.
|
|||
43
zippygrill
06.02.25
✎
22:12
|
вспомнилось, что не хватает в 1С, после Python
def sum_list(collection): if len(collection) == 1: return collection[0] else: return collection[0] + sum_list(collection[1:]) list1 = [1, 2, 3, 4, 5] |
|||
44
Franchiser
гуру
06.02.25
✎
21:58
|
(42) для чисел больше 999 нужно ещё НПП удалять
|
|||
45
Волшебник
06.02.25
✎
22:09
|
(44) 👍
|
|||
46
bolder
06.02.25
✎
22:45
|
(0) Жесть.В школе информатику балду пинал.Ноль логики.
|
|||
47
TormozIT
гуру
06.02.25
✎
23:20
|
(43) Чем оно лучше 1Сного?
Функция Главный() Массив = СтрРазделить("1, 2, 3, 4, 5", ", ", Ложь); Результат = Сумма(Массив); КонецФункции Функция Сумма(Массив, Индекс = 0) Если Массив.ВГраница() = Индекс Тогда Возврат 0 + Массив[Индекс]; Иначе Возврат Сумма(Массив, Индекс + 1) + Массив[Индекс]; КонецЕсли; КонецФункции |
|||
48
Волшебник
06.02.25
✎
22:50
|
(47) У Вас синтаксические ошибки в коде
|
|||
49
Волшебник
06.02.25
✎
23:00
|
(47) Что это?!
Функция Главный() Массив = СтрРазделить("1, 2, 3, 4, 5", ", ", Ложь); Результат = Сумма(Массив); КонецФункции |
|||
50
TormozIT
гуру
06.02.25
✎
23:16
|
(48) Этот код был проверен.
(49) Стартовый метод. Его наличие обязательно для консоли кода ИР. |
|||
51
Волшебник
06.02.25
✎
23:17
|
(50) Вы врёте. Функция не содержит Возврат
|
|||
52
Ненавижу 1С
гуру
06.02.25
✎
23:32
|
(51) вернет неопределено. Это же 1с
|
|||
53
Ненавижу 1С
гуру
06.02.25
✎
23:38
|
(43) collection.Aggregate(0,(res,it)=>res+it)
Правда в linq есть готовое Sum() |
|||
54
TormozIT
гуру
07.02.25
✎
07:21
|
(53) Аналог на 1С
// . // Параметры: // Массив - Массив из Число - // АгрегатнаяФункция - Строка - обращаться к значению через "э", например "Сумма(э)" // Возвращаемое значение: // Число - Функция АгрегатОтМассиваЧиселЛкс(Массив, АгрегатнаяФункция) Экспорт Таблица = Новый ТаблицаЗначений; Таблица.Колонки.Добавить("э", Новый ОписаниеТипов("Число")); ирОбщий.ЗагрузитьВКолонкуТаблицыЛкс(Массив, "э", Таблица); ИсточникДанных = Новый ОписаниеИсточникаДанных(Таблица); ИсточникДанных.Колонки.э.Итог = АгрегатнаяФункция; Построитель = Новый ПостроительЗапроса; Построитель.ИсточникДанных = ИсточникДанных; Выборка = Построитель.Результат.Выбрать(); Выборка.Следующий(); Возврат Выборка.э; КонецФункции |
|||
55
Stepashkin
07.02.25
✎
08:10
|
(0) Прочтите книгу Радченко "Программирование для начинающих". Там все разжевано и положено в рот. Как прочтете, будете задавать меньше вопросов. По коду:
1. Передавать нужно три параметра. У вас их два. И это примитивные типы число. 2. МойМассив = Новый Массив(); необходимо перенести выше цикла. Сначала создается массив (массив - это коллекция), потом обходится в цикле. 3. Выделите код функции и нажмите Ctrl+Alt+F для форматирования. Так код будет соответствовать стандартам программирования. 4. Отпишитесь в чат, получилось ли у вас реализовать вашу функцию. |
|||
56
Asmody
07.02.25
✎
08:15
|
(55) "Отпишитесь в чат, получилось ли у вас реализовать вашу функцию." – да ну, нахер
|
|||
57
Stepashkin
07.02.25
✎
08:16
|
(56) Что не так?
|
|||
58
Stepashkin
07.02.25
✎
08:18
|
(56) Когда я начинаю учить людей, они видят во мне зануду, потому что педантичность страшит людей. Поэтому сомневаюсь, что стажер станет следовать моим советам. Расслабьтесь)
|
|||
59
Pprog151713
07.02.25
✎
09:10
|
(0) Учись студент
Массив = Новый Массив(); Массив.Добавить(1); Массив.Добавить(2); ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Кол"); Для каждого стр из Массив Цикл НС = ТЗ.Добавить(); НС.Кол = стр; КонецЦикла; ЗН = ТЗ.Итог("Кол"); Сообщить (ЗН); |
|||
60
Гена
гуру
07.02.25
✎
08:27
|
(55) Что ж вас всех на массив тянет. Вот на кой нам знание каждого слагаемого? Да ни на кой. По аналогии с простейшим калькулятором с его M+
Разве мы знаем КАЖДОЕ число в памяти? Нет, конечно. Ну так и в 1С забацайте: 1. Есть общий реквизит S, который при желании можно обнулять (аналог MC на калькуляторе) 2. Напишите функцию суммирования с S любого текущего числа (аналог M+ на калькуляторе) 3. Всё. Можете до седых волос складывать и никаких массивов. |
|||
61
Bigbro
07.02.25
✎
08:33
|
(60) а где еще хранить значения и передавать их, если не в массиве?
ну и в процессе может возникать задача найти сумму, почему бы и нет. я имею в виду, что интерактивная работа со сложением чисел конечно распространенный сценарий работы в 1с, но далеко не единственный. |
|||
62
Stepashkin
07.02.25
✎
08:34
|
(60)
Что ж вас всех на массив тянет
Меня тянет к вечеру пятницы. Боюсь, ваши советы с калькулятором для ТС еще рановаты) |
|||
63
Волшебник
07.02.25
✎
08:36
|
А может сделаем оборотный регистр накопления?
|
|||
64
Гена
гуру
07.02.25
✎
08:39
|
(61) Что за массивофильство... А если чисел квадрильоны? На любом языке массив гавкнет.
|
|||
65
Stepashkin
07.02.25
✎
08:43
|
(64) Вы мыслите глобально, в данном случает это лишнее.
|
|||
66
Stepashkin
07.02.25
✎
08:44
|
(63) Обоснуйте.
|
|||
67
Гена
гуру
07.02.25
✎
08:46
|
(65) Я мыслю логически. Ну вот с какого бодуна выделять физическое место для ВСЕХ чисел, если достаточно двух ячеек: текущего числа и S ?
|
|||
68
Stepashkin
07.02.25
✎
08:50
|
(67) Задачка из разряда "стажер решает для одного раза". Спокойнее.
|
|||
69
Ненавижу 1С
гуру
07.02.25
✎
08:57
|
(54) Много букв. 1С застряло в этом
|
|||
70
Bigbro
07.02.25
✎
11:43
|
(64) Если чисел квадрильоны, то нажимать кнопку M+ на «калькуляторе» придется завещать внукам и правнукам...
В то время как квадрильон чисел, который где-то уже хранится, можно считывать порциями для обработки. Например, в тот же массив. Я понимаю, Геннадий, что вы в извечном вопросе баланса потребления памяти и производительности на этот раз заняли крайнюю позицию. Но этот спор потому и вечен, что не существует единого идеального решения для любой ситуации. Как правило, есть некий буфер, размер которого и есть то количество памяти, которое мы готовы выделять на операцию (наш массив). В предельном случае — это всего лишь одно число. Или массив из одного элемента — ваш выбор. Но если чисел много и операция обращения за следующей порцией затратна (а это чаще всего действительно так, если мы делаем запрос в другую БД или на сетевой ресурс, или читаем файл с диска и т. д.), имеет смысл брать сразу большой кусок для обработки. И тогда есть смысл увеличивать буфер, наш массив. |
|||
71
Волшебник
07.02.25
✎
09:09
|
(66) там есть виртуальная таблица Обороты, она нам всё просуммирует
|
|||
72
Stepashkin
07.02.25
✎
09:18
|
(71) А, ну тогда просто необходимо сделать.
|
|||
73
Волшебник
07.02.25
✎
09:38
|
||||
74
Гена
гуру
07.02.25
✎
09:47
|
(70) Хорошо. Убедили. Тогда вспомним, что по заданию нужен ещё и тест. Предлагаю так: есть тестовый массив, неважно какого размера. Мы берём оттуда куски, пусть по 100 чисел и суммируем. Устраивает такая схема?
|
|||
75
Волшебник
07.02.25
✎
09:49
|
(74) а может по 1000 чисел? Ну чтоб наверняка
|
|||
76
Гена
гуру
07.02.25
✎
09:51
|
(75) Неважно. Главное, чтобы соискатель грамотно скодил порционный алгоритм.
|
|||
77
Волшебник
07.02.25
✎
10:06
|
(76) Как же Вы будете тестировать функцию суммы, если не знаете ответ? Вы будете функцию суммы тестировать с помощью другой функции суммы?
|
|||
78
Asmody
07.02.25
✎
11:47
|
Вообще, сумма определяется через индукцию. Т.е., её корректность математически доказывается.
|
|||
79
ILM
гуру
07.02.25
✎
12:45
|
Напомнило:
- На вас движется М танков! - Нет М это мало, на вас движется N танков! |
|||
80
TormozIT
гуру
07.02.25
✎
14:45
|
(69) Похоже ты не понял. Я отвечал на пример с вызовом агрегатора и самую очевидную часть аналогии указывать не стал, думая что уж тебе то она будет понятна. Но раз ты не понял, то вот сравнение
1С - АгрегатОтМассиваЧиселЛкс(Массив, "Сумма(э)") Твой - collection.Aggregate(0,(res,it)=>res+it) Думаю невооруженным взглядом заметна бОльшая понятность при схожей компактности у варианта 1С даже с учетом моей предвзятости. Однако скорость работы кода 1С конечно будет заметно меньше. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |