Руками не бить!

  • Автор темы Автор темы SeverBap
  • Дата начала Дата начала
А ты проверку значения из интервала сделай, если отлично от значения по умолчанию... не говорю что ноль, т.к. возможно что измерение тоже будет ноль, то счетчику прибавь единицу. потом общую сумму дели на значие счетчика
Прикол что может несколько дней быть нулевым - это тоже дает свой результат при расчете среднего и подчете количество дней учета!

Точно математику отменили! Вы точно не путаете округление с выделением целой части?
Округление - это когда преобразование идет по правилу (алгоритму).
Выделение целой части - это когда просто отбрасывается дробная часть.
Ничего не путаю, мне нужны целые значения так как "1.5 человека - эт только в морге можно встретить!"
Без обид конечно!
наверно стоит опредилится что 1.5 в какую сторону!!! 1.534656 в 1, а 1.556234 в 2!!
Правильно думаю?

Всего возможно П(i=1 до 31){V|i} вариантов набора значений теста, где V - теоретически возможное количество различимых результатов измерения, | - знак возведения в степень.
V по определению конечно - датчик не может делать замеры в бесконечном диапазоне.
Следовательно, если не получается подобрать правило округления..... просто пропиши все возможные случаи!
Или все-таки настрой округление или хотя бы определись с алгоритмом.
:)
Поподробней!!!!!!
 
наверно стоит опредилится что 1.5 в какую сторону!!! 1.534656 в 1, а 1.556234 в 2!!
Правильно думаю?
интересный подход ! А где ж будет граница между округлением до 1 и до 2-х ? 1.54 что ли ?
Не проще ли округлять по известным правилам ?
 
Кому сейчас легко?
 
Поподробней!!!!!!
Это ОЧЕНЬ трудоемкий способ, если подробней было для простого перебора
для справки: при двух различных результатов для единичного измерения число возможных исходов для последовательности составляет порядка 4290000000
Что касается правил округления, то могу только концептуально посоветовать
Определяешь диапазон значений , в который гарантировано попадает твое среднее
Гарантированно тебя устроит диапазон [минимальное_количество_измерений*минимально_возможное_значение_ЕИ] - [максимальное_количество_измерений*максимально_возможное_значение_ЕИ]
где ЕИ - значение единичного измерения
Для каждого отрезка [n,n+1], где n - любое целое число входящее в диапазон устанавливаешь порог p, 0<p<1
При превышении n+p округляться будет в большую сторону.
Куда округлять n+p, реши заранее.
Пропиши округление прямо набором условных операций либо с помощью выделения целой части.
Синтаксис конфигуратора 1С знаю плохо, так что код написать не могу.
Успеха.
 
Это ОЧЕНЬ трудоемкий способ, если подробней было для простого перебора
для справки: при двух различных результатов для единичного измерения число возможных исходов для последовательности составляет порядка 4290000000
Что касается правил округления, то могу только концептуально посоветовать
Определяешь диапазон значений , в который гарантировано попадает твое среднее
Гарантированно тебя устроит диапазон [минимальное_количество_измерений*минимально_возможное_значение_ЕИ] - [максимальное_количество_измерений*максимально_возможное_значение_ЕИ]
где ЕИ - значение единичного измерения
Для каждого отрезка [n,n+1], где n - любое целое число входящее в диапазон устанавливаешь порог p, 0<p<1
При превышении n+p округляться будет в большую сторону.
Куда округлять n+p, реши заранее.
Пропиши округление прямо набором условных операций либо с помощью выделения целой части.
Синтаксис конфигуратора 1С знаю плохо, так что код написать не могу.
Успеха.
Тоесть что из этого следует: минимальное_количество_измерений=1; минимально_возможное_значение_ЕИ=Минимальное_значению_из_массива и соответственно ... правельно думаю?
 
Тоесть что из этого следует: минимальное_количество_измерений=1; минимально_возможное_значение_ЕИ=Минимальное_значению_из_массива и соответственно ... правельно думаю?
Почти.
Минимальным значением из массива не стоит ограничиваться.
Например, у тебя в массиве числа от 3 до 15
Взяв как минимально возможное значение ЕИ 3, ты рискуешь пролетель со случаем (чисто гипотетическим), когда у тебя все значения в масиве будут равны, к примеру, 2.
Так что определить значения минимального и максимального значения ЕИ стоит исходя из априорных соображений.
Например, если меряешь посещаемость, то минимально ЕИ будет 0 (никто не пришел на работу;) ),
максимальное стоит задать с учетом потенциальных возможностей по расширению фирмы.
Эти данные должны взяться не из выборки, а из общих соображений.
Соответственно у тебя будет некий риск выхода за эти рамки.
Чем больший диапазон - тем меньше риск и тем больше работы тебе предстоит при написании функции.
Плюсом такого подхода является возможность прямо назначить уникальные правила округления для каждого диапазона.
Что как я понял тебе и надо
 
АлександрРостовский проблема в том что у меня максимальное значение нигде не хранится - значит прийдется брать максимальное из выборки!!! - возможно так?
 
Прикол что может несколько дней быть нулевым - это тоже дает свой результат при расчете среднего и подчете количество дней учета!
заполняй свой массив выборки СТРОКАМИ (Строка(измерение)), а при подсчете бери числовое значение строки, тогда отсутствие измерения даст пустое значение, а "0" превратится в значение 0,
вот и вся проблема
 
