Имя: Пароль:
1C
1С v8
Задачка: исключение нулей при умножении
0 list770
 
27.11.18
10:42
Здравствуйте! Помогите пожалуйста решить задачу. Нужно рассчитать коэффициенты путем умножения чисел. Упрощенно это выглядит так:

К1 = Ч1*Ч2*Ч3*Ч4
К2 = Ч2*Ч3*Ч4
К3 = Ч3*Ч4

Среди Чисел попадаются нули. Как-нибудь можно исключить нули при умножении, не расписывая цикл для каждого коэффициента (коэффициентов и чисел на самом деле больше)
1 ZDenis
 
27.11.18
10:44
?(Ч1=0,1,Ч1) * ...
2 1Сергей
 
27.11.18
10:44
к=1

Для каждого Ч из МассивЧ Цикл
    Если Ч<>0 Тогда
        к=к*ч
    конецесли
КонецЦикла
3 list770
 
27.11.18
10:55
(1) Спасибо. Но без циклов похоже никак не обойдется. Дело в том, что если не все числа равны нулю, тогда умножать ненулевые, а если все Ч=0, тогда и К=0
4 1Сергей
 
27.11.18
10:56
(3) я просто не представляю как ты без цикла собрался перемножать неопределенное количество чисел. Пусть даже без нулей
5 Ненавижу 1С
 
гуру
27.11.18
11:01
Произведение=1;
Счетчик = 0;

Для каждого Ч из МассивЧ Цикл
    Если Ч<>0 Тогда
        Произведение = Произведение*Ч;
        Счетчик = Счетчик+1;
    конецесли
КонецЦикла

Возврат ?(Счетчик=0,0,Произведение);
6 exwill
 
27.11.18
11:02
(3) Если очень хочешь без цикла, тогда:

К1=мин(?(Ч1=0,1,Ч1)*?(Ч2=0,1,Ч2)*?(Ч3=0,1,Ч3),Ч1+Ч2+Ч3)

А оно тебе надо?
7 1Сергей
 
27.11.18
11:03
(6) насчет мин не понял. К чему это?
8 exwill
 
27.11.18
11:05
+(6)
К1=?(Ч1+Ч2+Ч3=0,0,?(Ч1=0,1,Ч1)*?(Ч2=0,1,Ч2)*?(Ч3=0,1,Ч3))

извините
9 list770
 
27.11.18
11:05
(6) То, что надо, спасибо))))
10 exwill
 
27.11.18
11:06
(9) Правильно (8)
11 list770
 
27.11.18
11:09
(10) да да, понял
12 Дмитрий
 
27.11.18
11:13
(10) если коэффициенты положительные )
13 youalex
 
27.11.18
11:42
СтрФормата = "ЧРД=.; ЧН=1; ЧГ=";
    Сообщить(Вычислить(СтрШаблон("%1*%2*%3*%4", Формат(Ч1, СтрФормата), Формат(Ч2, СтрФормата),Формат(Ч3, СтрФормата), Формат(Ч4, СтрФормата))));
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший