Имя: Пароль:
1C
 
Напишите тест и функцию, которая может складывать произвольное количество чисел.
🠗 (Волшебник 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
(8) так вот же

https://habr.com/ru/articles/518242/
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
(6)
♫ Песня "Войти в айти" (песня вкатуна)
https://wizard.mista.ru/music/it-songs/enter-IT.html
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С конечно будет заметно меньше.
2 + 2 = 3.9999999999999999999999999999999...