vbs такой пример: 77 77 77 80 77 73 73 73 72 73 73 73 71 71 71 71 71 71 71 0 0 0 0 0 0 0 0 0 0 0 0 - это когда срез по 19 число месяца;
А такой как тебе: 62 62 62 62 62 0 0 0 0 0 66 66 62 66 65 65 65 62 62 61 62 62 0 0 0 0 62 0 0 0 0 - на 31!!!!!!
и как подсчитать?? и какое среднее ??? когда незнаешь где что почем (в смысле в отчете)!!!
 
vbs такой пример: 77 77 77 80 77 73 73 73 72 73 73 73 71 71 71 71 71 71 71 0 0 0 0 0 0 0 0 0 0 0 0 - это когда срез по 19 число месяца;
А такой как тебе: 62 62 62 62 62 0 0 0 0 0 66 66 62 66 65 65 65 62 62 61 62 62 0 0 0 0 62 0 0 0 0 - на 31!!!!!!
и как подсчитать?? и какое среднее ??? когда незнаешь где что почем (в смысле в отчете)!!!
если в первом примере 19 значений (а 0 - их отсутствие) - вычисляй по 19-ти.
То же и во втором - если 0 - значение - вычисляем по 31, нет - по тем же 19-ти.
Или я чего-то не понимаю ?
Тогда приведи пример из жизни (31 не надо, покажи на трех - пяти)
 
Код:
Функция СреднееЧисло(МассивДанных)
Перем ЗначениеВозврата;

Возврат ЗначениеВозврата;
КонецФункции
МассивДанных - список значений размером 31
как дальше писать я незнаю, все остальное решил!!!

vbs
Вот смотри: 1 нормальный (тоесть все забиты из десяти) 1 1 1 1 1 1 1 1 1 1;
2 когда не доконца заполнен 1 1 1 1 1 1 0 0 0 0; (0 - незаполнено)
3 когда заполнен до конца 1 1 1 1 1 1 0 0 0 0; (0 - заполнено)
разницу усек? как я буду расчитывать я незнаю!
 
используй вместо списка значений таблицу значений
1 колонка строка
2 колонка значение число
3 колонка признак расчета 0 не считать 1 считать

тогда ТаблицаЗначений.Итог(3); - будет количество чисел участвующих в расчете
 
Вот смотри: 1 нормальный (тоесть все забиты из десяти) 1 1 1 1 1 1 1 1 1 1;
2 когда не доконца заполнен 1 1 1 1 1 1 0 0 0 0; (0 - незаполнено)
3 когда заполнен до конца 1 1 1 1 1 1 0 0 0 0; (0 - заполнено)
используй вместо списка значений таблицу значений
1 колонка строка
2 колонка значение число
3 колонка признак расчета 0 не считать 1 считать

тогда ТаблицаЗначений.Итог(3); - будет количество чисел участвующих в расчете
О.Господи. А я не то же самое предложил ?
"1" "1" "1" "1" "1" "1" "" "" "" "" - второй случай
"1" "1" "1" "1" "1" "1" "0" "0" "0" "0" - третий случай
И при обработке преобразуем строковый массив в числовой - там, где пустые значения - не включаем в расчет
 
О.Господи. А я не то же самое предложил ?

по моему нет
Для Инд=1 по Список.РазмерСписка() Цикл
// и так далее



ТаблицаЗначений.Итог(2);
ТаблицаЗначений.Итог(3);
 
по моему нет
Для Инд=1 по Список.РазмерСписка() Цикл
// и так далее
N = 0; // - количество чисел в расчете
S = 0; // - Сумма
for i = 1 to 31 do
Value = Список.GetValue(i);
if EmptyValue(Value) = 0 then
N = N + 1;
S = S + Number(Value);
endif;
Среднее = S/N // ну или как там он хочет округлять
enddo
Согласен, вариант с таблицей значений гораздо оптимальнее - но и мой даст правильный результат
 
Вот смотри: 1 нормальный (тоесть все забиты из десяти) 1 1 1 1 1 1 1 1 1 1;
2 когда не доконца заполнен 1 1 1 1 1 1 0 0 0 0; (0 - незаполнено)
3 когда заполнен до конца 1 1 1 1 1 1 0 0 0 0; (0 - заполнено)

если по 3-му варианту пояснишь, может че и пойму...

а так все вышесказанное правильно...

почитав выше, понял что если месяц не заполнен, то нули не считаются, а если уже заполнен(закрыт), то считаются...

так вот, кто тебе мешает, получить количество дней в месяце и количество значений в списке... при их различии считать без нулей, а если совпадают, то с нулями...
 
Что тут долго копья ломать - самая точная рекомендация уже дана
используй вместо списка значений таблицу значений
1 колонка строка
2 колонка значение число
3 колонка признак расчета 0 не считать 1 считать
тогда ТаблицаЗначений.Итог(3); - будет количество чисел участвующих в расчете
Среднее = ТаблицаЗначений.Итог(2)/ТаблицаЗначений.Итог(3);
первая колонка, на мой взгляд, просто не нужна
 
XOXOJI да именно так!

vbs не важно списком или таблицей у меня проблема в другом!!!!
 
vitfil в проблеме разобрался только XOXOJI, у меня все данные берутся из регистра - проблема в определении количества элементов массива для подчета! формулу мне уже подсказали (тут на форуме)....
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab